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

Logical Operators

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

تعمل معاملات logical على قيم كاملة وتُرجع single result: 1 (صحيح) أو 0 (خطأ). بخلاف معاملات bitwise التي تعمل bit-by-bit، تتعامل معاملات logical مع القيمة بأكملها على أنها صحيحة (non-zero) أو خاطئة (zero).

النوعمثالالنتيجة
bitwise AND4'b1010 & 4'b11004'b1000 (multiple bits)
logical AND(4'b1010 && 4'b1100)1 (single bit)

المعاملات المنطقية المتاحة

المعاملالمعنىالوصف
&&AND المنطقيصحيح إذا كان both المعاملين صحيحين (غير صفريين)
||OR المنطقيصحيح إذا كان at least one من المعاملين صحيحًا
!NOT المنطقيصحيح إذا كان المعامل خاطئًا (صفر)

كيفية عملها

AND المنطقي (<strong>&&</strong>):

(5 && 3)   // 1 (كلاهما غير صفري)
(5 && 0)   // 0 (الثاني صفر)
(0 && 0)   // 0 (كلاهما صفر)

OR المنطقي (<strong>||</strong>):

(5 || 3)   // 1 (على الأقل واحد غير صفري)
(5 || 0)   // 1 (الأول غير صفري)
(0 || 0)   // 0 (كلاهما صفر)

النفي المنطقي (<strong>!</strong>):

!5         // 0 (غير الصفر يصبح false)
!0         // 1 (الصفر يصبح true)

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

module logical_demo;
  reg [3:0] a, b;
  reg and_res, or_res, not_res;
  
  initial begin
    a = 5;
    b = 0;
    
    and_res = (a && b);   // 5 && 0 = 0
    or_res  = (a || b);   // 5 || 0 = 1
    not_res = !a;         // !5 = 0
    
    $display("5 && 0 = %d", and_res);
    $display("5 || 0 = %d", or_res);
    $display("!5     = %d", not_res);
    $finish;
  end
endmodule

الناتج:

5 && 0 = 0
5 || 0 = 1
!5     = 0

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

تُستخدم العوامل المنطقية في عبارات if والشروط:

if (a && b)           // صحيح إذا كان كل من a و b غير صفريين
  $display("Both true");

if (a || b)           // صحيح إذا كان واحد على الأقل غير صفري
  $display("At least one true");

if (!reset)           // صحيح عندما يكون reset يساوي 0
  $display("Reset is inactive");
challenge icon

التحدي

اكتب التعبيرات المنطقية الصحيحة لكل مهمة.

ما يجب فعله:

  1. Check ما إذا كان value1 وvalue2 صحيحين وتخزين النتيجة في and_out
  2. Check ما إذا كان value1 أو value2 صحيحًا وتخزين النتيجة في or_out
  3. Check ما إذا كان value1 خطأ وتخزين النتيجة في not_out

جرّب بنفسك

module logical_challenge;
  reg [3:0] value1, value2;
  reg and_out, or_out, not_out;
  
  initial begin
    value1 = 4'd12;
    value2 = 4'd5;
    
    and_out = ______;   // value1 && value2
    or_out  = ______;   // value1 || value2
    not_out = ______;   // !value1
    
    $display("%d && %d = %d", value1, value2, and_out);
    $display("%d || %d = %d", value1, value2, or_out);
    $display("!%d     = %d", value1, not_out);
    $finish;
  end
endmodule
quiz iconاختبر نفسك

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

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

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