首页 > 解决方案 > VHDL:即使在架构声明部分定义了内部信号也是未定义的

问题描述

所以我一直在为我的 VHDL 课程做一些功课,我似乎无法理解这个问题。这里的重点是创建一个在 2 的补码和无符号 32 位总线上工作的 ALU 的加法器/减法器,这就是为什么我有一个称为 sub_mode ( A - B = A + !B + 1 ) 的条件,它也将激活时作为随身携带。其余不同的输入和输出是不言自明的。我的问题是此类组件的测试平台,即使在架构的声明部分中初始化了 carry_temp 和 r_temp,最终显示为未定义。我猜这是由于过程中的 for 循环搞砸了一切。这会是一个准确的猜测吗?如果是的话,

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity add_sub is
port(
    a        : in  std_logic_vector(31 downto 0);
    b        : in  std_logic_vector(31 downto 0);
    sub_mode : in  std_logic;
    carry    : out std_logic;
    zero     : out std_logic;
    r        : out std_logic_vector(31 downto 0)
);
end add_sub;

architecture synth of add_sub is

signal cond_inv : std_logic_vector(31 downto 0);
signal carry_temp : std_logic_vector(32 downto 0) := (others => '0');
signal r_temp : std_logic_vector(31 downto 0) := (others => '0');

begin           
behave : process(a,b,sub_mode)
begin 
    if sub_mode = '1' then 
        cond_inv <= b xor x"ffffffff";
    else
        cond_inv <= b;
    end if; 
    carry_temp(0) <= sub_mode;
    for i in 0 to 31 loop
        r_temp(i) <= a(i) xor cond_inv(i) xor carry_temp(i);
        
        carry_temp(i+1) <= 
            (a(i) and cond_inv(i)) or
            (a(i) and carry_temp(i)) or
            (cond_inv(i)and carry_temp(i));
    end loop;
    if r_temp = x"00000000" then 
        zero <= '1';
    else 
        zero <= '0';
    end if;
    r <= r_temp;
    carry <= carry_temp(32);
end process behave;
end synth;

标签: vhdltest-benchalu

解决方案


推荐阅读