在VHDL中添加Ripple进位延迟

在VHDL中添加Ripple进位延迟,vhdl,Vhdl,为了这个问题,我连续三天绞尽脑汁。。也就是说,我不能在3位RCA的全加器中插入延迟。 不幸的是,我试图将它们添加到全加器代码中,但只有一个全加器考虑延迟,而另外两个不考虑延迟。 因此,我想知道是否有可能在端口映射部分专门为3位RCA代码添加延迟 帮我摆脱它 多谢各位 这是我的密码 library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity RCA_3 is Port ( A : in STD_LOGIC_VECTOR (2 downto 0); B :

为了这个问题,我连续三天绞尽脑汁。。也就是说,我不能在3位RCA的全加器中插入延迟。 不幸的是,我试图将它们添加到全加器代码中,但只有一个全加器考虑延迟,而另外两个不考虑延迟。 因此,我想知道是否有可能在端口映射部分专门为3位RCA代码添加延迟

帮我摆脱它

多谢各位

这是我的密码

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;


entity RCA_3 is
Port (
A : in STD_LOGIC_VECTOR (2 downto 0);
B : in STD_LOGIC_VECTOR (2 downto 0);
Cin : in STD_LOGIC;
S : out STD_LOGIC_VECTOR ( 2 downto 0);
Cout : out STD_LOGIC);
end RCA_3;


architecture Behavioral of RCA_3 is

component full_adder
Port ( 
a : in STD_LOGIC;
b : in STD_LOGIC;
cin : in STD_LOGIC;
sum : out STD_LOGIC;
cout : out STD_LOGIC);
end component;

signal c1,c2: STD_LOGIC; 

begin

--here i have a trouble

process is
begin 

wait for 10 ns;
FA1: full_adder port map( a => A(0), b => B(0), cin => Cin, sum => S(0), cout => c1);
wait for 10 ns;
FA2: full_adder port map( a => A(1), b => B(1), cin => c1, sum => S(1), cout => c2);
wait for 10 ns;
FA3: full_adder port map( a => A(2), b => B(2), cin => c2, sum => S(2), cout => Cout);
wait for 10 ns;

end process;
end Behavioral;




我不知道您的全加器代码,但我认为是这样的:

entity full_adder is
    Port (
    a    : in  STD_LOGIC;
    b    : in  STD_LOGIC;
    cin  : in  STD_LOGIC;
    s    : out STD_LOGIC;
    cout : out STD_LOGIC);
end full_adder;

architecture bhv of full_adder is
begin
    s <= a XOR b XOR cin;
    cout <= (a AND b) OR (cin AND a) OR (cin AND b);
end bhv;
    s <= a XOR b XOR cin after 10 ns;
    cout <= (a AND b) OR (cin AND a) OR (cin AND b) after 10 ns;
实体全加器是
港口(
答:标准逻辑;
b:标准逻辑;
cin:标准逻辑;
s:输出标准逻辑;
cout:输出标准逻辑);
端部全加器;
全加器的结构bhv是
开始

你们的FAs实例在一个过程中,这是不对的。我怎么给全加器加延迟呢?我试过了,就像你们说的,但问题是:-第一个全加器返回10 ns后的和位-第二个全加器返回20 ns后的和位-最后一个全加器返回20 ns后的和位-疑问恰恰在第三个全加器上。为什么它在30纳秒后不返回和位?全加器的实例在没有灵敏度列表的进程中。您可以删除流程(我更喜欢这种方式),也可以将所需的信号添加到流程的灵敏度列表中。所以只要写:。。。过程是beginfa1:全加法器端口映射(a=>a(0),b=>b(0),cin=>cin,sum=>S(0),cout=>c1);FA2:全加法器端口映射(a=>a(1),b=>b(1),cin=>c1,sum=>S(1),cout=>c2);FA3:全加法器端口映射(a=>a(2),b=>b(2),cin=>c2,sum=>S(2),cout=>cout);结束过程;我按照你说的做了,但我不明白为什么第三个全加器在20 ns而不是30 ns后返回最后一位和。a和b的测试值是多少?也许可以尝试FA2的cout为1的情况,然后FA3的输出延迟30 ns。只需在a中尝试“010”,即可看到模拟的屏幕截图: