2014-09-17 4 views
0

Je passais en revue un document du site Web de Microsemi (Actel HDL Code) et j'ai trouvé quelques implémentations de flip-flop (Synchrone, Asynchrone etc.) Dans tous les cas l'auteur a modélisé le flip-flop -flops avec des instructions de blocage.Façon correcte de modéliser un Flip Flop

Je veux savoir si ces implémentations sont correctes, parce que j'ai toujours utilisé le mode non-bloquant pour modéliser la logique séquentielle? Ai-je manqué quelque chose ou est-ce juste un moyen de modéliser seulement un flip flop et pas un circuit séquentiel en général?

// Rising Edge Flip-Flop with Asynchronous Reset 
module dff_async_rst (data, clk, reset, q); 
    input data, clk, reset; 
    output q; 
    reg q; 

    always @(posedge clk or negedge reset) 
    if (~reset) 
     q = 1'b0; 
    else 
     q = data; 

    endmodule 

//Rising Edge Flip-Flop with Synchronous Reset 
module dff_sync_rst (data, clk, reset, q); 
    input data, clk, reset; 
    output q; 
    reg q; 

    always @ (posedge clk) 
    if (~reset) 
     q = 1'b0; 
    else 
     q = data; 

endmodule 

NOTE: Le blocage des affectations utilisées dans le bloc toujours pour obtenir une logique séquentielle

+1

La plupart des outils de synthèse va générer une bascule pour ces exemples, bien que les affectations de blocage ne sont pas commun pour la logique séquentielle. Cette réponse vous donnera un aperçu plus détaillé: http://stackoverflow.com/a/4774450/1383356 – Ari

Répondre

1

Flip-flops devraient être modélisés avec des non-blocage (<=) que vous avez pensé précédemment.

Si vous utilisez une version de Verilog après 1995, vos déclarations de ports peuvent être légèrement mises en ordre. NB J'ajoute les fins de début pour plus de clarté et _n pour désigner les signaux faibles actifs.

front montant flip-flop avec Asynchronous Réinitialiser

module dff_async_rst (
    input data, 
    input clk, 
    input reset_n, 
    output reg q //SystemVerilog logic is preferred over reg 
); 

always @(posedge clk or negedge reset_n) begin 
    if (~reset_n) begin 
    q <= 1'b0; 
    end 
    else begin 
    q <= data; 
    end 
end 

endmodule 

front montant Flip-Flop avec synchrone Réinitialiser

module dff_sync_rst(
    input data, 
    input clk, 
    input reset_n, 
    output reg q //SystemVerilog logic is preferred over reg 
); 


always @(posedge clk) begin 
    if (~reset_n) begin 
    q <= 1'b0; 
    end 
    else begin 
    q <= data; 
    end 
end 

endmodule 
+0

Lorsque je code, j'utilise le même style de codage que votre réponse. J'utilise des affectations non bloquantes au code. Mais puisque l'auteur dans le lien donné utilise des affectations de blocage, le style de codage est-il correct? J'ai dû demander est-ce correct, car il provient du site Web de Microsemi – chitranna

+0

Non, ce n'est pas correct. Non-bloquant est là pour modéliser le comportement des flip-flops c'est pourquoi il existe. Le fait de ne pas utiliser la forme correcte peut conduire à des discordances de simulation au niveau de la porte RTL. – Morgan

Questions connexes