منافذ الإدخال والإخراج
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 31 من 90.
تُعد منافذ Input وoutput هي الاتصالات التي تتيح للوحدة module التواصل مع العالم الخارجي. وهي تشبه الأطراف الموجودة على شريحة. المنافذ هي الواجهة بين الوحدة وبقية التصميم.
كل وحدة لها:
- منافذ Input: إشارات تأتي إلى الوحدة
- منافذ Output: إشارات تخرج من الوحدة
منافذ الإدخال
تستقبل منافذ الإدخال البيانات من الخارج. لا يمكن تغييرها داخل الوحدة: يمكن read فقط.
input clk; // إدخال أحادي البت
input [7:0] data; // متجه إدخال 8 بت
input a, b; // مدخلات متعددة في سطر واحدقواعد inputs:
- لا يمكن إسناد قيمة إليها داخل module
- لا يمكن التصريح عنها كـ
reg - دائمًا
wire(افتراضيًا)
منافذ Output
ترسل منافذ Output البيانات إلى الخارج. ويمكن تشغيلها بواسطة كتل assign أو always.
output out; // خرج بت واحد
output [3:0] result; // خرج 4 بت
output reg busy; // يمكن أن يكون الخرج reg
output wire ready; // يمكن أن يكون الخرج wireقواعد المخرجات:
- يمكن أن تكون
wire(معassign) أوreg(معalways) - يجب أن تكون مدفوعة بشيء داخل الوحدة
صيغة تعريف المنافذ
صيغة تعريف المنافذ هي الطريقة المحددة التي تكتب بها منافذ input وoutput في module. وهي تخبر Verilog بثلاثة أشياء عن كل منفذ:
- الاتجاه: هل هو input أم output أم inout؟
- الحجم: كم عدد البتات التي يتكون منها؟
- الاسم: ما اسمُه؟
module example (
input [7:0] data_in, // متجه الإدخال
input clk, // إدخال واحد
input enable, // إدخال واحد
output reg [7:0] out, // خرج reg
output busy // خرج wire
);لماذا يُعد اتجاه المنفذ مهمًا
يُخبر الاتجاه Verilog بما يلي:
- ما الإشارات التي can readها الوحدة (inputs)
- ما الإشارات التي can writeها الوحدة (المخرجات)
- ما أنواع الاتصالات المسموح بها
يؤدي استخدام الاتجاه الخاطئ إلى حدوث أخطاء في الترجمة البرمجية.
مثال على الكود
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التحدي
إكمال إعلانات المنافذ
ما يجب فعله:
- Add إدخالًا بحجم 8-bit يُسمى
data_in - Add إدخالًا بحجم single-bit يُسمى
clk - Add إخراجًا بحجم 4-bit يُسمى
result(استخدم reg: ستتم إسناد قيمته في كتلة always) - Add إخراجًا بحجم single-bit يُسمى
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 عبر الإنترنت