Bitwise Operators
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 23 من 90.
تُجري المعاملات على مستوى البِت عمليات على كل بِت على حدة من العدد. وعلى خلاف المعاملات الحسابية (+، -، *، /) التي تتعامل مع الأعداد كقيم كاملة، تعمل المعاملات على مستوى البِت بِتًا بِتًا.
عوامل التشغيل المتاحة على مستوى البتات
| العامل | العملية | ما الذي يفعله |
|---|---|---|
& | AND | بت الناتج يساوي 1 فقط إذا كان كلا بتّي الإدخال يساوي 1 |
| | OR | بت الناتج يساوي 1 إذا كان بت إدخال واحد على الأقل يساوي 1 |
^ | XOR | بت الناتج يساوي 1 إذا كان بتّا الإدخال مختلفين |
~ | NOT | يقلب جميع البتات (يصبح 0 هو 1، ويصبح 1 هو 0) |
عند استخدام العوامل على مستوى البتات، يتعامل Verilog مع الأرقام على أنها ثنائية في الخلفية.
reg [3:0] a, b;
a = 4'd10; // Decimal 10 = binary 1010
b = 4'd12; // عشري 12 = ثنائي 1100
c = a & b; // يعمل بنفس الطريقة عند استخدام الثنائي مباشرةيمكنك كتابة الأرقام بالنظام العشري أو السداسي عشري أو الثنائي: يحوّلها Verilog إلى النظام الثنائي لإجراء العمليات على مستوى البتات.
كيف تعمل العمليات على مستوى البِتّات
يعمل كل عامل على أزواج من البِتّات (أو على بِتّات مفردة بالنسبة إلى NOT):
مثال باستخدام أعداد من 4 بِتّات:
a = 1010 (binary)
b = 1100 (binary)
AND: a & b = 1000
(1&1=1, 0&1=0, 1&0=0, 0&0=0)
OR: a | b = 1110
(1|1=1, 0|1=1, 1|0=1, 0|0=0)
XOR: a ^ b = 0110
(1^1=0, 0^1=1, 1^0=1, 0^0=0)
NOT: ~a = 0101
(~1=0, ~0=1, ~1=0, ~0=1)مثال على التعليمات البرمجية
module bitwise_demo;
reg [3:0] a, b;
reg [3:0] and_res, or_res, xor_res, not_res;
initial begin
a = 4'b1010;
b = 4'b1100;
and_res = a & b; // 1010 & 1100 = 1000
or_res = a | b; // 1010 | 1100 = 1110
xor_res = a ^ b; // 1010 ^ 1100 = 0110
not_res = ~a; // ~1010 = 0101
$display("a = %b", a);
$display("b = %b", b);
$display("a & b = %b", and_res);
$display("a | b = %b", or_res);
$display("a ^ b = %b", xor_res);
$display("~a = %b", not_res);
$finish;
end
endmoduleالناتج:
a = 1010
b = 1100
a & b = 1000
a | b = 1110
a ^ b = 0110
~a = 0101التحدي
احسب النتائج باستخدام العمليات على مستوى البت للقيم المعطاة.
ما يجب فعله:
- احسب
a & bوخزّن النتيجة فيand_res - احسب
a | bوخزّن النتيجة فيor_res - احسب
a ^ bوخزّن النتيجة فيxor_res - احسب
~aوخزّن النتيجة فيnot_res
جرّب بنفسك
module bitwise_challenge;
reg [3:0] a, b;
reg [3:0] and_res, or_res, xor_res, not_res;
initial begin
a = 4'b1101;
b = 4'b1011;
and_res = ______; // a & b
or_res = ______; // a | b
xor_res = ______; // a ^ b
not_res = ______; // ~a
$display("a = %b", a);
$display("b = %b", b);
$display("a & b = %b", and_res);
$display("a | b = %b", or_res);
$display("a ^ b = %b", xor_res);
$display("~a = %b", not_res);
$finish;
end
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logicتدرّب بنفسك: مترجم Verilog عبر الإنترنت