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

توليد الساعة

جزء من قسم الأساسيات في رحلة 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 دورات كاملة)، ثم يتوقف.

challenge icon

التحدي

أضف الكود المفقود لإنشاء clock يتبدل كل 4 وحدات زمنية (الفترة = 8 وحدات زمنية).

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

  1. قم بتهيئة clk إلى 0 في الوقت 0 باستخدام كتلة initial
  2. استخدم كتلة 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
quiz iconاختبر نفسك

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

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