2016-03-19 6 views
1

フリップフロップの出力を表示する代わりに、出力を 'Z'として表示します。これをするにはどうしたらいいですか?Strucural Verilogを使用してD FFを設計しましたが、Q出力が 'Z'として表示されています

コード:

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 

これは、テストベンチで - 私はこの問題はここにあると思います。 テストベンチ:

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 

は私の等級はそれに依存していただきありがとうございます!

+2

enter image description hereは、あなたが本当にゲートはD-FFをしなければならない2を使用していると思いますか? 'Q'、' Qn'、 'D'入力の使い方は?クロックとリセット信号はどこですか? D-ffのアイデアについては、[このリンク](http://www.asic-world.com/verilog/gate2.html)を参照してください。 – sharvil111

+2

Dは通常、リセットされていないデータを表します。他の人がQ出力を駆動しないように言っているので、それはzです。 zは高インピーダンスまたは駆動されないことを意味します。 – Morgan

+0

私は全体の問題を投稿するのを忘れました。私はそれに感謝の人を考え出した。 – Serg

答えて

1

あなたのフリップフロップのモデルは完全に間違っています。入力がCの場合を除いて、入力または出力は何も接続されていません!その結果、テストベンチは、出力が浮動していることを示します。値はZです。

-1

あなたの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 

とテストベンチ、シミュレーションと

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 

関連する問題