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