Menu
Coddy logo textTech

Testbench

Часть раздела Основы путешествия по Verilog на Coddy — урок 90 из 90.

challenge icon

Задание

Testbench (тестовое окружение) подает входные сигналы на ваше устройство и создает файл временных диаграмм. У него нет собственных портов.

Ваша задача

Создайте testbench, который:

  1. Объявляет reg для clk, start и data_in (8 бит)
  2. Объявляет wire для tx и wire [3:0] для cnt
  3. Создает экземпляр модуля uart_tx, подключая все порты: .clk, .start, .data_in, .tx, .cnt
  4. Генерирует тактовый сигнал (переключение каждые 5 единиц времени)
  5. Внутри блока initial:
    • Создает файл временных диаграмм с именем "uart.vcd", используя $dumpfile и $dumpvars
    • Устанавливает clk = 0, start = 1, data_in = 8'b01000001 в момент времени 0
    • Снимает сигнал start через 10 единиц времени (start = 0)
    • Выполняется в течение 200 единиц времени

После запуска testbench откройте временную диаграмму, чтобы проверить сигнал 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

Все уроки раздела Основы