Menu
CoddyTech

Testbench

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

challenge icon

Aufgabe

Ein Testbench legt Eingaben für dein Design an und erstellt eine Wellenformdatei. Es hat keine eigenen Ports.

Deine Aufgabe

Erstelle ein Testbench, das:

  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 (alle 5 Zeiteinheiten umschalten)
  5. Innerhalb eines initial-Blocks:
    • Mit $dumpfile und $dumpvars eine Wellenformdatei mit dem Namen uart.vcd erstellt
    • clk = 0, start = 1 und data_in = 8'b01000001 zum Zeitpunkt 0 setzt
    • start nach 10 Zeiteinheiten freigibt (start = 0)
    • Dann weitere 200 Zeiteinheiten wartet und $finish aufruft (damit die Simulation zum Zeitpunkt 210 endet)

Öffne nach dem Ausführen des Testbenchs die Wellenform, 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