工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Verilog

D ラッチ

フリップフロップは、クロックの正または負のエッジで入力でデータをキャプチャします。注意すべき重要なことは、クロック エッジの後、次のクロック エッジまでにデータに何が起こっても、出力には反映されないということです。 ラッチ 一方、クロックのエッジでキャプチャするのではなく、イネーブル ピンがアサートされている限り、出力は入力に従います。

デザイン

この例では、3 つの入力と 1 つの出力を持つラッチを作成します。入力 d rstn は 0 または 1 のデータを表します アクティブローリセットとenの略 イネーブルの略で、入力データを出力にラッチさせるために使用されます。リセットがアクティブ LOW であるということは、単純に、この入力が 0 になるとデザイン エレメントがリセットされることを意味します。つまり、値が LOW のときにリセットがアクティブになります。出力 q の値 入力 d によって決定されます , jarstn .

  
  
module d_latch (  input d,           // 1-bit input pin for data
                  input en,          // 1-bit input pin for enabling the latch
                  input rstn,        // 1-bit input pin for active-low reset
                  output reg q);     // 1-bit output pin for data output
 
   // This always block is "always" triggered whenever en/rstn/d changes
   // If reset is asserted then output will be zero
   // Else as long as enable is high, output q follows input d
   always @ (en or rstn or d)
      if (!rstn)
         q <= 0;
      else
         if (en)
            q <= d;
endmodule

  

always への感度リストに注意してください。 ブロックには、出力を更新するために必要なすべての信号が含まれています。このブロックは、感度リスト内のいずれかのシグナルがその値を変更するたびにトリガーされます。またq en の場合にのみ d の値を取得します 高いので、ポジティブです

回路図

テストベンチ

  
  
module tb_latch;
   // Declare variables that can be used to drive values to the design
   reg d;  
   reg en;
   reg rstn;
   reg [2:0] delay;
   reg [1:0] delay2;
   integer i;
   
   // Instantiate design and connect design ports with TB signals
   d_latch  dl0 ( .d (d),
                  .en (en),
                  .rstn (rstn),
                  .q (q));

   // This initial block forms the stimulus to test the design
   initial begin
      $monitor ("[%0t] en=%0b d=%0b q=%0b", $time, en, d, q);
   
      // 1. Initialize testbench variables
      d <= 0;
      en <= 0;
      rstn <= 0;
      
      // 2. Release reset
      #10 rstn <= 1;
      
      // 3. Randomly change d and enable
      for (i = 0; i < 5; i=i+1) begin
         delay = $random;
         delay2 = $random;
         #(delay2) en <= ~en;
         #(delay) d <= i;
      end
   end
endmodule

  

テストベンチが信号をよりランダムにアサートおよびデアサートするようにするために、reg を宣言しました。 delay という変数 サイズが 3 ビットであるため、0 から 7 までの任意の値を取ることができます。その後、遅延 変数は d の代入を遅らせるために使用されます と en ループごとに異なるパターンを取得します。

出力

シミュレーションログ
ncsim> run
[0] en=0 d=0 q=0
[11] en=1 d=0 q=0
[18] en=0 d=0 q=0
[19] en=0 d=1 q=0
[20] en=1 d=1 q=1
[25] en=1 d=0 q=0
[27] en=0 d=0 q=0
[32] en=0 d=1 q=0
[33] en=1 d=1 q=1
[34] en=1 d=0 q=0
ncsim: *W,RNQUIE: Simulation is complete.

画像をクリックすると大きくなります。


Verilog

  1. エミッタ接地アンプ
  2. シンプルなオペアンプ
  3. 精密電圧フォロワ
  4. 非反転アンプ
  5. C# の基本的な入力と出力
  6. C++ 基本入出力
  7. C 入力 出力 (I/O)
  8. Python の入力、出力、およびインポート
  9. Java 基本入出力
  10. C++ 基本入出力:Cout、Cin、Cerr の例
  11. C - 入力と出力