如何在作业中使用无符号文字?
看一下这个例子:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;
entity myTest is
Port ( clk : in STD_LOGIC );
end myTest;
architecture Behavioral of myTest is
signal testSignal : unsigned (31 downto 0);
begin
process (clk) is
begin
if (rising_edge (clk)) then
-- this compiles fine:
testSignal <= testSignal + 1;
-- this causes an error. Why?
testSignal <= 1;
end if;
end process;
end Behavioral;
该行:
testSignal <= 1;
在Xilinx ISE上产生以下错误消息:
Line 22. Type of testSignal is incompatible with type of 1.
任何人都可以解释为什么以及如何解决这个问题?
答案 0 :(得分:3)
+
运算符在ieee.numeric_std
unsigned
和integer
重载,这就是第一行有效的原因;但是,赋值不是(也可能不是),并且因为1
是一个整数文字,所以不能直接赋值给unsigned
(它是一个向量);它必须先转换。标准方法是:
testSignal <= to_unsigned(1, testSignal'length);
to_unsigned()
有两个参数:要转换的natural
和要转换为的矢量长度。