Menu
Coddy logo textTech

Środowisko testowe

Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 90 z 90.

challenge icon

Wyzwanie

testbench dostarcza wejścia do Twojego projektu i tworzy plik przebiegu. Nie ma własnych portów.

Twoje zadanie

Utwórz testbench, który:

  1. Deklaruje reg dla clk, start i data_in (8 bitów)
  2. Deklaruje wire dla tx oraz wire [3:0] dla cnt
  3. Tworzy instancję modułu uart_tx, łącząc wszystkie porty: .clk, .start, .data_in, .tx, .cnt
  4. Generuje sygnał zegarowy (zmiana stanu co 5 jednostek czasu)
  5. W bloku initial:
    • Tworzy plik przebiegu o nazwie uart.vcd za pomocą $dumpfile i $dumpvars
    • Ustawia clk = 0, start = 1, data_in = 8'b01000001 w chwili 0
    • Zwalnia start po 10 jednostkach czasu (start = 0)
    • Następnie czeka kolejne 200 jednostek czasu i wywołuje $finish (symulacja kończy się więc w chwili 210)

Po uruchomieniu testbench otwórz przebieg, aby sprawdzić sygnał tx.

Spróbuj swoich sił

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

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online