בלוק 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 אונליין