问题描述
更新 @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 的学生许可证。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)