Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

Testbench

جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 90 من 90.

challenge icon

التحدي

يوفر testbench المدخلات للتصميم الخاص بك وينشئ ملف مخطط زمني (waveform). لا يحتوي على أي منافذ (ports) خاصة به.

مهمتك

أنشئ testbench يقوم بما يلي:

  1. يعلن عن reg لكل من clk، وstart، وdata_in (8 بت)
  2. يعلن عن wire لـ tx وwire [3:0] لـ cnt
  3. يقوم بإنشاء مثيل (instantiates) لوحدة uart_tx، مع توصيل جميع المنافذ: .clk، .start، .data_in، .tx، .cnt
  4. يولد إشارة ساعة (تتغير حالتها كل 5 وحدات زمنية)
  5. داخل كتلة initial:
    • ينشئ ملف مخطط زمني باسم uart.vcd باستخدام $dumpfile و $dumpvars
    • يضبط clk = 0، وstart = 1، وdata_in = 8'b01000001 عند الوقت 0
    • يحرر start بعد 10 وحدات زمنية (start = 0)
    • يعمل لمدة 200 وحدة زمنية

بعد تشغيل الـ testbench، افتح المخطط الزمني للتحقق من إشارة tx.

جرّب بنفسك

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

جميع دروس الأساسيات