如何解决VHDL 中的无符号加法导致长度不正确的无符号结果
更新 @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
在您代码中较低行的某处,您在阅读错误时弄乱了行号。当您将添加更改为错误时,即第一行分析失败,您会得到现在看到的错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。