Modélisation d'une bascule T déclenchée par front positif avec effacement asynchrone

Aug 19 2020

Je modélise une bascule T déclenchée par un front positif avec un clear asynchrone. Voici le code:

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

Est-ce un code efficace? Est-il acceptable de devoir séparer des alwaysblocs, ou existe-t-il un moyen d'inclure à la fois le code de comportement clearet le clkcode de comportement des signaux dans un seul alwaysbloc?

Réponses

1 toolic Aug 19 2020 at 17:33

C'est une manière courante de combiner les alwaysblocs:

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

Il est préférable d'affecter un signal à partir d'un seul alwaysbloc.

Déclencher le alwaysbloc sur le posedgede clearsorte que la synthèse peut déduire la logique désiré (asynchrone clair, bascule synchrone).

Utilisez des affectations non bloquantes ( <=) pour la logique séquentielle.

Il n'est pas nécessaire de le faire explicitement q=qcar cela est implicite.