Transmitter Design
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 89 من 90.
التحدي
في هذا الدرس، ستُكمل مُرسِل UART بإضافة shift register لإرسال أي بايت، وليس الحرف الثابت 'A' فقط.
يحمّل shift register الإطار الكامل (بت stop + 8 من data bits + بت Start) ثم يزيحه bit واحدًا في كل مرة.
تنسيق الإطار
| Stop (1) | Data (8 bits) | Start (0) |
|---|---|---|
| 1 | data_in | 0 |
على سبيل المثال، إذا كان data_in = 8'b01000001 (الحرف 'A')، يصبح shift register: 1 01000001 0
مهمتك
أُعطيتَ آلة الحالات من الدرس السابق (تُرسل بايتًا ثابتًا). تحتاج إلى تعديلها لإرسال أي بايت من دخل data_in.
ما يجب فعله:
- أضف
input [7:0]باسمdata_inإلى قائمة المنافذ (داخل الأقواس) - أضف
regمن 10-bit باسمshift_regخارج الأقواس (داخل جسم الوحدة، لأنه signal داخلي) - عندما يكون
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, // NEW: إشارة البدء لبدء الإرسال
output reg tx, // NEW: خط الإخراج التسلسلي
output reg [3:0] cnt // أبقِه كمخرج للاختبار
);
initial begin
cnt = 0;
tx = 1; // NEW: اضبط tx على HIGH (حالة الخمول)
end
always @(posedge clk) begin
// NEW: منطق العداد مع شرط البدء
if (cnt == 0 && start) begin // NEW: ابدأ الإرسال
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // NEW: عُدّ أثناء الإرسال
cnt <= cnt + 1;
end
else if (cnt == 9) begin // NEW: أعد التعيين بعد البت الأخير
cnt <= 0;
end
end
endmoduleجميع دروس الأساسيات
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logicتدرّب بنفسك: مترجم Verilog عبر الإنترنت