テストベンチ
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 90/90。
チャレンジ
テストベンチは設計に入力を与え、波形ファイルを作成します。テストベンチ自体にはポートがありません。
課題
次のテストベンチを作成してください。
clk、start、data_in(8ビット)用のregを宣言するtx用のwireと、cnt用のwire [3:0]を宣言するuart_txモジュールのインスタンスを作成し、すべてのポート(.clk、.start、.data_in、.tx、.cnt)を接続する- クロックを生成する(5時間単位ごとに切り替える)
initialブロック内で、次の処理を行う$dumpfileと$dumpvarsを使って、uart.vcdという名前の波形ファイルを作成する- 時刻0で
clk = 0、start = 1、data_in = 8'b01000001を設定する - 10時間単位後に
startを解除する(start = 0) - さらに200時間単位待ってから
$finishを呼び出す(これにより、シミュレーションは時刻210で終了します)
テストベンチを実行した後、波形を開いてtx信号を確認してください。
自分で試してみよう
module uart_tx (
input clk,
input start,
input [7:0] data_in,
output reg tx,
output reg [3:0] cnt
);
reg [9:0] shift_reg;
initial begin
cnt = 0;
tx = 1;
shift_reg = 0;
end
always @(posedge clk) begin
if (cnt == 0 && start) begin
shift_reg <= {1'b1, data_in, 1'b0};
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin
tx <= shift_reg[0];
shift_reg <= shift_reg >> 1;
cnt <= cnt + 1;
end
else if (cnt == 9) begin
tx <= shift_reg[0];
shift_reg <= shift_reg >> 1;
cnt <= 0;
end
end
endmodule基礎のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ