לוגיקת מכונת המצבים
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 80 מתוך 90.
אתגר
בשיעור הזה תוסיף את לוגיקת המעבר בין המצבים לבקר הרמזור. מכונת המצבים קובעת מתי לעבור ממצב אחד לבא אחריו.
לוגיקת מכונת המצבים שולטת מתי ואיך הרמזור משנה מצבים.
רצף המצבים
ירוק → צהוב → אדום → ירוק → …
המשימה שלך היא להוסיף את לוגיקת מכונת המצבים למודול.
בשלב הזה אות קלט חדש, next, מפעיל כל שינוי; מונה התזמון יתווסף בשלב הבא. השאר את כל מה שכתבת בשלב הקודם (אוגר state, ההצהרה הלא־בשימוש של counter ובלוק הפלט always @(*)).
מה לעשות:
- הוסף לממשק המודול, אחרי
reset, יציאת קלט של 1 ביט בשםnext:input next,. סביבת הבדיקה מפעילה אותו בפולס כדי לבקש את המצב הבא - הוסף בלוק
always @(posedge clk or posedge reset) - בעת איפוס, הגדר את
stateלאדום (2) - כאשר
nextהוא 1, עבור למצב הבא:- אם המצב הוא ירוק (0): שנה לצהוב
- אם המצב הוא צהוב (1): שנה לאדום
- אם המצב הוא אדום (2): שנה לירוק
נסו בעצמכם
module traffic_light (
input clk,
input reset,
input next, // אות להפעלת שינוי מצב
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
// השמות לפלטים
always @(*) begin
case (state)
0: begin green = 1; yellow = 0; red = 0; end
1: begin green = 0; yellow = 1; red = 0; end
2: begin green = 0; yellow = 0; red = 1; end
default: begin green = 0; yellow = 0; red = 1; end
endcase
end
// TODO: הוסף לוגיקה של מכונת מצבים (ללא תזמון)
// always @(posedge clk or posedge reset) begin
// if (reset) begin
// state <= 2;
// end else if (next) begin
// case (state)
// 0: state <= 1;
// 1: state <= 2;
// 2: state <= 0;
// endcase
// end
// end
endmoduleכל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין