2017-10-31 49 views
0

私はiverilogの新機能で、100Mhzのクロック周波数をより大きなプロジェクトの一環として扱いやすくするためにカウンタを作成しています。 これを行うコードがいくつか見つかりましたので、そのためにテストベンチを作成しようとしました。ここ は、私が見つけたコードです。ここでiverilog testbenchエラー:入力がワイヤとして宣言されていますが、そうではありません

module slowClock_tb(clk, reset, clk_1Hz); 
    input clk; 
    input reset; 
    output clk_1Hz; 

initial 
begin 
    clk = 1'b0; 
    reset = 1'b0; 
#2 reset = ~reset; 

end 

    always #3 clk = ~clk; 

slowClock clock_generator(clk, reset, clk_1Hz); 


endmodule 

はエラーメッセージです:

$ iverilog slowClock.v slowClock_tb.v 
slowClock_tb.v:8: error: clk is not a valid l-value in slowClock_tb. 
slowClock_tb.v:2:  : clk is declared here as wire. 
slowClock_tb.v:9: error: reset is not a valid l-value in slowClock_tb. 
slowClock_tb.v:3:  : reset is declared here as wire. 
slowClock_tb.v:10: error: reset is not a valid l-value in slowClock_tb. 
slowClock_tb.v:3:  : reset is declared here as wire. 
slowClock_tb.v:14: error: clk is not a valid l-value in slowClock_tb. 
slowClock_tb.v:2:  : clk is declared here as wire. 
4 error(s) during elaboration. 

最初のエラーメッセージ:clkがある

module slowClock(clk, reset, clk_1Hz); 
input clk, reset; 
output clk_1Hz; 

reg clk_1Hz; 
reg [27:0] counter; 

[email protected](posedge reset or posedge clk) 
begin 
    if (reset == 1'b1) 
     begin 
      clk_1Hz <= 0; 
      counter <= 0; 
     end 
    else 
     begin 
      counter <= counter + 1; 
      if (counter == 25_000_000) 
       begin 
        counter <= 0; 
        clk_1Hz <= ~clk_1Hz; 
       end 
     end 
end 
endmodule 

、ここでは、私が書いたテストベンチがありますここでは電線と宣言した。 しかし、それは元のコードまたはテストベンチのワイヤとして宣言されていません。リセットの場合も同じです。 私はキャンパス内の教師からの助けを得ようとしましたが、なぜこれが起こっているのか分からず、それを修正する方法をアドバイスできませんでした。

誰でもこれを修正する方法を提案できますか?

答えて

1

タイプを含まない場合、すべての変数/シグナルはワイヤとして推定されます。あなたはそれらに型を与えていないので、それらはワイヤーとみなされます。

また、clkresetをテストベンチモジュールの入力として定義していますが、テストベンチの内部に割り当てているため、有効なI値ではありません。

これを試してみてください:

module slowClock(
    input wire clk, 
    input wire reset, 
    output reg clk_1Hz 
    ); 

    reg [27:0] counter; 

    [email protected](posedge reset or posedge clk) begin 
     if (reset == 1'b1) begin 
      clk_1Hz <= 0; 
      counter <= 0; 
     end else begin 
      counter <= counter + 1; 
      if (counter == 25_000_000) begin 
       counter <= 0; 
       clk_1Hz <= ~clk_1Hz; 
      end 
     end 
    end 
endmodule 
module slowClock_tb; 
    reg clk = 1'b0; 
    reg reset = 1'b0; 
    integer counter = 0; 
    wire clk_1Hz; 

    initial begin 
     #2 reset <= ~reset; 
    end 

    always #3 clk <= ~clk; 

    slowClock clock_generator(clk, reset, clk_1Hz); 

    always @(posedge clk) begin 
     counter <= counter + 1; 
     $display("%0d", counter); 

     if (counter > 100) $finish; 
    end 

endmodule 
関連する問題