微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Simulink中为整数到二进制转换

如何解决在Simulink中为整数到二进制转换

| 这可能是我先前问题的重复。但是我认为不是。 我正在寻找一种将十进制格式的信号转换为二进制格式的技术。 我打算使用Xilinx库中的Simulink块将十进制转换为二进制格式。 因此,如果输入为3,则预期输出应为11(2个时钟周期)。我正在寻找要串行获取输出。 请建议我该怎么做,否则互联网上的任何指点都会有所帮助。 谢谢     

解决方法

        没错,您需要的是系统生成器的并行与串行块。 本文档中对此进行了描述: 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变量的普通常量块,这已经以\“ normal \”二进制形式提供了输出(假设您将其属性设置为无符号且二进制点为0。 然后,您需要编写一个小的串行器模块,该模块接收该输入,将其锁存到移位寄存器中,然后在每个时钟周期对寄存器进行一次移位,其中“从末端掉下来”的位成为您的输出位。根据您换班的方式,您可以使它成为MSB优先于LSB优先。 您必须在普通寄存器和一个多路复用器之前构建移位寄存器,以选择是进行并行加载还是进行移位。 (这种事情在VHDL中是几行代码,但是在图形中却很合适)。 如果必须提高串行速率,则需要从更快的时钟开始对其进行计时-您可以使用DCM生成该速率。     ,        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
,and8ѭ的结果将是
-0.111111000
。 (请注意,输出为字符串。)     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。