【发布时间】:2023-03-23 14:11:02
【问题描述】:
我有以下问题:
我有一个由单个进程驱动的简单实体:
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;
在实践中,它与全加器非常相似。 理想情况下,框图应如下所示:
我的问题出现在第一个循环之后的循环中,我发现操作数的值相等。在这种情况下,进程不会激活,因此无法计算出 A = 1,B = 1,Carry_In = 1。 我的系统中有一个时钟信号,但时钟比输入数据变化快。如果我将时钟放在灵敏度列表中,我会得到错误的结果,因为进位以错误的方式“传播”。 我尝试不使用敏感度列表并等待“X”时间,“X”是更改操作数 A 和 B 的最短时间。它有效,但它取决于项目中总是可以改变的东西。 还有其他方法可以激活此过程吗?
【问题讨论】:
-
我看不到你的照片。这应该是组合逻辑还是顺序逻辑?如果它是组合的,那么您就有组合反馈。如果是连续的,时钟在哪里?请提交minimal reproducible example。
-
您的代码没有显示时钟,并且进程缺少灵敏度列表中的信号。等待时间是不可综合的。目标是什么?您的目标是 FPGA 吗?
标签: vhdl