问题描述
更新 @user1155120 下面的评论是正确的:
这告诉你错误在 - 此处的其他分配范围内
我正在使用 VHDL 开发一个基本的 ALU。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use ieee.std_logic_misc.all;
entity alu is
port (
A,B : in unsigned(31 downto 0);
sel : in unsigned(2 downto 0);
O : out unsigned(63 downto 0));
end entity alu;
architecture Behavioral of alu is
begin
O <= resize(A,64) + resize(B,64) when sel = "000"
-- other assignments here
end Behavioral;
我对 VHDL 中无符号加法的理解是总和的长度将等于操作数的最长长度。但是,我的代码给出了以下错误:
错误:数组大小不匹配,左数组有 64 个元素,右数组有 128 个元素
奇怪。但是,如果我将调整大小值更改为小于 64 位,则行为将遵循我的预期(宽度=操作数的最大宽度)。像这样:
O <= resize(A,33) + resize(B,33) when sel = "000"
我收到以下错误:
错误:数组大小不匹配,左边数组有 64 个元素,右边数组有 33 个元素
我最终感到非常困惑。为什么当我只调整到某个值时输出的宽度会发生变化?
我使用的是 Vivado 2020 的学生许可证。
解决方法
你可能有
O <= resize(A,64) * resize(B,64) when sel = whatever
在您代码中较低行的某处,您在阅读错误时弄乱了行号。当您将添加更改为错误时,即第一行分析失败,您会得到现在看到的错误。