הגדרת המצבים
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 79 מתוך 90.
אתגר
בקר רמזור הוא מכונת מצבים סופית שעוברת במחזור בין מצבי תאורה שונים (אדום, צהוב, ירוק) במרווחי זמן מוגדרים. מכונת מצבים סופית (FSM) היא מעגל שיכול להיות באחד ממספר מוגבל של מצבים. הוא עובר ממצב אחד לאחר בהתאם לקלטים או לתזמון.
בפרויקט הזה תבנו בקר רמזור לצומת פשוט. לרמזור יש שלושה פלטים:
| אור | פלט | משמעות |
|---|---|---|
| אדום | red = 1 | עצור |
| צהוב | yellow = 1 | זהירות |
| ירוק | green = 1 | סע |
האורות מתחלפים לפי הסדר הזה:
Green → Yellow → Red → Green → …
רצף התזמון
| מצב | משך | המצב הבא |
|---|---|---|
| ירוק | 30 שניות | צהוב |
| צהוב | 10 שניות | אדום |
| אדום | 40 שניות | ירוק |
בשיעור הזה תגדירו את המצבים עבור בקר הרמזור.
לרמזור יש שלושה מצבים אפשריים:
| מצב | אור | קוד |
|---|---|---|
| ירוק | האור הירוק דולק | 2'b00 |
| צהוב | האור הצהוב דולק | 2'b01 |
| אדום | האור האדום דולק | 2'b10 |
השלימו את המודול על ידי הוספת החלקים החסרים.
מה לעשות:
הגדירו קידוד מצבים: 0=ירוק, 1=צהוב, 2=אדום
- הצהירו על אוגר בן 2 סיביות בשם
state - הצהירו על אוגר בן 6 סיביות בשם
counter(לתזמון של עד 40 שניות). הוא לא בשימוש בשלב הזה: לוגיקת התזמון שסופרת באמצעותו תופיע בהמשך הפרויקט, בשלב תזמון המעברים - הוסיפו את השמות הפלט בתוך בלוק always קומבינטורי,
always @(*) begin ... end, ובתוכוcase (state).red,yellowו-greenמוצהרים כ-output reg, ואפשר להשמות ל-regרק בתוך בלוק כזה.@(*)פירושו שהבלוק ירוץ שוב בכל פעם שמשתנה ערך כלשהו שהוא קורא, וכאן זהוstate:- כאשר המצב הוא 0:
green = 1,yellow = 0,red = 0 - כאשר המצב הוא 1:
green = 0,yellow = 1,red = 0 - כאשר המצב הוא 2:
green = 0,yellow = 0,red = 1
- כאשר המצב הוא 0:
נסו בעצמכם
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
// TODO: משימה 1 - הכריזו על אוגר מצב (2 ביטים)
// TODO: משימה 2 - הכריזו על אוגר מונה (6 ביטים)
// TODO: משימה 3 - הקצו ערכים לפלטים באמצעות case (state)
// מצב 0: green=1, yellow=0, red=0
// מצב 1: green=0, yellow=1, red=0
// מצב 2: green=0, yellow=0, red=1
endmoduleכל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין