如何解决在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 举报,一经查实,本站将立刻删除。