Целочисленное преобразование в двоичное в Simulink - PullRequest
0 голосов
/ 18 июня 2011

Это может выглядеть повторением моего предыдущего вопроса. Но я думаю, что нет. Я ищу методику преобразования сигнала в десятичном формате в двоичный формат.

Я собираюсь использовать блоки Simulink в библиотеке Xilinx для преобразования десятичного в двоичный формат.

Таким образом, если вход равен 3, ожидаемый результат должен быть в 11 (2 тактовых цикла). Я ищу выход, который будет получен серийно.

Пожалуйста, предложите мне, как это сделать, или какие-либо ссылки в Интернете были бы полезны.

Спасибо

Ответы [ 3 ]

1 голос
/ 20 июня 2011

Используйте нормальный константный блок с переменной Matlab в нем, это уже дает вывод в "нормальном" двоичном файле (при условии, что вы установили для него свойства без знака и двоичную точку равны 0.

Тогдавам нужно написать небольшой блок сериализатора, который принимает этот вход, фиксирует его в регистре сдвига, а затем сдвигает регистр один раз за такт, причем бит, который «падает с конца», становится вашим выходным битом. В зависимости от того, каким образом ваше смещение, вы можете сделать так, чтобы MSB был первым, а не LSB первым.

Вам придется создать регистр сдвига из обычных регистров и мультиплексор перед каждым, чтобы выбрать, выполняете ли вы параллельную загрузку или переключение. (Это то, что представляет собой пару строк кода в VHDL, но правильная ошибка в графике).

Если вам нужно увеличить скорость последовательной передачи, вам нужно синхронизировать ее с более быстрой тактовой частоты -вы можете использовать DCM для генерации этого.

1 голос
/ 30 июня 2011

Вы правы, вам нужен параллельный последовательный блок от системного генератора.
Это описано в этом документе:

http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_1/sysgen_ref.pdf

Этот блок является скоростьюменяющийся блок.Проверьте упоминания параллельного последовательного блока в этих документах для дальнейших описаний:

http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_1/sysgen_gs.pdf

http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_1/sysgen_user.pdf

0 голосов
/ 19 июня 2011

Matlab имеет функцию dec2bin, которая преобразует десятичное число в двоичную строку.Так, например, dec2bin(3) вернул бы 11.

Также существует соответствующий bin2dec, который принимает двоичную строку и преобразует в десятичное число, так что bin2dec('11') вернул бы 3.

Если вы хотите преобразовать нецелое десятичное число в двоичную строку, сначала вы захотите определить, какое наименьшее двоичное место вы хотите представить, а затем немного до и послеобработки, в сочетании с dec2bin, чтобы получить результаты, которые вы ищете.Итак, если наименьшее двоичное место, которое вам нужно, это 1/512-е место (или 2 ^ -9), то вы можете сделать следующее (где binPrecision равно 1/512):

function result = myDec2Bin(decNum, binPrecision)

  isNegative=(decNum < 0);
  intPart=floor(abs(decNum));
  binaryIntPart=dec2bin(intPart);
  fracPart=abs(decNum)-intPart;
  scaledFracPart=round(fracPart / binPrecision);
  scaledBinRep=dec2bin(scaledFracPart);
  temp=num2str(10^log2(1/binPrecision)+str2num(scaledBinRep),'%d');                                                                                                                                                                        
  result=[binaryIntPart,'.',temp(2:end)];
  if isNegative
    result=['-',result];
  end
end

РезультатmyDec2Bin(0.256, 1/512) будет тогда 0.010000011, а результат myDec2Bin(-0.984, 1/512) будет -0.111111000.(Обратите внимание, что выводом является строка.)

...