2011-11-02 48 views
3

首先,我想說明這是我正在參加的練習考試。我知道答案是:cout = 4ns,S = 7ns。只是尋找一點解釋。提前致謝。如何判斷VHDL的輸出何時達到其最終值?

對於下面所示的全加器的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; 

回答

3

你基本上只是追蹤依賴關係,並通過邏輯添加每條路由的依賴關係。通常情況下,從輸出回溯到所需輸入是最容易的。例如:

cout <= not(t1 or t2) and t4) after 2 ns; 

因此,cout的最後一個階段有2 ns的延遲。它的輸入是t1,t2和t4,因此在t1,t2和t4全部準備好之前(即單個最長的延遲確定最後一級的開始時間),它的2 ns延遲不能開始。

在這種情況下,t1和t2每個延遲1 ns,並且t4延遲2 ns。因此,最後階段在初始輸入後2ns開始。從初始輸入到最終輸出給出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 
+0

啊謝謝了一堆人,非常有幫助。因此,首先,t1和t2的延遲沒有考慮到,因爲它們發生在1ns,而t4是2ns的最長延遲? – joethecoder

+0

@mikegreen:對。 –

+0

謝謝,我會代表,但我不能。但非常感謝。 – joethecoder

相關問題