تصميم المرسل
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 89 من 90.
التحدي
في هذا الدرس، ستكمل جهاز إرسال UART عن طريق إضافة سجل الإزاحة (shift register) لإرسال أي بايت، وليس فقط الحرف الثابت 'A'.
يقوم سجل الإزاحة بتحميل الإطار الكامل (بت التوقف + 8 بتات بيانات + بت البدء) ويقوم بإزاحته للخارج بتًا واحدًا في كل مرة.
تنسيق الإطار
| التوقف (1) | البيانات (8 بتات) | البدء (0) |
|---|---|---|
| 1 | data_in | 0 |
على سبيل المثال، إذا كان data_in = 8'b01000001 (الحرف 'A')، يصبح سجل الإزاحة: 1 01000001 0
مهمتك
لقد تم تزويدك بآلة الحالة من الدرس السابق (التي ترسل بايتاً ثابتاً). تحتاج إلى تعديلها لإرسال أي بايت من مدخل data_in.
ما يجب القيام به:
- أضف
input [7:0]يسمىdata_inإلى قائمة المنافذ (port list) (داخل الأقواس) - أضف
regبحجم 10 بت يسمىshift_regخارج الأقواس (داخل جسم الوحدة البرمجية "module body"، لأنه إشارة داخلية) - عندما يكون
cnt == 0وstart == 1:- قم بتحميل
shift_regبالقيمة{1'b1, data_in, 1'b0}
- قم بتحميل
- عندما يكون
cntبين 1 و 8:- أرسل
tx <= shift_reg[0] - قم بالإزاحة لليمين:
shift_reg <= shift_reg >> 1
- أرسل
- عندما يكون
cnt == 9:- أرسل
tx <= shift_reg[0] - قم بالإزاحة لليمين:
shift_reg <= shift_reg >> 1
- أرسل
جرّب بنفسك
module uart_tx (
input clk,
input start, // جديد: إشارة البدء لبدء الإرسال
output reg tx, // جديد: خط الإخراج التسلسلي
output reg [3:0] cnt // الاحتفاظ به كمخرج لأغراض الاختبار
);
initial begin
cnt = 0;
tx = 1; // جديد: ضبط tx على المستوى العالي (حالة الخمول)
end
always @(posedge clk) begin
// جديد: منطق العداد مع شرط البدء
if (cnt == 0 && start) begin // جديد: بدء الإرسال
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // جديد: العد أثناء الإرسال
cnt <= cnt + 1;
end
else if (cnt == 9) begin // جديد: إعادة الضبط بعد البت الأخير
cnt <= 0;
end
end
endmoduleجميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة