Menu
Coddy logo textTech

לולאה אינסופית

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

לולאת forever חוזרת על בלוק קוד ברציפות, לנצח. היא אף פעם לא נעצרת מעצמה.

לולאת forever מתבצעת שוב ושוב ללא סוף. היא שימושית ליצירת שעונים ואותות רציפים אחרים בסביבות בדיקה.

תחביר:

forever begin
  // קוד שחוזר על עצמו לנצח
end

דוגמה פשוטה

forever begin
  $display("This prints forever");
end

הדבר ידפיס ללא הפסקה ויקריס את הסימולציה שלך. הקפד תמיד להוסיף השהיה או תנאי עצירה.

יצירת שעון (שימוש נפוץ)

השימוש הנפוץ ביותר ב-forever הוא ליצירת שעון:

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;   // הפוך את המצב כל 5 יחידות זמן
  end
end

כך נוצר שעון שפועל לאורך כל הסימולציה.

לנצח עם Disable

אפשר לעצור לולאת forever באמצעות פקודת disable:

initial begin : clock_gen   // השם נוסף כאן
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end
initial begin
  #100;
  disable clock_gen;   // עכשיו זה עובד
end

לולאת forever לעומת לולאות אחרות

לולאהעוצרת?מתי להשתמש
forכן (אחרי מספר קבוע של איטרציות)מספר החזרות ידוע
whileכן (כשהתנאי אינו מתקיים)תנאי עצירה לא ידוע
repeatכן (אחרי מספר קבוע של איטרציות)מספר החזרות ידוע
foreverלא (לעולם לא)אותות רציפים (שעון)

כללים חשובים

כללהסבר
חייב לכלול השהיה#10 או @(posedge clk)
ללא השהיה, הסימולציה נתקעתלולאה אינסופית ללא התקדמות בזמן
יש להשתמש יחד עם disable כדי לעצוראחרת הסימולציה לעולם לא מסתיימת
הכי טוב להשתמש בספסלי בדיקהלא ניתן לסנתז
challenge icon

אתגר

מה צריך לעשות:

הוסיפו את לולאת forever החסרה כדי ליצור שעון שמחליף מצב כל 10 יחידות זמן.

נסו בעצמכם

module forever_challenge;
  reg clk;
  
  initial begin
    clk = 0;
    // TODO: הוסף לולאת forever כדי להפוך את הערך של clk כל 10 יחידות זמן
  end
endmodule
quiz iconבחנו את עצמכם

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

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

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