我在 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;
Run Code Online (Sandbox Code Playgroud)
实体声明:
ENTITY test1_toVectorAlignment IS
...
currentIq: out unsigned(12 downto 0);
...
END test1_toVectorAlignment;
Run Code Online (Sandbox Code Playgroud)
有人可以用这些信息告诉我如何解决这个问题吗?
有时向量数组的问题是编译器不知道您是打算将两个向量连接成一个向量,还是将两个向量连接成一个 2 向量数组。你需要告诉它你打算连接什么:
currentIq <= unsigned(std_logic_vector'(RAM28x8(5)(4 downto 0) & RAM28x8(4)));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,由于unsigned您发布的代码中没有任何此类歧义,您也可以使用此快捷方式:
currentIq <= unsigned(RAM28x8(5)(4 downto 0)) & unsigned(RAM28x8(4));
Run Code Online (Sandbox Code Playgroud)
但第一种方法更安全,更好。
多一点解释:
如果您将该连接的结果分配给类型为 的信号std_logic_vector,则没有问题,因为连接结果类型将是明确的。这里的具体问题是您也在同一个表达式中进行类型转换,因此编译器无法假设您希望连接成什么“中间”类型,即使您很明显只有一个合理的选择。
| 归档时间: |
|
| 查看次数: |
3885 次 |
| 最近记录: |