为什么我不能将这个整数转换成logic_vector?

时间:2016-03-24 16:31:01

标签: vhdl hardware

我一直在尝试将此类型整数信号转换为std_logic向量,并将转换后的值分配给另一个与VHDL整数具有相同宽度的信号

signal temp : std_LOGIC_VECTOR(31 downto 0) := (others => '0'); 
signal FrameCumulative : integer :=0;

temp <= to_stdlogicvector(to_unsigned(FrameCumulative));

但是我收到了这个错误:

  

错误(10346):vga.vhd(107)处的VHDL错误:正式端口或参数   “SIZE”必须具有实际值或默认值

我正在使用use IEEE.NUMERIC_STD.ALL;use IEEE.STD_LOGIC_1164.ALL;

首先,我犯了一个错误,即不检查VHDL中的整数大小,并试图将一个整数分配给一个14位向量,但在我给它一些想法之后我就放弃了我的错误。

现在根据许多在线资源,我正在做的事情应该有效,但我的合成器抱怨它。

如果您确实知道原因,请注意您的答案,而不仅仅是发布正确的代码,谢谢!

1 个答案:

答案 0 :(得分:3)

必须为函数to_unsigned提供一个参数,指定您希望它生成的向量的宽度。函数to_stdlogicvector也不是正确的使用方法。你的行应该是这样的:

temp <= std_logic_vector(to_unsigned(FrameCumulative, temp'length));

函数to_unsigned是转换函数,必须提供目标宽度。这里,正如@BrianDrummond所建议的那样,宽度是通过从目标向量本身(length)获取temp属性来指定的。 std_logic_vector是一种类型广播,其中unsigned值只是直接解释为std_logic_vector