الأعداد محددة الحجم
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 14 من 90.
هناك طريقة للتصريح عن رقم بحجم محدد في Verilog. يُطلق عليه اسم sized number (رقم محدد الحجم). وهو مفيد لأنه يمنع الارتباك بشأن عدد البتات (bits) التي يحتوي عليها رقمك ويضمن أن العتاد (hardware) يعمل تماماً كما هو متوقع.
يتبع الرقم المحدد الحجم هذا التنسيق: [bits]'[format][value]
<strong>bits</strong>— عدد البتات (على سبيل المثال،8)<strong>'</strong>— فاصلة عليا تفصل الحجم عن التنسيق (مطلوب)
<strong>format</strong>— أساس الرقم:bللثنائي، أوdللعشري، أوhللستة عشري، أوoللثماني<strong>value</strong>— الرقم الفعلي (على سبيل المثال،1010)
على سبيل المثال:
4'b1010— 4 بت، ثنائي 1010 (عشري 10)8'd255— 8 بت، عشري 255 (ثنائي 11111111)16'hFF— 16 بت، سداسي عشر FF (ثنائي 0000000011111111)3'b1— 3 بت، ثنائي 001 (البتات اليسرى مملوءة بالأصفار)
مثال على الكود:
reg [7:0] data;
data = 8'b10101010; // 8 بت، ثنائي 10101010
data = 8'd170; // 8 بت، عشري 170
data = 8'hAA; // 8 بت، سداسي عشري AAتقوم جميع الأمثلة الثلاثة بتعيين نفس القيمة لـ data.
لماذا الحجم مهم
بدون تحديد الحجم:
reg [7:0] data;
data = 1; // ماذا يعني هذا؟ بت واحد؟ 8 بتات؟يفترض Verilog أن الأرقام الصغيرة هي 32 بت افتراضياً، مما قد يسبب مشاكل.
مع الحجم:
reg [7:0] data;
data = 8'b00000001; // مسح: قيمة 1 بحجم 8 بتحشو الأصفار (Zero Padding)
عندما تقوم بتعيين قيمة أصغر لمتجه (vector) أكبر، يقوم Verilog بملء البتات اليسرى بالأصفار:
reg [7:0] data;
data = 4'b1010; // تصبح 8'b00001010التحدي
أكمل الكود بكتابة الأرقام ذات الأحجام الصحيحة.
ما يجب القيام به:
- قم بتعيين
aإلى رقم ثنائي مكون من 8 بتات للقيمة العشرية 170 (الثنائي 10101010) - قم بتعيين
bإلى رقم ثنائي مكون من 4 بتات للقيمة العشرية 12 (الثنائي 1100) - قم بتعيين
cإلى رقم سداسي عشري مكون من 16 بت للقيمة العشرية 255 (سداسي عشري FF)
ورقة مرجعية
يتبع الرقم المحدد الحجم في Verilog التنسيق التالي: [bits]'[format][value]
bits— عدد البتات'— فاصل الفاصلة العليا المطلوبformat—b(ثنائي)،d(عشري)،h(سداسي عشري)،o(ثماني)value— الرقم الفعلي
reg [7:0] data;
data = 8'b10101010; // 8 بتات، ثنائي
data = 8'd170; // 8 بتات، عشري
data = 8'hAA; // 8 بتات، سداسي عشري (الثلاثة متساوية)بدون تحديد الحجم، يفترض Verilog تلقائيًا 32 بت، مما قد يؤدي إلى سلوك غير متوقع. يتم ملء البتات اليسرى بالأصفار عندما تكون القيمة أصغر من الحجم المعلن:
reg [7:0] data;
data = 4'b1010; // تصبح 8'b00001010جرّب بنفسك
module sized_challenge;
reg [7:0] a;
reg [3:0] b;
reg [15:0] c;
initial begin
a = ______; // ثنائي 8-بت للعدد 170 (10101010)
b = ______; // ثنائي 4-بت للعدد 12 (1100)
c = ______; // سداسي عشري 16-بت للعدد 255 (FF)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %h", c);
$finish;
end
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة