为什么我不能将此整数转换为 logic_vector?
Why couldn't I convert this integer into a logic_vector?
我一直在尝试将此整数类型的信号转换为 std_logic 向量,并将转换后的值分配给另一个与 VHDL 整数具有相同宽度的信号
signal temp : std_LOGIC_VECTOR(31 downto 0) := (others => '0');
signal FrameCumulative : integer :=0;
temp <= to_stdlogicvector(to_unsigned(FrameCumulative));
但是我得到这个错误:
Error (10346): VHDL error at vga.vhd(107): formal port or parameter
"SIZE" must have actual or default value
我正在使用 use IEEE.NUMERIC_STD.ALL;
和 use IEEE.STD_LOGIC_1164.ALL;
首先,我犯了一个错误,没有检查 VHDL 中的整数大小,并试图将一个整数分配给一个 14 位向量,但在我考虑了一下之后,我改正了我的错误。
现在根据许多在线资源,我正在做的应该可以工作,但我的合成器抱怨它。
如果您确实知道造成这种情况的原因,您介意详细说明您的答案而不是仅仅发布正确的代码,谢谢!
必须为函数 to_unsigned
提供一个参数,该参数指定您希望它生成的矢量的宽度。函数 to_stdlogicvector
也不正确。您的行应如下所示:
temp <= std_logic_vector(to_unsigned(FrameCumulative, temp'length));
函数to_unsigned
为转换函数,必须提供目标宽度。在这里,正如@BrianDrummond 所建议的那样,宽度是通过从目标向量本身 (temp
) 中获取 length
属性来指定的。 std_logic_vector
是类型转换,其中 unsigned
值被简单地直接解释为 std_logic_vector
.
我一直在尝试将此整数类型的信号转换为 std_logic 向量,并将转换后的值分配给另一个与 VHDL 整数具有相同宽度的信号
signal temp : std_LOGIC_VECTOR(31 downto 0) := (others => '0');
signal FrameCumulative : integer :=0;
temp <= to_stdlogicvector(to_unsigned(FrameCumulative));
但是我得到这个错误:
Error (10346): VHDL error at vga.vhd(107): formal port or parameter "SIZE" must have actual or default value
我正在使用 use IEEE.NUMERIC_STD.ALL;
和 use IEEE.STD_LOGIC_1164.ALL;
首先,我犯了一个错误,没有检查 VHDL 中的整数大小,并试图将一个整数分配给一个 14 位向量,但在我考虑了一下之后,我改正了我的错误。
现在根据许多在线资源,我正在做的应该可以工作,但我的合成器抱怨它。
如果您确实知道造成这种情况的原因,您介意详细说明您的答案而不是仅仅发布正确的代码,谢谢!
必须为函数 to_unsigned
提供一个参数,该参数指定您希望它生成的矢量的宽度。函数 to_stdlogicvector
也不正确。您的行应如下所示:
temp <= std_logic_vector(to_unsigned(FrameCumulative, temp'length));
函数to_unsigned
为转换函数,必须提供目标宽度。在这里,正如@BrianDrummond 所建议的那样,宽度是通过从目标向量本身 (temp
) 中获取 length
属性来指定的。 std_logic_vector
是类型转换,其中 unsigned
值被简单地直接解释为 std_logic_vector
.