我一直在尝试将此类型整数信号转换为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位向量,但在我给它一些想法之后我就放弃了我的错误。
现在根据许多在线资源,我正在做的事情应该有效,但我的合成器抱怨它。
如果您确实知道原因,请注意您的答案,而不仅仅是发布正确的代码,谢谢!
答案 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
。