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

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

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

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

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

Спасибо


person Kiran    schedule 18.06.2011    source источник


Ответы (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

person davidd    schedule 29.06.2011

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

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

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

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

person Martin Thompson    schedule 20.06.2011
comment
Спасибо, я понял подход, но не средства. Я не смог найти регистр сдвига в библиотеке Xilinx. Существует параллельный-последовательный блок, который точно делает то, что мне нужно. Но моя проблема в том, что данные (2 бита) поступают каждый такт, и мне нужно получить последовательный вывод, который увеличил бы скорость в 2 раза. Любой подход в этом направлении был бы полезен. - person Kiran; 22.06.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. (Обратите внимание, что вывод представляет собой строку.)

person Ben Hocking    schedule 19.06.2011
comment
Большое спасибо за ваш ответ и время. К сожалению, это не то, что я искал. Я смотрю на получение двоичного значения сигнала в последовательном формате с учетом входного сигнала в десятичном формате. - person Kiran; 20.06.2011
comment
@kirancshet: боюсь, я не знаком с конкретным серийным форматом, о котором вы говорите. - person Ben Hocking; 20.06.2011