2016-03-19 5 views
1

Ich möchte es den Ausgang des Flip-Flops anzeigen, aber stattdessen listet es den Ausgang als 'Z'. Wie kann ich es dazu bringen?Entwickelt ein D FF mit Strucural Verilog aber der Q-Ausgang wird als 'Z' angezeigt

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 

Dies ist der Prüfstand - ich denke, das Problem liegt hier. 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 

Danke meine Klasse hängt davon ab!

+2

Glauben Sie, dass wirklich zwei mit nicht Tore sollen D-ff machen? Was sind die Eingänge 'Q',' Qn', 'D'? Wo sind Uhr und Reset-Signale? Verweisen Sie auf [diesen Link] (http://www.asic-world.com/verilog/gate2.html) für eine Idee über D-ff. – sharvil111

+2

D steht normalerweise für Daten nicht zurückgesetzt. Da andere gesagt haben, du treibst den Q-Ausgang nicht, so ist es z. z bedeutet hochohmig oder nicht angesteuert. – Morgan

+0

Ich habe vergessen, das ganze Problem zu posten. Ich habe es herausgefunden, Jungs. – Serg

Antwort

1

Ihr Modell für das Flip-Flop ist völlig falsch. (Entschuldigung, aber es ist wahr.) Mit Ausnahme des Eingangs C ist keiner der Eingänge oder Ausgänge mit irgendetwas verbunden! Als Ergebnis zeigt die Testbench, dass die Ausgänge potentialfrei sind, was durch den Wert Z gekennzeichnet ist.

-1

Ihr D-Flip-Flop-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 

Und Prüfstand,

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 

mit Simulation, enter image description here

Verwandte Themen