进程敏感度列表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你说得对,我将用更新的信息编辑我的答案