Testbench
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 90 من 90.
التحدي
يوفر testbench المدخلات لتصميمك وينشئ ملف شكل موجي (waveform). ليس لديه منافذ (ports) خاصة به.
مهمتك
قم بإنشاء testbench يقوم بما يلي:
- يعلن عن
regلكل منclkوstartوdata_in(8 بت) - يعلن عن
wireلـtxوwire [3:0]لـcnt - يستدعي وحدة
uart_tx، مع توصيل جميع المنافذ:.clkو.startو.data_inو.txو.cnt - يولد ساعة (تتبدل كل 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جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة