テストベンチの作成
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 82/90。
チャレンジ
このレッスンでは、信号機コントローラーが正しく動作することを確認するためのテストベンチを作成します。
行うべきこと:
以下の内容を含むテストベンチを作成してください:
- 信号を宣言する(clkとresetには
reg、red、yellow、greenにはwireを使用) traffic_lightモジュールをuutという名前でインスタンス化する- 1時間単位ごとに反転するクロックを生成する
- 2時間単位の間リセットを適用し、その後解除する
- シミュレーションを100時間単位実行する
自分で試してみよう
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
reg [5:0] counter;
// 出力の割り当て
always @(*) begin
case (state)
0: begin green = 1; yellow = 0; red = 0; end
1: begin green = 0; yellow = 1; red = 0; end
2: begin green = 0; yellow = 0; red = 1; end
default: begin green = 0; yellow = 0; red = 1; end
endcase
end
// タイミング制御付きステートマシン
always @(posedge clk or posedge reset) begin
if (reset) begin
state <= 2;
counter <= 0;
end else begin
if (counter == 0) begin
case (state)
0: begin
state <= 1;
counter <= 10;
end
1: begin
state <= 2;
counter <= 40;
end
2: begin
state <= 0;
counter <= 30;
end
endcase
end else begin
counter <= counter - 1;
end
end
end
endmodule
module testbench;
// TODO: clkとreset用のregを宣言
// TODO: red, yellow, green用のwireを宣言
// TODO: traffic_lightモジュールをuutという名前でインスタンス化
// clk, reset, red, yellow, greenを接続
// TODO: クロックを生成(1時間単位ごとに反転)
initial begin
$display("Traffic Light Test");
// TODO: clkを0に初期化
// TODO: リセットを適用(2時間単位の間reset=1、その後reset=0)
// TODO: 100時間単位シミュレーションを実行
$display("Test complete");
$finish;
end
endmodule