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

التعيين المستمر

جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 37 من 90.

في العتاد الصلب (hardware)، يُعتبر الربط (connection) سلكًا فيزيائيًا يربط بين نقطتين في الدائرة الكهربائية. بمجرد إقامة السلك في مكانه، يصبح الربط دائمًا ونشطًا باستمرار. إذا تغير أحد الطرفين، يتغير الطرف الآخر على الفور.

في Verilog، نحتاج إلى طريقة لنمذجة هذا السلوك. نريد تمرير قيمة إلى wire وإبقائها متصلة إلى الأبد. تسمى عملية القيام بذلك continuous assignment (التعيين المستمر).

يستخدم التعيين المستمر (Continuous assignment) الكلمة المفتاحية assign لإنشاء اتصال دائم بين wire والتعبير (expression). يأخذ الـ wire قيمة التعبير بشكل مستمر (continuously) — تماماً مثل السلك الفيزيائي.

فكّر في الأمر على أنه لحام wire بدلاً من كتابة قيمة مرة واحدة.

بناء الجملة (Syntax)

assign wire_name = expression;
الجزءالمعنى
assignالكلمة المفتاحية that تبدأ continuous assignment
wire_nameالـ wire الذي يتم توجيهه (لا يمكن أن يكون reg)
expressionالقيمة that تقود الـ wire

مثال بسيط

wire out;
assign out = a & b;

هذا يعني: out يكون always equal لـ a AND b. كلما تغير a أو b، يتغير out على الفور.

كيف يعمل

على عكس reg الذي يخزن قيمة، فإن wire مع continuous assignment يتم تحديثه باستمرار:

module continuous_demo;
  reg a, b;
  wire c;
  
  assign c = a & b;   // c يتبع a AND b في جميع الأوقات
  
  initial begin
    a = 0; b = 0;
    #10 $display("a=%d, b=%d, c=%d", a, b, c);  // c=0
    
    a = 1;
    #10 $display("a=%d, b=%d, c=%d", a, b, c);  // c=0 (1&0=0)
    
    b = 1;
    #10 $display("a=%d, b=%d, c=%d", a, b, c);  // c=1 (1&1=1)
    
    $finish;
  end
endmodule

الناتج:

a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1

في كل مرة تتغير فيها قيمة a أو b، يتحدث c تلقائيًا.

عمليات Assignment المتعددة

يمكنك استخدام عدة continuous assignment في module:

module multiple_assign (
  input a, b, c,
  output x, y
);
  assign x = a & b;
  assign y = x | c;   // y يعتمد على x
endmodule

جميع عمليات الـ assignment تعمل بالتوازي، وبشكل continuous.

استخدامات شائعة

تُستخدم التعيينات المستمرة (continuous assignments) لـ:

  • المنطق التجميعي البسيط (AND، OR، XOR)
  • ربط الأسلاك ببعضها البعض
  • إنشاء المنظمات ثلاثية الحالات (tri-state buffers)
  • تشغيل المخرجات من التعبيرات التجميعية (combinational expressions)
challenge icon

التحدي

ما يجب فعله:

  1. أضف التعيين المستمر (continuous assignment) المفقود الذي يجعل z مساوياً لـ x AND y.

جرّب بنفسك

module continuous_challenge (
  input x,
  input y,
  output z
);
  
  // TODO: أضف التعيين المستمر المفقود الذي يجعل z يساوي x AND y
  

endmodule
quiz iconاختبر نفسك

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

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