这可能看起来像我之前的问题重复了。但我认为不是。 我正在寻找一种将Decimal格式的信号转换为二进制格式的技术。
我打算使用Xilinx库中的Simulink块将十进制格式转换为二进制格式。
因此,如果输入为3,则预期输出应为11(2个时钟周期)。我正在寻找连续获得的输出。
请建议我怎么做,或者互联网上的任何指针都会有所帮助。
由于
答案 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.010000011
,myDec2Bin(-0.984, 1/512)
的结果为-0.111111000
。 (注意输出是一个字符串。)