בלוק Always
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 46 מתוך 90.
בלוק פרוצדורלי הוא בלוק קוד שבו פקודות מתבצעות זו אחר זו, ברצף, ממש כמו בשפות תכנות תוכנה כמו C או Python. ל-Verilog יש שני בלוקים פרוצדורליים: initial (רץ פעם אחת) ו-always (רץ ברציפות). נתחיל בבלוק always.
בלוק always פועל ברציפות. הוא חוזר על עצמו ללא הפסקה מרגע שהסימולציה מתחילה. משתמשים בו כדי לתאר חומרה שצריכה להמשיך לפעול, כגון כפכפים, מונים ולוגיקה צירופית.
תחביר בסיסי:
always @(sensitivity_list) begin
// קוד שרץ שוב ושוב
endה־@(sensitivity_list) קובע לבלוק מתי להתבצע. בלעדיו (וללא השהיה כגון #5 בתוכו), הבלוק היה נכנס ללולאה אינסופית והסימולציה הייתה נתקעת.
דוגמה לבלוק always: מונה
הנה דוגמה לאופן שבו אפשר להשתמש בבלוק always כדי ליצור מונה.
module counter (
input clk,
output reg [3:0] count
);
always @(posedge clk) count <= count + 1;
endmoduleאיך הקוד הזה עובד
| חלק | משמעות |
|---|---|
always | הרץ את הקוד הזה שוב ושוב, ללא הפסקה |
@(posedge clk) | המתן עד שהשעון יעבור מ־0 ל־1 (קצה עולה) |
count <= count + 1 | קח את הערך הנוכחי של count, הוסף 1 ושמור אותו בחזרה |
הבלוק פועל בכל חזית עולה של השעון. בכל פעם, count גדל ב־1.
רשימת הרגישות @(posedge clk) מורה לו לפעול רק בקצוות השעון, ולא ברציפות. בלי זה, הלולאה הייתה פועלת לנצח ללא השהיה.
בלוק always עם כמה אותות
אפשר לרשום אותות מסוימים:
always @(a or b) begin
out = a & b;
endהפעולה הזו מתבצעת כאשר a או b משתנים.
אתגר
הוסף את בלוק always החסר כדי שהמודול הזה יפעל.
איך זה עובד:
- בכל חזית עולה של השעון,
out1מתהפך (משתנה) מ־0 ל־1 או מ־1 ל־0 out2עוקב אחרout1(אותו ערך כמוout1)
מה צריך לעשות:
- הוסף בלוק
always @(posedge clk) - בתוכו, גרום ל־
out1להתהפך (השתמש ב־out1 = ~out1) - הגדר את
out2כך שיהיה שווה ל־out1
נסו בעצמכם
module toggler (
input clk,
output reg out1,
output reg out2
);
initial begin
out1 = 0;
out2 = 0;
end
// TODO: הוסיפו בלוק always עם posedge clk
// out1 מתהפך בכל מחזור שעון
// out2 עוקב אחר out1
endmoduleהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודול9בלוקים פרוצדורליים
בלוק Alwaysבלוק Initialרשימת רגישותהשמה חוסמתהשמה לא חוסמתסיכום — Always לעומת Initialתרגלו בעצמכם: קומפיילר Verilog אונליין