العوامل على مستوى البتات
جزء من قسم الأساسيات في رحلة 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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4العوامل الجزء 1
العوامل الحسابيةعامل باقي القسمةعوامل المقارنةمراجعة - الرياضيات البسيطةالعوامل على مستوى البتات7التعيين والبوابات
التعيين المستمرالتعيين باستخدام العواملالعناصر الأساسية المدمجة للبواباتبوابات AND وOR وNOTبوابات XOR وXNORمراجعة - دائرة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الربطالمعامل الشرطيمراجعة - تحدي المعاملات11الحلقات التكرارية
حلقة Forحلقة Whileحلقة التكرارحلقة لا نهائيةتعليمة التعطيلمراجعة - أنماط الحلقات التكرارية3نظام الأعداد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ الإدخال والإخراج ثنائية الاتجاهإنشاء مثيل للوحدةربط المنافذ حسب الاسمربط المنافذ حسب الترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة الحساسيةإسناد حاجزإسناد غير حاجزمراجعة - Always مقابل Initial15متحكّم إشارات المرور
تعريف الحالاتمنطق آلة الحالاتتدرّب بنفسك: مترجم Verilog عبر الإنترنت