中缀表达式 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" 类型,即使您很明显只有一个合理的选择。