Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

منافذ الإدخال والإخراج

جزء من قسم الأساسيات في رحلة 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 بثلاثة أشياء عن كل منفذ:

  1. الاتجاه — هل هو input، أو output، أو inout؟
  2. الحجم — ما هو عرضه بالبتات (bits)؟
  3. الاسم — ما هو اسمه؟
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
challenge icon

التحدي

أكمل تصريحات المنافذ (Port Declarations)

ما يجب القيام به:

  1. أضف مدخلاً (input) بحجم 8 بت يسمى data_in
  2. أضف مدخلاً (input) بت واحد يسمى clk
  3. أضف مخرجاً (output) بحجم 4 بت يسمى result (استخدم reg — سيتم تعيينه داخل بلوك always)
  4. أضف مخرجاً (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
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات