منافذ الإدخال والإخراج
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 31 من 90.
منافذ الإدخال والإخراج هي التوصيلات التي تسمح للوحدة بالتواصل مع العالم الخارجي. وهي تشبه الأرجل الموجودة على الشريحة. المنافذ هي الواجهة بين الوحدة وبقية التصميم.
تحتوي كل وحدة على:
- منافذ الإدخال: إشارات تدخل إلى الوحدة
- منافذ الإخراج: إشارات تخرج من الوحدة
منافذ الإدخال
تستقبل منافذ الإدخال البيانات من الخارج. لا يمكن تغييرها داخل الوحدة: يمكن قراءتها فقط.
input clk; // مدخل أحادي البت
input [7:0] data; // متجه مدخلات من 8 بتات
input a, b; // مدخلات متعددة في سطر واحدقواعد المدخلات:
- لا يمكن إسناد قيمة إليها داخل الوحدة
- لا يمكن تعريفها على أنها
reg - تكون دائمًا
wire(افتراضيًا)
منافذ الإخراج
ترسل منافذ الإخراج البيانات إلى الخارج. ويمكن التحكم بها باستخدام كتل assign أو كتل always.
output out; // خرج أحادي البت
output [3:0] result; // خرج من 4 بتات
output reg busy; // يمكن أن يكون الخرج من نوع reg
output wire ready; // يمكن أن يكون الخرج من نوع wireقواعد المخارج:
- يمكن أن يكون
wire(معassign) أوreg(معalways) - يجب أن يكون مدفوعًا بشيء داخل الوحدة
صياغة تعريف المنافذ
صياغة تعريف المنافذ هي الطريقة المحددة التي تكتب بها منافذ الإدخال والإخراج في الوحدة. وهي تخبر Verilog بثلاثة أشياء عن كل منفذ:
- الاتجاه: هل هو إدخال أم إخراج أم إدخال وإخراج؟
- الحجم: كم عدد البتات التي يتكون منها؟
- الاسم: ما اسمه؟
module example (
input [7:0] data_in, // متجه إدخال
input clk, // مدخل مفرد
input enable, // مدخل مفرد
output reg [7:0] out, // مسجل خرج
output busy // سلك خرج
);لماذا يهم اتجاه المنفذ
يخبر الاتجاه Verilog بما يلي:
- ما الإشارات التي يمكن للوحدة قراءتها (المدخلات)
- ما الإشارات التي يمكن للوحدة كتابتها (المخرجات)
- ما أنواع التوصيلات المسموح بها
يؤدي استخدام الاتجاه الخاطئ إلى أخطاء في الترجمة البرمجية.
مثال على الشيفرة
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; // الكتابة إلى خرج من نوع reg
end
assign diff = a - b; // الكتابة إلى خرج من نوع wire
endmoduleالتحدي
أكمل تعريفات المنافذ
ما المطلوب:
- أضف مدخلًا بعرض 8 بتات باسم
data_in - أضف مدخلًا بعرض بت واحد باسم
clk - أضف مخرجًا بعرض 4 بتات باسم
result(استخدم reg: ستُسنَد قيمته في كتلة always) - أضف مخرجًا بعرض بت واحد باسم
valid(استخدم wire: ستُسنَد قيمته باستخدام assign)
جرّب بنفسك
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العوامل الجزء 1
العوامل الحسابيةعامل باقي القسمةعوامل المقارنةمراجعة - الرياضيات البسيطةالعوامل على مستوى البتات7التعيين والبوابات
التعيين المستمرالتعيين باستخدام العواملالعناصر الأساسية المدمجة للبواباتبوابات AND وOR وNOTبوابات XOR وXNORمراجعة - دائرة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الربطالمعامل الشرطيمراجعة - تحدي المعاملات11الحلقات التكرارية
حلقة Forحلقة Whileحلقة التكرارحلقة لا نهائيةتعليمة التعطيلمراجعة - أنماط الحلقات التكرارية3نظام الأعداد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ الإدخال والإخراج ثنائية الاتجاهإنشاء مثيل للوحدةربط المنافذ حسب الاسمربط المنافذ حسب الترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة الحساسيةإسناد حاجزإسناد غير حاجزمراجعة - Always مقابل Initial15متحكّم إشارات المرور
تعريف الحالاتمنطق آلة الحالاتتدرّب بنفسك: مترجم Verilog عبر الإنترنت