Menu
CoddyTech

Testbench

Thuộc phần Kiến thức nền tảng trong hành trình Verilog của Coddy. Bài học 90 trên 90.

challenge icon

Thử thách

Một testbench cung cấp đầu vào cho thiết kế của bạn và tạo tệp dạng sóng. Nó không có cổng riêng.

Nhiệm vụ của bạn

Tạo một testbench có các yêu cầu sau:

  1. Khai báo reg cho clk, start và data_in (8 bit)
  2. Khai báo wire cho tx và wire [3:0] cho cnt
  3. Tạo một thực thể của module uart_tx, kết nối tất cả các cổng: .clk, .start, .data_in, .tx, .cnt
  4. Tạo xung clock (đảo trạng thái sau mỗi 5 đơn vị thời gian)
  5. Bên trong khối initial:
    • Tạo tệp dạng sóng có tên uart.vcd bằng $dumpfile và $dumpvars
    • Đặt clk = 0, start = 1, data_in = 8'b01000001 tại thời điểm 0
    • Ngắt start sau 10 đơn vị thời gian (start = 0)
    • Sau đó chờ thêm 200 đơn vị thời gian rồi gọi $finish (để mô phỏng kết thúc tại thời điểm 210)

Sau khi chạy testbench, hãy mở dạng sóng để kiểm tra tín hiệu tx.

Tự làm thử

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

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch Verilog online