Menu
CoddyTech

テストベンチ

CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 90/90。

challenge icon

チャレンジ

テストベンチは設計に入力を与え、波形ファイルを作成します。テストベンチ自体にはポートがありません。

課題

次のテストベンチを作成してください。

  1. clk、start、data_in(8ビット)用のregを宣言する
  2. tx用のwireと、cnt用のwire [3:0]を宣言する
  3. uart_txモジュールのインスタンスを作成し、すべてのポート(.clk、.start、.data_in、.tx、.cnt)を接続する
  4. クロックを生成する(5時間単位ごとに切り替える)
  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オンラインコンパイラ