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

التعيين باستخدام العمليات

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

بمجرد فهمك للتعيين المستمر (continuous assignment)، يمكنك دمجه مع المعاملات (operators) لإنشاء منطق مفيد. يمكن لبيان assign استخدام أي معامل لتشغيل سلك (wire).

الصيغة الأساسية

assign wire_name = expression;

يمكن أن يتضمن التعبير ما يلي:

  • عوامل التشغيل الحسابية (+, -, *, /)
  • عوامل تشغيل البت (&, |, ^, ~)
  • عوامل التشغيل المنطقية (&&, ||, !)
  • عوامل المقارنة (>, <, ==, !=)
  • عوامل الإزاحة (<<, >>)
  • العامل الشرطي (? :)

أمثلة مع معاملات مختلفة

عملية AND على مستوى البت (Bitwise AND):

assign out = a & b;

الجمع:

assign sum = a + b;

مقارنة:

assign is_greater = (a > b);

شرطي (multiplexer):

assign out = sel ? a : b;

الإزاحة:

assign shifted = data << 2;

الدمج:

assign bus = {high_byte, low_byte};

مثال على الكود

module assign_operators (
  input [3:0] a, b,
  input sel,
  output [3:0] and_out,
  output [4:0] sum_out,
  output is_equal,
  output mux_out
);
  
  assign and_out = a & b;           // عملية AND على مستوى البتات
  assign sum_out = a + b;           // عملية الجمع
  assign is_equal = (a == b);       // عملية المقارنة
  assign mux_out = sel ? a : b;     // شرطي (مبدل)
  
endmodule

عوامل تشغيل متعددة في تعيين واحد

يمكنك دمج عوامل التشغيل في تعبير واحد:

assign result = (a & b) | (c ^ d);
assign final = (a + b) > (c - d);
assign parity = ^data;   // XOR الاختزالي (عدد فردي من الـ 1)

أسبقية العمليات

تتبع لغة Verilog أسبقية العمليات القياسية. استخدم الأقواس ( ) لجعل قصدك واضحاً:

// غير واضح
assign out = a & b | c;

// واضح
assign out = (a & b) | c;
challenge icon

التحدي

أضف بيانات assign المفقودة بناءً على المهام.

ما يجب فعله:

  1. اجعل and_result مساوياً لـ input_a AND input_b (على مستوى البتات)
  2. اجعل or_result مساوياً لـ input_a OR input_b (على مستوى البتات)
  3. اجعل xor_result مساوياً لـ input_a XOR input_b (على مستوى البتات)
  4. اجعل not_result مساوياً لـ NOT input_a (على مستوى البتات)

ورقة مرجعية

تدعم جملة assign عوامل تشغيل متنوعة للمنطق التوافقي (combinational logic):

assign wire_name = expression;

أنواع عوامل التشغيل:

  • على مستوى البت (Bitwise): &، |، ^، ~
  • حسابية (Arithmetic): +، -، *، /
  • منطقية (Logical): &&، ||، !
  • مقارنة (Comparison): >، <، ==، !=
  • إزاحة (Shift): <<، >>
  • شرطية (Conditional): ? :
  • دمج (Concatenation): { }
assign and_out  = a & b;          // عملية AND على مستوى البت
assign sum_out  = a + b;          // جمع
assign is_equal = (a == b);       // مقارنة
assign mux_out  = sel ? a : b;    // ناخب (Multiplexer)
assign bus      = {high, low};    // دمج
assign parity   = ^data;          // عملية XOR اختزالية

استخدم الأقواس لتوضيح الأسبقية:

assign out = (a & b) | c;

جرّب بنفسك

module assign_challenge (
  input input_a,
  input input_b,
  output and_result,
  output or_result,
  output xor_result,
  output not_result
);
  
  // TODO: أضف عبارات التعيين (assign) لكل من:
  // and_result = input_a & input_b
  // or_result  = input_a | input_b
  // xor_result = input_a ^ input_b
  // not_result = ~input_a

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

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

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