微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VHDL 中的无符号加法导致长度不正确的无符号结果

如何解决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 举报,一经查实,本站将立刻删除。