Menu
Coddy logo textTech

בלוק Initial

חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 47 מתוך 90.

ל-Verilog יש שני בלוקים פרוצדורליים: initial (רץ פעם אחת) ו-always (רץ ברציפות). עכשיו נלמד על הבלוק initial.

מהו בלוק Initial?

הבלוק initial רץ פעם אחת בלבד בתחילת הסימולציה (בזמן 0). כשהוא מסתיים, הוא לא רץ שוב.

הוא משמש בעיקר בסביבות בדיקה עבור:

  • הגדרת ערכים ראשוניים
  • יצירת אותות בדיקה
  • הצגת הודעות
  • הפעלת הסימולציה

תחביר

initial begin
  // הפקודות מתבצעות פעם אחת, לפי הסדר
end

דוגמה בסיסית

initial begin
  $display("Simulation started");
  $display("This runs once");
  $finish;
end

פלט:

Simulation started
This runs once

שימוש בבלוק initial לאותות בדיקה

initial begin
  a = 0;
  #10 a = 1;
  #10 a = 0;
  #10 $finish;
end

הערך של a משתנה בזמנים: 0, 10 ו־20.

initial לעומת always

 initialalways
מופעלפעם אחתברציפות (לנצח)
מיועד ל־ספסלי בדיקה, אתחולחומרה (כפכפים, מונים)
ניתן לסינתזה?לא (סימולציה בלבד)כן (עם רשימת רגישות)

הערות חשובות

  • בלוקים מסוג initial אינם ניתנים לסינתזה. אי אפשר להפוך אותם לחומרה
  • השתמשו ב-initial רק בספסלי בדיקה
  • אם ספסל הבדיקה מכיל שעון שרץ ללא הפסקה (למשל, always #5 clk = ~clk;), הסימולציה תרוץ לנצח אלא אם תקראו ל-$finish; כשיש רק בלוק initial, הסימולטור נעצר מעצמו כשלא נותרות עוד אירועים, אבל הוספת $finish היא עדיין נוהג מומלץ
challenge icon

אתגר

הוסף את בלוק initial החסר, שמגדיר את a ל־0, ואז לאחר 10 יחידות זמן מגדיר את a ל־1.

מה לעשות:

  1. הוסף initial begin ו־end
  2. הגדר a = 0
  3. המתן #10
  4. הגדר a = 1
  5. הוסף $finish כדי לסיים את הסימולציה

נסו בעצמכם

module test;
  reg a;
  
  // TODO: הוסף כאן בלוק initial
  // קבע a = 0
  // המתן #10
  // קבע a = 1
  // הוסף $finish; כדי לסיים את הסימולציה
  
endmodule
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: קומפיילר Verilog אונליין