首先,我想说明这是我正在参加的练习考试。我知道答案是:cout = 4ns,S = 7ns。只是寻找一点解释。提前谢谢。
对于下面显示的全加器的VHDL实现,输出cout和S何时稳定在它们的最终值(考虑最坏情况输入的最坏情况时序路径)?
architecture concurrent_behavior of full_adder is
signal t1, t2, t3, t4, t5: std_logic;
begin
t1 <= not A after 1 ns;
t2 <= not cin after 1 ns;
t4 <= not ((A or cin) and B) after 2 ns;
t3 <= not ((t1 or t2) and (A or cin)) after 2 ns;
t5 <= t3 nand B after 2 ns;
S <= not((B or t3) and t5) after 2 ns;
cout <= not(t1 or t2) and t4) after 2 ns;
end concurrent_behavior;
答案 0 :(得分:3)
您基本上只是跟踪依赖项,并通过逻辑为每个路由添加依赖项。通常,最简单的方法是从输出向后追踪它所需的输入。例如:
cout <= not(t1 or t2) and t4) after 2 ns;
因此,cout的最后一个阶段有2 ns的延迟。它的输入是t1,t2和t4,所以它的2 ns延迟在t1,t2和t4都准备就绪之前无法启动(即,这些延迟中单个最长的延迟决定了最后一个阶段的开始时间)。
在这种情况下,t1和t2各自延迟1 ns,t4延迟2 ns。因此,最后一个阶段在初始输入后2 ns开始。从初始输入到最终输出,这给出了2 + 2 = 4 ns。
从算法的角度来看,我们可以说它是任何信号的延迟是该信号的最后“阶段”的延迟加上任何输入的最大延迟。
对于S:
total = 2 + max_delay(B, t3, t5)
total = 2 + delay(t5);
total = 2 + 2 + max_delay(t3, B)
total = 2 + 2 + delay(t3)
total = 2 + 2 + 2 + max_delay(t1, t2, A, cin)
total = 2 + 2 + 2 + delay(t1) (or delay(t2) -- they're the same).
total = 2 + 2 + 2 + 1