中缀表达式 VHDL 中的歧义类型
Ambiguous type in infix expression VHDL
我在 ModelSim 中遇到以下错误:
错误:[..]/test1_toVectorAlignment_rtl.vhd(40):中缀表达式中的类型不明确; t_RAMXx8 或 ieee.std_logic_1164.STD_LOGIC_VECTOR.
ARCHITECTURE rtl OF test1_toVectorAlignment IS
type t_RAMXx8 is array (natural RANGE <>) of std_logic_vector(7 downto 0);
signal RAM28x8: t_RAMXx8(0 to 27);
BEGIN
...
currentIq<=unsigned(RAM28x8(5)(4 downto 0) & RAM28x8(4));
...
END rtl;
实体声明:
ENTITY test1_toVectorAlignment IS
...
currentIq: out unsigned(12 downto 0);
...
END test1_toVectorAlignment;
有人可以根据这些信息告诉我如何解决这个问题吗?
向量数组有时会出现问题,编译器不知道您是打算将两个向量连接成一个向量,还是将两个向量连接成一个 2 向量数组。您需要告诉它您打算连接什么:
currentIq <= unsigned(std_logic_vector'(RAM28x8(5)(4 downto 0) & RAM28x8(4)));
在这种情况下,由于 unsigned
在您发布的代码中没有任何此类歧义,您也可以使用此快捷方式:
currentIq <= unsigned(RAM28x8(5)(4 downto 0)) & unsigned(RAM28x8(4));
但是第一种方法更安全,更好。
多一点解释:
如果您将该连接的结果分配给类型为 std_logic_vector
的信号,则不会有问题,因为连接结果类型是明确的。这里的具体问题是您也在同一个表达式中进行类型转换,因此编译器无法假设您希望连接成什么 "intermediate" 类型,即使您很明显只有一个合理的选择。
我在 ModelSim 中遇到以下错误:
错误:[..]/test1_toVectorAlignment_rtl.vhd(40):中缀表达式中的类型不明确; t_RAMXx8 或 ieee.std_logic_1164.STD_LOGIC_VECTOR.
ARCHITECTURE rtl OF test1_toVectorAlignment IS
type t_RAMXx8 is array (natural RANGE <>) of std_logic_vector(7 downto 0);
signal RAM28x8: t_RAMXx8(0 to 27);
BEGIN
...
currentIq<=unsigned(RAM28x8(5)(4 downto 0) & RAM28x8(4));
...
END rtl;
实体声明:
ENTITY test1_toVectorAlignment IS
...
currentIq: out unsigned(12 downto 0);
...
END test1_toVectorAlignment;
有人可以根据这些信息告诉我如何解决这个问题吗?
向量数组有时会出现问题,编译器不知道您是打算将两个向量连接成一个向量,还是将两个向量连接成一个 2 向量数组。您需要告诉它您打算连接什么:
currentIq <= unsigned(std_logic_vector'(RAM28x8(5)(4 downto 0) & RAM28x8(4)));
在这种情况下,由于 unsigned
在您发布的代码中没有任何此类歧义,您也可以使用此快捷方式:
currentIq <= unsigned(RAM28x8(5)(4 downto 0)) & unsigned(RAM28x8(4));
但是第一种方法更安全,更好。
多一点解释:
如果您将该连接的结果分配给类型为 std_logic_vector
的信号,则不会有问题,因为连接结果类型是明确的。这里的具体问题是您也在同一个表达式中进行类型转换,因此编译器无法假设您希望连接成什么 "intermediate" 类型,即使您很明显只有一个合理的选择。