Целочисленное преобразование в двоичное в Simulink

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

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

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

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

Спасибо

3 ответа

Решение

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

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

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

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

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

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

Матлаб имеет 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, (Обратите внимание, что выводом является строка.)

Другие вопросы по тегам