Menu
CoddyTech

منصة الاختبار

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

challenge icon

التحدي

يوفّر منضدة الاختبار مُدخلات لتصميمك وينشئ ملفًا للموجات. وليس لها منافذ خاصة بها.

مهمتك

أنشئ منضدة اختبار تقوم بما يلي:

  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 وحدة زمنية أخرى وتستدعي $finish (فتنتهي المحاكاة عند الزمن 210)

بعد تشغيل منضدة الاختبار، افتح الموجات للتحقق من إشارة 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 عبر الإنترنت