2017-03-10 6 views
-1

こんにちは私はザイリンクスでVerilogプログラムを作成しており、テストベンチで作業することはできません。Verilog TestBenchエラー

module Lab3(
    input u, 
    input clk, 
    input clrn, 

    output wire a,b,c,d,e,f,g 

    ); 

    wire dff3_combo; 
    wire q_to_q; 


    dff3 d0(
    .ns(dff3_combo), 
    .clr(clrn), 
    .clk(clk), 
    .q(q_to_q) 
     ); 


    combo_circuit combo(
    .q(q_to_q), 
    .u(u), 
    .ns(dff3_combo), 
    .a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g) 
    ); 
    endmodule 

これはテストベンチでの私の試みでした。シミュレーションはうまくいかなかったが、u_tb、clock_tb、clr_tbは値を保持していた。

`timescale 1ns/1ps 

    module testbench (); 
reg u_tb,clr_tb, clock_tb; 
wire a,b,c,d,e,f,g; 


Lab3 L(
.u(u_tb), 
.clk(clock_tb), 
.clrn(clr_tb), 
.a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g) 
); 


always 
begin 
clock_tb = 1'b1; 
#1; 
clock_tb = 1'b0; 
#1; 
end 

initial 
begin 
u_tb = 1; 
clr_tb = 0; 
#1 u_tb = 1; 
#16 clr_tb = 0; 
#20 $finish; 
end 
endmodule 

私の教授はこのテストベンチの書き方を教えてくれていません。私は非常に混乱しています。どんな助けもありがとうございます。

おかげ

+2

"シミュレーションが機能しませんでした"どういう意味ですか?エラーメッセージが表示されましたか?質問を編集してこれらの詳細を追加する必要があります。 – toolic

答えて

0
は、この

initial 
    begin 
    clk = 0; 
    #5 
    forever clk = #5 ~clk; 
    end 

のようなあなたの時計を書き換えの代わりに、あなたの入力信号の変化との間(#1)一時停止、あなたがしたいので、代わりに

repeat (1) @ (posedge clk); 

これを試してください

常にクロックエッジの直後にセットアップすることができます。

だからあなたのテストproceedure初期ステートメントは、それはあなたが行くなればもっと見る

initial 
begin 
u_tb = 1; 
clr_tb = 0; 
repeat (1) @ (posedge clk); 
u_tb = 1; 
repeat (8) @ (posedge clk); 
clr_tb = 0; 
repeat (5) @ (posedge clk); 
$finish; 
end 

のようになります。