2016-03-19 27 views
1

olarak gösteriliyor Flip flop'un çıkışını göstermek istiyorum, ancak çıktıyı 'Z' olarak listeliyor. Bunu yapmak için nasıl alabilirim?Strucural Verilog'u kullanarak bir D FF tasarladı, ancak Q çıkışı 'Z'

Kodu:

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 

Bu test tezgahı - ı sorun burada yatıyor düşünüyorum. 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 

teşekkür ederiz benim sınıf buna bağlıdır!

+2

enter image description here gerçekten kapıları D-ff yapacaktır değil ikisini kullanıyor mudur? Q', Qn', 'D' girişlerinin kullanımı nedir? Saat nerede ve sıfırlama sinyalleri nerede? D-ff hakkında bir fikir edinmek için [bu bağlantıyı] tıklayın (http://www.asic-world.com/verilog/gate2.html). – sharvil111

+2

D normalde sıfırlanmayan Verileri temsil eder. Diğerleri Q çıkışını sürmemenizi söyledikleri için bu yüzden z. z, yüksek empedans anlamına gelir veya sürülmez. – Morgan

+0

Tüm sorunu kaydetmeyi unuttum. Anladım teşekkürler çocuklar. – Serg

cevap

1

Terlik için modeliniz tamamen yanlıştır. (Üzgünüz, ama doğru.) C girdisi dışında, hiçbir giriş veya çıkış hiçbir şeye bağlı değil! Sonuç olarak, test tezgahı çıktıların yüzdüğünü gösterir, ki bu Z değeri ile gösterilir.

-1

Kişisel 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 

Ve Testbench simülasyonlu

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 

,