vhdl - 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;
解决方案
推荐阅读
- java - 在 Spring-Boot 中从 websocket 接收数据时调用服务时遇到问题
- java - 我想将 MultipartFile 转换为所需的类型 byte[] 但出现错误
- sql - 带有 SELECT 语句的 SQL INSERT INTO
- bash - Azure Pipelines 的 YAML 文件中的 Echo 打印不同的内容
- mysql - Mysql参数化视图
- flutter - 如何根据 Flutter 中的条件更改底部导航栏项
- java - Atomikos 的 Axon 框架?它是如何工作的?
- c# - 将 .Net Framework 应用程序与 .Net Core 库混合使用
- android - 如何使用“R.id object = new R.id();” 使用构建工具 3.6.0?
- javascript - 在嵌套对象的情况下,如何从嵌套对象访问顶级对象的属性?