منافذ الإدخال والإخراج
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 31 من 90.
تعد منافذ الإدخال والإخراج هي الوصلات التي تسمح للوحدة (module) بالتواصل مع العالم الخارجي. فهي تشبه الأطراف (pins) الموجودة على الرقاقة. وتعتبر المنافذ هي الواجهة بين الوحدة وبقية التصميم.
كل وحدة تحتوي على:
- منافذ الإدخال (Input ports) — الإشارات التي تدخل إلى الوحدة
- منافذ الإخراج (Output ports) — الإشارات التي تخرج من الوحدة
منافذ الإدخال (Input Ports)
تستقبل منافذ الإدخال البيانات من الخارج. ولا يمكن تغييرها داخل الوحدة (module) - بل يمكن قراءتها فقط.
input clk; // مدخل بت واحد
input [7:0] data; // متجه إدخال 8 بت
input a, b; // مدخلات متعددة في سطر واحدقواعد المدخلات:
- لا يمكن تعيين قيمة لها داخل الوحدة (module)
- لا يمكن التصريح عنها كـ
reg - دائماً
wire(بشكل افتراضي)
منافذ الإخراج (Output Ports)
تقوم منافذ الإخراج بإرسال البيانات إلى الخارج. يمكن التحكم بها بواسطة كتل assign أو always.
output out; // مخرج بت واحد
output [3:0] result; // مخرج 4 بت
output reg busy; // يمكن أن يكون المخرج من نوع reg
output wire ready; // يمكن أن يكون المخرج من نوع wireقواعد المخرجات:
- يمكن أن تكون
wire(معassign) أوreg(معalways) - يجب أن تُقاد بواسطة شيء ما داخل الوحدة (module)
بناء جملة تعريف المنافذ
بناء جملة تعريف المنافذ هو الطريقة المحددة التي تكتب بها منافذ الإدخال والإخراج في الـ module. وهي تخبر Verilog بثلاثة أشياء عن كل منفذ:
- الاتجاه — هل هو input، أو output، أو inout؟
- الحجم — ما هو عرضه بالبتات (bits)؟
- الاسم — ما هو اسمه؟
module example (
input [7:0] data_in, // متجه إدخال
input clk, // مدخل واحد
input enable, // مدخل واحد
output reg [7:0] out, // سجل إخراج
output busy // سلك إخراج
);لماذا يهم اتجاه المنفذ (Port Direction)
يخبر الاتجاه لغة Verilog:
- ما هي الإشارات التي يمكن للوحدة (module) قراءتها (المدخلات - inputs)
- ما هي الإشارات التي يمكن للوحدة (module) كتابتها (المخرجات - outputs)
- ما هي أنواع التوصيلات المسموح بها
استخدام الاتجاه الخاطئ يسبب أخطاء في التصريف (compilation errors).
مثال على الكود
module port_demo (
input [3:0] a, // يمكن القراءة فقط
input [3:0] b, // يمكن القراءة فقط
output reg [3:0] sum, // يمكن الكتابة (reg)
output [3:0] diff // يمكن الكتابة (wire)
);
always @(*) begin
sum = a + b; // الكتابة إلى output reg
end
assign diff = a - b; // الكتابة إلى output wire
endmoduleالتحدي
أكمل تصريحات المنافذ (Port Declarations)
ما يجب القيام به:
- أضف مدخلاً (input) بحجم 8 بت يسمى
data_in - أضف مدخلاً (input) بت واحد يسمى
clk - أضف مخرجاً (output) بحجم 4 بت يسمى
result(استخدم reg — سيتم تعيينه داخل بلوك always) - أضف مخرجاً (output) بت واحد يسمى
valid(استخدم wire — سيتم تعيينه باستخدام assign)
ورقة مرجعية
المنافذ (Ports) هي الواجهة بين الوحدة (module) والعالم الخارجي.
منافذ الإدخال (Input Ports)
المدخلات تكون دائماً من نوع wire، وهي للقراءة فقط داخل الوحدة:
input clk; // Single-bit
input [7:0] data; // 8-bit vector
input a, b; // Multiple inputsمنافذ الإخراج (Output Ports)
المخرجات يمكن أن تكون wire (يتم قيادتها بواسطة assign) أو reg (يتم قيادتها بواسطة always):
output wire ready; // Use with assign
output reg busy; // Use with alwaysإعلان المنافذ في ترويسة الوحدة (Module Header)
يحدد كل إعلان منفذ الاتجاه، والحجم، والاسم:
module example (
input [7:0] data_in, // 8-bit input
input clk, // single-bit input
output reg [3:0] sum, // 4-bit output reg
output diff // single-bit output wire
);
always @(*) sum = data_in[3:0] + 1;
assign diff = data_in[0];
endmoduleجرّب بنفسك
module port_challenge (
// المهمة 1: أضف مدخلاً بحجم 8 بت يسمى data_in
// المهمة 2: أضف مدخلاً بت واحد يسمى clk
// المهمة 3: أضف مخرجاً بحجم 4 بت يسمى result (استخدم reg)
// المهمة 4: أضف مخرجاً بت واحد يسمى valid (استخدم wire)
);
reg [3:0] counter;
always @(posedge clk) begin
counter <= counter + 1;
result <= counter;
end
assign valid = (counter > 8);
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة