الأعداد غير محددة الحجم
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 15 من 90.
الرقم غير محدد الحجم هو رقم يُكتب من دون تحديد عدد البتات التي يتكوّن منها. عند كتابة رقم من دون بادئة للحجم، يفترض Verilog أن حجمه هو 32 بتًا افتراضيًا.
a = 'b1010; // Unsized: Verilog treats this as 32 bits
a = 32'b1010; // نفس ما سبق، لكن بشكل صريحتستخدم الأرقام Unsized التنسيق والقيمة فقط: [format][value]
<strong>format</strong>: أساس الرقم:bللنظامbinary، وdللنظامdecimal، وhللنظام السداسي عشري، أوoللنظام الثماني<strong>value</strong>: الرقم الفعلي (على سبيل المثال،1010)
لا يزال الرمز ' مطلوبًا بين التنسيق والقيمة، ولكن لا يوجد عدد للبتات قبله.
'b1010: قيمة ثنائية 1010 بحجم 32 بت'd255: قيمة عشرية 255 بحجم 32 بت'hFF: قيمة سداسية عشرية FF بحجم 32 بت'b1: قيمة ثنائية 1 بحجم 32 بت (مع 31 صفرًا بادئًا)
مثال على التعليمات البرمجية:
reg [7:0] data;
initial begin
data = 1010; // غير محدد الحجم: قيمة 32 بت (قد يسبب تحذيرًا)
data = 'd255; // Unsized: 32-bit decimal 255
data = 'hFF; // غير محدد الحجم: سداسي عشري 32 بت FF
endUnsized مقابل Sized
| Unsized | Sized | |
|---|---|---|
| مثال | 1010 أو 'd255 | 8'b1010 أو 8'd255 |
| عرض البت | 32 bits (افتراضي) | explicit (كما هو محدد) |
| الفاصلة العليا | مطلوبة مع التنسيق | مطلوبة |
| متى تُستخدم | شفرة testbench البسيطة | تعيينات العتاد |
مشكلة محتملة
يمكن أن تتسبب الأرقام Unsized في سلوك غير متوقع عند إسنادها إلى سجلات أصغر:
reg [3:0] small;
small = 'b1111; // 32-bit value, but fits in 4 bits (fine)
small = 'b10000; // قيمة 32-بت، لكنها كبيرة جدًا! (تحذير)يُسنِد المثال الثاني قيمةً من 32 بت 10000 إلى سجلّ من 4 بتات. لا يتم الاحتفاظ إلا بالبتات الأربعة الدنيا (0000)، وقد لا يكون هذا ما تتوقعه.
متى تستخدم الأرقام غير محددة الحجم
تُعد الأرقام غير محددة الحجم ملائمة من أجل:
- الأرقام البسيطة في منصات الاختبار
- عدادات الحلقات
- عبارات
$display
بالنسبة إلى إسنادات العتاد الفعلية، استخدم أرقامًا ذات حجم محدد لتكون explicit وتتجنب التحذيرات.
التحدي
في الكود أدناه، بعض الأرقام Unsized. غيّرها إلى أرقام sized (8 bits) لتجنّب التحذيرات.
ما يجب فعله:
- غيّر
aإلى رقم Change ثنائي بحجم 8 bits من أجل 1010 - غيّر
bإلى رقم Change عشري بحجم 8 bits من أجل 255 - غيّر
cإلى رقم Change سداسي عشري بحجم 8 bits من أجل FF
جرّب بنفسك
module unsized_challenge;
reg [7:0] a, b, c;
initial begin
a = 'b1010; // Change to sized (8-bit binary)
b = 'd255; // غيّر إلى حجم محدد (عشري 8 بت)
c = 'hFF; // Change to sized (8-bit hex)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %b", c);
$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 عبر الإنترنت