Menu
CoddyTech

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

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

بعد أن تفهم الإسناد المستمر، يمكنك دمجه مع المعاملات لإنشاء منطق مفيد. يمكن لعبارة assign استخدام أي معامل للتحكم في سلك.

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

assign wire_name = expression;

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

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

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

و البتية:

assign out = a & b;

الجمع:

assign sum = a + b;

المقارنة:

assign is_greater = (a > b);

شرطي (مُبدِّل تعدد الإرسال):

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 [3:0] 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 (على مستوى البتات)

جرّب بنفسك

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اختبر نفسك

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

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

تدرّب بنفسك: مترجم Verilog عبر الإنترنت