如何解决VHDL:即使在架构声明部分中定义了内部信号,也未定义
所以我一直在为VHDL课程做一些家庭作业,但我似乎无法理解这个问题。 这里的要点是创建在2的补码和无符号32位总线上均可使用的ALU的加法器/减法器,这就是为什么我有一个称为sub_mode(A-B = A +!B + 1)的条件的原因,激活后随身携带。 其余的不同输入和输出是不言自明的。 我的问题在于此类组件的测试平台,即使在体系结构的声明部分中初始化了进位和临时进位,最终仍显示未定义。我猜这是由于流程中的for循环将所有内容搞砸了。那是一个准确的猜测吗?如果可以,是否可以继续将两个位总线相加而不必完全创建由n个1位加法器组件组成的n位加法器?
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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。