Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

Timescale Directive

جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 70 من 90.

تحدّد توجيهة timescale وحدة الزمن ودقة الزمن للمحاكاة. وهي تخبر المحاكي بكيفية تفسير قيم التأخير مثل #10.

في الدروس السابقة، استخدمنا تأخيرات مثل #10 من دون تحديد ما الذي يعنيه "10". هل هي 10 nanoseconds؟ أم 10 بيكوثانية؟ تجيب التوجيهة timescale عن هذا السؤال.

البنية:

`timescale time_unit / time_precision
الجزءالمعنىمثال
time_unitالوحدة الأساسية للتأخيرات1ns
time_precisionمدى دقة المحاكاة1ps

العلامة العكسية ` قبل timescale تعني أنه توجيه للمصرّف.

مثال

`timescale 1ns / 1ps
  • time_unit = 1ns#10 يعني 10 نانوثوانٍ
  • time_precision = 1ps → تُقرِّب المحاكاة إلى أقرب بيكوثانية

القيم الشائعة لـ timescale

وحدة الوقتالدقةحالة الاستخدام
1ns / 1nsنانوثانيةمحاكاة بسيطة
1ns / 1psبيكوثانيةأكثر دقة
1ps / 1psبيكوثانيةتصميمات عالية السرعة
1us / 1nsميكروثانيةمحاكاة بطيئة

كيف يؤثر ذلك في التأخيرات

`timescale 1ns / 1ps

initial begin
  #10 a = 1;   // ينتظر 10 نانوثانية
end

من دون timescale، تفترض بعض المحاكيات قيمة افتراضية (غالبًا 1ns). من الأفضل تحديدها دائمًا.

قواعد مهمة

القاعدةالشرح
يجب أن يكون خارج الوحداتيوضع قبل أي تعريف لوحدة
رمز الشرطة المائلة للخلف`timescale وليس 'timescale 
وحدة الوقت ≥ دقة الوقت1ns / 1ps صحيح، أما 1ps / 1ns فليس كذلك
يؤثر في جميع التأخيرات في الملفالتأخيرات العامة، وتأخيرات البوابات، وتأخيرات الإسناد
challenge icon

التحدي

ما يجب فعله:

أضف توجيه timescale المفقود لجعل التأخيرات تمثّل 10ns و20ns و30ns.

جرّب بنفسك

// TODO: أضف توجيه timescale (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
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: مترجم Verilog عبر الإنترنت