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

Testbench

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

challenge icon

التحدي

يوفّر testbench مدخلات لتصميمك وينشئ ملف موجة. ولا يحتوي على منافذ خاصة به.

مهمتك

أنشئ 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

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

تدرّب بنفسك: مترجم Verilog عبر الإنترنت