我在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;
有人可以告诉我这些信息如何解决这个问题吗?
答案 0 :(得分:3)
有时使用向量数组的问题是编译器不知道您是打算将两个向量连接成单个向量,还是将两个向量连接成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
的信号,则没有问题,因为连接结果类型将是明确的。这里的问题特别是你也在同一个表达式中进行类型转换,因此编译器不能假设你想要连接的“中间”类型,即使你明白只有一个合理的选择。