进程敏感度列表vhdl
我有以下问题: 我有一个由单个流程驱动的简单实体:进程敏感度列表vhdl,vhdl,Vhdl,我有以下问题: 我有一个由单个流程驱动的简单实体: LIBRARY IEEE; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; USE ieee.std_logic_arith.ALL; entity somma_CDC is Port (
LIBRARY IEEE;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
USE ieee.std_logic_arith.ALL;
entity somma_CDC is
Port
(
A : in std_logic;
B : in std_logic;
Reset : in std_logic;
Internal_Carry_enable : in std_logic;
S : out std_logic
);
end somma_CDC;
architecture Behavioral_somma_CDC of somma_CDC is
signal Internal_Carry: std_logic;
begin
somma_CDC:process (Reset,A,B)
begin
if Reset = '1'
then
Internal_Carry <= '0';
else
S <= A XOR B XOR Internal_Carry ;
if (Internal_Carry_enable = '1')
then
Internal_Carry <= (A AND B) OR (Internal_Carry AND A) OR (Internal_Carry AND B) ;
end if;
end if;
end process;
end architecture;
IEEE库;
使用ieee.std_logic_1164.ALL;
使用ieee.std_logic_unsigned.ALL;
使用ieee.std_logic_arith.ALL;
实体somma_CDC是
港口
(
答:标准逻辑;
B:标准逻辑;
复位:在标准逻辑中;
内部进位启用:在标准逻辑中;
S:输出标准逻辑
);
结束somma_疾病预防控制中心;
somma_CDC的架构行为_somma_CDC是
信号内部进位:标准逻辑;
开始
somma_CDC:过程(重置,A,B)
开始
如果重置='1'
然后
内部进位TL;博士:
将内部携带添加到您的敏感度列表中
编辑:正如@Tricky指出的,内部进位启用也应该在敏感度列表中
完整答案:
我认为这里的问题是,您可能不了解如何使用敏感度列表。您将其用作类似C的编程,其中的过程将是读取重置,A和B作为输入
但在vhdl中,灵敏度列表中的每个信号都是一个触发器,必须更改其值才能重新运行进程
所以,这里的主要问题是信号的内部携带。由于它不在灵敏度列表中,信号S在第一次运行后不会响应为新值。您需要更改重置、A或B以查看上次运行的内部_进位的效果
代码中还有其他问题,但与此无关
内部进位是一个闩锁,因为您没有为它指定任何默认值(如果重置不是0,内部进位启用不是1,它应该保留哪个值?)
您可能需要看看组合逻辑和顺序逻辑之间的区别,因为您写的是加法器电路中的时钟。如果添加时钟,则将值分配给信号将生成一个寄存器,而灵敏度列表中没有时钟的进程将纯粹是组合的
我看不到你的照片。这应该是组合逻辑还是顺序逻辑?如果是组合的,你有组合反馈。如果是顺序的,时钟在哪里?请提交一份。您的代码没有显示时钟,并且流程缺少灵敏度列表中的信号。等待时间不可合成。目标是什么?您的目标是FPGA吗?内部进位启用
也需要处于敏感状态list@Tricky你说得对,我将用更新的信息编辑我的答案