中缀表达式VHDL中的不明确类型

中缀表达式VHDL中的不明确类型,vhdl,modelsim,Vhdl,Modelsim,ModelSim中出现以下错误: 错误:[..]/test1\u toVectorAlignment\u rtl.vhd(40):中缀表达式中的不明确类型;t_RAMXx8或ieee.std_逻辑_1164.std_逻辑_向量。 ARCHITECTURE rtl OF test1_toVectorAlignment IS type t_RAMXx8 is array (natural RANGE <>) of std_logic_vector(7 downto 0); signal

ModelSim中出现以下错误:

错误:[..]/test1\u toVectorAlignment\u rtl.vhd(40):中缀表达式中的不明确类型;t_RAMXx8或ieee.std_逻辑_1164.std_逻辑_向量。

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;

有人能告诉我如何解决这个问题吗?

有时向量数组的问题是,编译器不知道是要将两个向量连接成一个向量,还是要将两个向量连接成一个2向量数组。您需要告诉它您打算连接什么:

currentIq <= unsigned(std_logic_vector'(RAM28x8(5)(4 downto 0) & RAM28x8(4)));
但第一种方法更安全、更好

再解释一下:


如果将该串联结果分配给类型为
std\u logic\u vector
的信号,则不会有问题,因为串联结果类型是明确的。这里的问题是,您也在同一个表达式中进行类型转换,因此编译器无法假定您希望连接到的“中间”类型,即使您显然只有一个合理的选择。

我尝试了“类型转换”(std_logic_vector之后没有撇号('),而不是“类型限定”(带撇号)。本例中的类型转换不起作用。你知道为什么吗?强制转换/转换或多或少是“将此类型表达式转换为此类型”。限定是“此表达式具有此类型”“看到区别了吗?在前者中,只更改表达式返回的任何类型。在后者中,您定义的是表达式的类型。我没有正确地问后续问题,稍后我会重试。可能我没有很好地解释-简单的类型转换不起作用的原因是编译器无法根据类型转换确定表达式类型,即您的类型转换来源。就编译器而言,您可以从任何类型转换到
std\u logic\u vector
。限定条件确定表达式本身的类型。区别清楚吗?
currentIq <= unsigned(std_logic_vector'(RAM28x8(5)(4 downto 0) & RAM28x8(4)));
currentIq <= unsigned(RAM28x8(5)(4 downto 0)) & unsigned(RAM28x8(4));