Menu
Coddy logo textTech

Testbench

Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 90 von 90.

challenge icon

Aufgabe

Eine Testbench stellt deinem Design Eingaben bereit und erstellt eine Wavedatei. Sie hat keine eigenen Ports.

Deine Aufgabe

Erstelle eine Testbench, die:

  1. reg für clk, start und data_in (8 Bit) deklariert
  2. wire für tx und wire [3:0] für cnt deklariert
  3. das Modul uart_tx instanziiert und alle Ports verbindet: .clk, .start, .data_in, .tx, .cnt
  4. einen Takt erzeugt (Umschalten alle 5 Zeiteinheiten)
  5. innerhalb eines initial-Blocks:
    • eine Wavedatei namens uart.vcd mit $dumpfile und $dumpvars erstellt
    • zum Zeitpunkt 0 clk = 0, start = 1 und data_in = 8'b01000001 setzt
    • start nach 10 Zeiteinheiten freigibt (start = 0)
    • dann weitere 200 Zeiteinheiten wartet und $finish aufruft (sodass die Simulation zum Zeitpunkt 210 endet)

Öffne nach dem Ausführen der Testbench die Wavedatei, um das Signal tx zu überprüfen.

Probier es selbst

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

Alle Lektionen in Grundlagen

Übe selbstständig: Online-Verilog-Compiler