Menu
CoddyTech

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

חלק מהיחידה יסודות במסלול ה-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 או מסיימים את הסימולציה באמצעות $finishאחרת הסימולציה לעולם לא מסתיימת
מומלץ להשתמש בזה בספסלי בדיקהלא ניתן לסנתז
challenge icon

אתגר

מה לעשות:

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

נסו בעצמכם

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

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

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

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