在 VHDL 中添加 1 个 4 位和 1 个 3 位输入

问题描述 投票:0回答:1

我正在尝试用 VHDL 设计一个具有 4 位和 3 位无符号输入的 ALU。但我调整输入大小的尝试失败了,因此加法操作将“X”作为输出。

这是我的代码:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity alu_bv is
    Port ( a : in unsigned (3 downto 0);
           b : in unsigned (2 downto 0);
           ch : in STD_LOGIC_VECTOR (2 downto 0);
           y : out unsigned (3 downto 0));
end alu_bv;

architecture Behavioral of alu_bv is
    signal c : unsigned (3 downto 0);

begin
    process(a,b,ch)
    begin
        c <= unsigned('0' & b);

        case ch is
            when "000" => y <= a + c;
            when "001" => y <= a - c;
            when "010" => y <= a + 1;
            when "011" => y <= a - 1;
            when "100" => y <= a and c;
            when "101" => y <= a or c;
            when "110" => y <= not a;
            when "111" => y <= a xor c;
            when others => NULL;
        end case;
    end process;
end Behavioral;

我在分配给 c 时尝试过不进行类型转换

c <= ('0' & b);

我已经尝试了调整大小功能

c <= resize(b, a'length);

这是我运行行为模拟时的输出波形:

十六进制基数: Hexadecimal Radix

二进制基数: Binary radix

您能建议解决这个问题吗?

resize vhdl alu
1个回答
0
投票

X
仅在开始时出现,后续事件都可以。这是因为
c
更新得太晚,无法被
y <= a + c
的第一次执行所拾取,如here所述。

尝试将

c
添加到敏感度列表中,它将触发需要使用
y
的最新值更新
c
的事件。

© www.soinside.com 2019 - 2024. All rights reserved.