توليد الساعة
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 71 من 90.
إشارة الساعة هي إشارة تتنقل باستمرار بين 0 و 1 على فترات زمنية منتظمة. تعد إشارات الساعة ضرورية للمنطق التتابعي مثل القلابات (flip-flops) والعدادات.
لماذا يتم توليد نبضة ساعة (Clock)
في منصات الاختبار (testbenches)، تحتاج إلى نبضة ساعة لاختبار الدوائر التتابعية (sequential circuits). تتحكم نبضة الساعة في سلوك القلابات (flip-flops)، والمسجلات (registers)، وآلات الحالة (state machines).
طرق توليد نبضة الساعة
| الطريقة | الوصف |
|---|---|
always مع تأخير # | الطريقة الأكثر شيوعاً |
حلقة forever | طريقة بديلة |
حلقة repeat | لعدد محدد من الدورات |
الطريقة 1: كتلة Always مع تأخير
reg clk;
initial begin
clk = 0;
end
always #5 clk = ~clk;clk = 0في الوقت 0- كل 5 وحدات زمنية،
clkتتغير قيمته
- الدورة = 10 وحدات زمنية
- التردد = 1/10 = 0.1 لكل وحدة زمنية
الطريقة 2: حلقة Forever
reg clk;
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
endنفس النتيجة مثل طريقة always.
الطريقة 3: التكرار لدورات ثابتة
reg clk;
initial begin
clk = 0;
repeat (10) begin
#5 clk = ~clk;
end
endيولد بالضبط 10 حواف للساعة (5 دورات كاملة)، ثم يتوقف.
التحدي
أضف الكود المفقود لإنشاء clock يتبدل كل 4 وحدات زمنية (الفترة = 8 وحدات زمنية).
ما يجب القيام به:
- قم بتهيئة
clkإلى 0 في الوقت 0 باستخدام كتلةinitial - استخدم كتلة
alwaysمع تأخير لتبديلclkكل 4 وحدات زمنية
ورقة مرجعية
تتبدل الساعة (clock) بين 0 و 1 على فترات منتظمة. الفترة = 2 × التأخير.
الطريقة 1: كتلة always (الأكثر شيوعاً)
reg clk;
initial begin
clk = 0;
end
always #5 clk = ~clk; // الفترة = 10الطريقة 2: حلقة forever
initial begin
clk = 0;
forever #5 clk = ~clk;
endالطريقة 3: التكرار (Repeat) (عدد ثابت من الحواف)
initial begin
clk = 0;
repeat(10) #5 clk = ~clk; // 10 حواف = 5 دورات
endجرّب بنفسك
module clock_challenge;
reg clk;
// TODO: الخطوة 1 - أضف block initial لضبط clk = 0
// TODO: الخطوة 2 - أضف block always لتبديل حالة clk كل 4 وحدات زمنية
initial begin
$monitor("Time %0t: clk = %b", $time, clk);
#20;
$display("Clock generated for 20 time units");
$finish;
end
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية13التوقيت والتأخيرات
ما هي التأخيراتتأخيرات البواباتتأخيرات التعيينتوجيه Timescaleتوليد الساعةمراجعة - التحكم في التوقيت5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة