有符号整型运算相关的库是 ieee.numeric_std,相关的数据类型有 signed 和 unsigned,相关的函数有 to_signed, to_unsigned。其中函数 to_signed 可以直接把你输入的负数转换为有符号整型。
下面讲述一个我遇到的问题,在设计中我有如下定义:
signal SignedY : signed(8 downto 0);当有符号加法器输入SignedX和SignedY分别为'0'&X"01"与'0'&X"FF",SignedZ得到的仿真结果为"11"&X"00",而正确的结果应该是"01"&X"00"。个人认为造成这种结果的原因是仿真器行为,也就是说SignedX与SignedY相加得到一个9-bit的结果,其赋值行为是将9-bit的结果进行符号位扩展后赋于SignedZ,而不是wind330理所当然的认为SignedX与SignedY相加得到一个10-bit的有符号数。
signal SignedX : signed(8 downto 0);
signal SignedZ : signed(9 downto 0);
...
SignedZ <= SignedX + SignedY;
...
把SignedX和SignedY定义为与SignedZ相同的位宽,如下:
signal SignedY : signed(9 downto 0);
signal SignedX : signed(9 downto 0);
signal SignedZ : signed(9 downto 0);
...
SignedZ <= SignedX + SignedY;
...
上述的结果都在Modelsim仿真得出,未上FPGA验证。
用户328621 2011-5-10 17:38
用户1122702 2010-6-22 11:02
用户1553604 2010-6-21 09:52
用户1122702 2010-6-20 21:39
用户1502065 2010-6-20 16:10
用户900892 2008-4-7 14:28
用户1441679 2008-4-3 21:04
用户900892 2007-6-19 11:35
用户1108907 2007-6-9 12:37