Menu
Coddy logo textTech

Testbench

Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 90 / 90.

challenge icon

Görev

Bir testbench, tasarımınıza girdiler sağlar ve bir dalga şekli (waveform) dosyası oluşturur. Kendine ait herhangi bir portu yoktur.

Göreviniz

Aşağıdaki özelliklere sahip bir testbench oluşturun:

  1. clk, start ve data_in (8 bit) için reg tanımlayın
  2. tx için wire ve cnt için wire [3:0] tanımlayın
  3. Tüm portları bağlayarak uart_tx modülünü örneklendirin (instantiate): .clk, .start, .data_in, .tx, .cnt
  4. Bir saat sinyali (clock) üretin (her 5 zaman biriminde bir durumu tersine çevirin/toggle)
  5. Bir initial bloğu içerisinde:
    • $dumpfile ve $dumpvars kullanarak uart.vcd adında bir dalga şekli dosyası oluşturun
    • 0 anında clk = 0, start = 1, data_in = 8'b01000001 olarak ayarlayın
    • 10 zaman birimi sonra start sinyalini serbest bırakın (start = 0)
    • 200 zaman birimi boyunca çalıştırın

Testbench'i çalıştırdıktan sonra, tx sinyalini doğrulamak için dalga şeklini açın.

Kendin dene

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

Temeller bölümündeki tüm dersler