توجيه Timescale
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 70 من 90.
يحدد التوجيه timescale وحدة الزمن و دقة الزمن للمحاكاة. وهو يخبر المحاكي بكيفية تفسير قيم التأخير مثل #10.
في الدروس السابقة، استخدمنا تأخيرات مثل #10 دون تحديد ما تعنيه القيمة "10". هل هي 10 نانو ثانية؟ أم 10 بيكو ثانية؟ توجيه timescale يجيب على هذا السؤال.
الصيغة:
`timescale time_unit / time_precision| الجزء | المعنى | مثال |
|---|---|---|
time_unit | الوحدة الأساسية للتأخيرات | 1ns |
time_precision | مدى دقة المحاكاة المطلوبة | 1ps |
علامة الاقتباس المائلة ` قبل timescale تعني أنها توجيه للمترجم (compiler directive).
مثال
`timescale 1ns / 1pstime_unit = 1ns←#10تعني 10 نانو ثانيةtime_precision = 1ps← المحاكاة تقرب إلى أقرب بيكو ثانية
قيم النطاق الزمني الشائعة
| وحدة الزمن | الدقة | حالة الاستخدام |
|---|---|---|
1ns / 1ns | نانو ثانية | محاكاة بسيطة |
1ns / 1ps | بيكو ثانية | أكثر دقة |
1ps / 1ps | بيكو ثانية | تصاميم عالية السرعة |
1us / 1ns | ميكرو ثانية | محاكاة بطيئة |
كيف يؤثر ذلك على التأخيرات
`timescale 1ns / 1ps
initial begin
#10 a = 1; // ينتظر 10 نانو ثانية
endبدون timescale، تفترض بعض المحاكيات قيمة افتراضية (غالباً 1ns). من الأفضل تحديدها دائماً.
قواعد هامة
| القاعدة | الشرح |
|---|---|
| يجب أن تكون خارج الوحدات (modules) | توضع قبل أي تعريف للوحدة (module definition) |
| رمز الفاصلة العليا المائلة (Backtick) | `timescale وليس 'timescale |
| وحدة الزمن ≥ دقة الزمن | 1ns / 1ps مقبولة، بينما 1ps / 1ns ليست كذلك |
| تؤثر على جميع التأخيرات في الملف | التأخيرات العامة، تأخيرات البوابات (gate delays)، وتأخيرات التعيين (assignment delays) |
التحدي
ماذا تفعل:
أضف توجيه timescale المفقود لجعل التأخيرات تمثل 10ns و 20ns و 30ns.
ورقة مرجعية
تحدد التوجيه `timescale وحدة الزمن و دقة الزمن للمحاكاة. يجب وضعه قبل أي تعريف للوحدة (module).
`timescale time_unit / time_precision`timescale 1ns / 1ps
initial begin
#10 a = 1; // ينتظر 10 نانو ثانية
endtime_unit— الوحدة الأساسية للتأخيرات (على سبيل المثال،#10= 10ns)time_precision— مدى دقة تقريب المحاكاة (يجب أن تكون ≤ وحدة الزمن)
| مقياس الزمن (Timescale) | حالة الاستخدام |
|---|---|
1ns / 1ns | محاكاة بسيطة |
1ns / 1ps | أكثر دقة |
1ps / 1ps | تصميمات عالية السرعة |
1us / 1ns | محاكاة بطيئة |
جرّب بنفسك
// TODO: (1ns / 1ps) أضف توجيه المقياس الزمني
module timescale_challenge;
initial begin
$display("Time %0t", $time);
#10 $display("Time %0t (10ns = 10000ps)", $time);
#10 $display("Time %0t (20ns = 20000ps)", $time);
#10 $display("Time %0t (30ns = 30000ps)", $time);
$finish;
end
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية13التوقيت والتأخيرات
ما هي التأخيراتتأخيرات البواباتتأخيرات التعيينتوجيه Timescaleتوليد الساعةمراجعة - التحكم في التوقيت5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة