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

توليد الساعة

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

ساعة النظام (clock) هي إشارة تتنقل باستمرار بين 0 و 1 في فترات زمنية منتظمة. تعتبر الساعات أساسية للطقس المنطقي التتابعي (sequential logic) مثل الـ flip-flops والعدادات (counters).

لماذا تقوم بتوليد Clock

في منصات الاختبار (testbenches)، تحتاج إلى clock لاختبار الدوائر التتابعيات (sequential circuits). يقوم الـ clock بتوجيه سلوك القلابات (flip-flops)، المسجلات (registers)، وآلات الحالة (state machines).

طرق توليد Clock

الطريقةالوصف
always مع تأخير #الطريقة الأكثر شيوعًا
حلقة foreverطريقة بديلة
حلقة repeatلعدد محدد من الـ cycles

الطريقة 1: كتلة `always` `block` مع تأخير

reg clk;

initial begin
  clk = 0;
end

always #5 clk = ~clk;
  • clk = 0 في الوقت 0
  • كل 5 ووحدات زمنية، يتغير clk (يتأرجح)
  • Period = 10 time units
  • التردد = 1/10 = 0.1 لكل time unit

الطريقة 2: الحلقة Forever Loop

reg clk;

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end

نفس نتيجة طريقة always.

الطريقة 3: repeat لـ cycles محدودة

reg clk;

initial begin
  clk = 0;
  repeat (10) begin
    #5 clk = ~clk;
  end
end

ينشئ بالضبط 10 clock edges (5 cycles كاملة)، ثم يتوقف.

challenge icon

التحدي

قم بإضافة الكود المفقود لتوليد clk يتغير (toggle) كل 4 units من الـ time (الـ Period = 8 units من الـ time).

ما يجب القيام به:

  1. قم بتهيئة clk إلى 0 عند الـ time 0 باستخدام initial block
  2. استخدم always block مع تأخير لعمل toggle لـ clk every 4 units من الـ time

جرّب بنفسك

module clock_challenge;
  reg clk;
  
  // TODO: الخطوة 1 - أضف كتلة initial لتعيين clk = 0
  
  
  // TODO: الخطوة 2 - أضف كتلة always لتبديل clk كل 4 وحدات زمنية
  

  initial begin
    $monitor("Time %0t: clk = %b", $time, clk);
    #20;
    $display("Clock generated for 20 time units");
    $finish;
  end
endmodule
quiz iconاختبر نفسك

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

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