2016-03-19 2 views
1

Je veux qu'il montre la sortie de la bascule, mais à la place il indique la sortie comme 'Z'. Comment puis-je l'obtenir pour le faire?Conçu un D FF en utilisant Verilog Strucural mais la sortie Q apparaît comme 'Z'

code:

module d_flip_flop_edge_triggered(Q, Qn, C, D); 
    output Q; 
    output Qn; 
    input C; 
    input D; 

    wire Q; 
    wire Qn; 

    wire Cn; 
    wire Cnn; 
    wire DQ; 
    wire DQn; 

    not(Cn, C); 
    not(Cnn, Cn); 

endmodule 

C'est le banc d'essai - Je pense que le problème est ici. testbench:

module ffTB; 

// Inputs 
reg C; 
reg D; 

// Outputs 
wire Q; 
wire Qn; 

// Instantiate the Unit Under Test (UUT) 
d_flip_flop_edge_triggered uut (
    .Q(Q), 
    .Qn(Qn), 
    .C(C), 
    .D(D) 
); 

initial begin 
    // Initialize Inputs 
    C = 0; 
    D = 0; 

    // Wait 100 ns for global reset to finish 
    #100; 
    C = 1; 
    D = 1; 
    #100; 
    C = 0; 
    #100; 
    C = 1; 
    #100; 
    C = 0; 
    #100; 
    C = 1; 
    #100; 
    C = 0; 
end 

endmodule 

Merci ma note en dépend!

+2

Pensez-vous vraiment utiliser deux pas portes doivent faire D-ff? Quelle est l'utilisation des entrées 'Q',' Qn', 'D'? Où sont les signaux d'horloge et de réinitialisation? Reportez-vous à [ce lien] (http://www.asic-world.com/verilog/gate2.html) pour avoir une idée de D-ff. – sharvil111

+2

D représente normalement les données non réinitialisées. Comme d'autres l'ont dit, vous ne pilotez pas la sortie Q donc c'est z. z signifie haute impédance ou non entraîné. – Morgan

+0

J'ai oublié de poster tout le problème. Je l'ai compris merci les gars. – Serg

Répondre

1

Votre modèle pour la bascule est complètement faux. (Désolé, mais c'est vrai.) A l'exception de l'entrée C, aucune entrée ou sortie n'est connectée à quoi que ce soit! Par conséquent, le banc d'essai montre que les sorties sont flottantes, ce qui est indiqué par la valeur Z.

-1

Votre bascule D RTL,

module d_flip_flop_edge_triggered(output reg Q, 
           output wire Qn, 
           input wire clk, 
           input wire rst_n, 
           input wire D 
          ); 

always @ (posedge clk or negedge rst_n) 
begin 
    if (~rst_n) 
    begin 
    Q <= 1'b0; 
    end 
    else 
    begin 
    Q <= D; 
    end 
end 

assign Qn = ~Q; 

endmodul 

Et Testbench,

module ffTB; 
reg clk; 
reg rst_n; 
reg D; 
wire Q, Qn; 

d_flip_flop_edge_triggered d_flip_flop_edge_triggered_inst (Q, Qn, clk, rst_n, D); 

initial 
begin 
    clk = 1'b0; 
    rst_n = 1'b0; 
    D = 1'b0; 
    #10 rst_n = 1'b1; 
    #600 $finish; 
end 

always clk = #5 ~clk; 

initial 
begin 
    repeat (100) 
    begin 
    D = $random; 
#5; 
    end 
end 

endmodule 

avec simulation, enter image description here