非同期クリアを使用したポジティブエッジトリガーTフリップフロップのモデリング

Aug 19 2020

非同期クリアを使用して、ポジティブエッジでトリガーされるTフリップフロップをモデリングしています。コードは次のとおりです。

module t_flip_flop_exam (q,clk,clear,t);
  input t ;
  input clk;
  input clear;
  output reg q ;
  reg internal_t;
  always @ (clear)begin
    if (clear==1)
      q=0;
    else 
      q=q;
  end
  always @ (posedge clk)begin
        if (t==1)
          q=~q;
        else 
          q=q;
     
  end
  
endmodule

これは効率的なコードですか?alwaysブロックを分離する必要があるのは問題ありませんか、それとも単一のブロックにclearclkシグナルの動作コードの両方を含める方法はありalwaysますか?

回答

1 toolic Aug 19 2020 at 17:33

これは、alwaysブロックを組み合わせる一般的な方法です。

module t_flip_flop_exam (q,clk,clear,t);
    input t;
    input clk;
    input clear;
    output reg q;

    always @(posedge clk or posedge clear) begin
        if (clear)
            q <= 0;
        else if (t)
            q <= ~q;     
    end
endmodule

単一のalwaysブロックからの信号に割り当てを行うことをお勧めします。

トリガーalways上のブロックposedgeclear合成は、所望のロジック(非同期クリア、同期トグル)を推測することができるように。

<=シーケンシャルロジックにはノンブロッキング割り当て()を使用します。

q=q暗黙的に示されているため、明示的に行う必要はありません。