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. يستدعي وحدة 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

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