Input And Output Ports
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 31 من 90.
منافذ الإدخال والإخراج هي التوصيلات التي تسمح للوحدة بالتواصل مع العالم الخارجي. وهي تشبه الدبابيس الموجودة على شريحة. المنافذ هي الواجهة بين الوحدة وبقية التصميم.
كل وحدة لها:
- منافذ Input: إشارات تأتي إلى الوحدة
- منافذ Output: إشارات تخرج من الوحدة
منافذ الإدخال
تستقبل منافذ الإدخال data من الخارج. لا يمكن تغييرها داخل module: يمكن 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 بما يلي:
- ما الإشارات التي يمكن لـ module can read (inputs)
- ما الإشارات التي يمكن لـ module can write (outputs)
- ما أنواع الاتصالات المسموح بها
يؤدي استخدام الاتجاه الخاطئ إلى أخطاء في الترجمة البرمجية.
مثال على الشيفرة
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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
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 عبر الإنترنت