2011-11-02 8 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の最後のステージは2ns遅延します。その入力はt1、t2およびt4であるので、t1、t2およびt4がすべて準備完了(すなわち、それらの遅延のうちの最も長いものが最終ステージの開始時間を決定する)まで、その2nsの遅延は開始できない。

この場合、t1とt2は1nsずつ遅延し、t4は2ns遅延します。従って、最終段は、最初の入力から2ns後に開始する。これは、初期入力から最終出力まで2 + 2 = 4nsを与える。

アルゴリズム的に見ると、信号の遅延は、その信号の最後の「ステージ」の遅延とその入力の遅延の最大値です。 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:right。 –

+0

ありがとう、私は担当するが、私はできない。しかし、それを感謝します。 – joethecoder

関連する問題