更新@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
在代码的某个地方,当你读到错误时,你把行号弄乱了。当您将添加更改为错误时,这是第一行分析失败,您现在看到的错误。