在Simulink中整数到二进制转换

时间:2011-06-18 14:30:16

标签: fpga simulink xilinx system-generator

这可能看起来像我之前的问题重复了。但我认为不是。 我正在寻找一种将Decimal格式的信号转换为二进制格式的技术。

我打算使用Xilinx库中的Simulink块将十进制格式转换为二进制格式。

因此,如果输入为3,则预期输出应为11(2个时钟周期)。我正在寻找连续获得的输出。

请建议我怎么做,或者互联网上的任何指针都会有所帮助。

由于

3 个答案:

答案 0 :(得分:1)

使用带有Matlab变量的常规常量块,这已经以“普通”二进制形式给出输出(假设您将其上的属性设置为无符号且二进制点为0。

然后你需要编写一个小的串行器模块,它接受该输入,将其锁存到移位寄存器中,然后在每个时钟周期移位寄存器一次,使“掉线”的位成为输出位。根据你的班次,你可以先让它成为LSB的首选。

你必须在普通寄存器和多路复用器之前建立移位寄存器,以选择是进行并行加载还是移位。 (这是VHDL中的几行代码,但在图形中是正确的。)

如果必须提高串行速率,则需要从更快的时钟计时 - 您可以使用DCM来生成此序列。

答案 1 :(得分:1)

您是对的,您需要的是系统生成器的并行到串行块 本文档对此进行了描述:

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

答案 2 :(得分:0)

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.010000011myDec2Bin(-0.984, 1/512)的结果为-0.111111000。 (注意输出是一个字符串。)

相关问题