משפט תנאי
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 52 מתוך 90.
משפט if הוא בלוק לקבלת החלטות שמבצע קוד רק כאשר תנאי מתקיים. משפט if בודק תנאי.
אם התנאי הוא נכון (1), הקוד שבתוכו מתבצע. אם התנאי הוא לא נכון (0), הקוד מדולג.
תחביר:
if (condition) begin
// הקוד מתבצע כאשר condition הוא true
endדוגמה פשוטה
if (reset) begin
count = 0;
endבדוגמה הזו:
beginו-endמשמשים לציון ההתחלה והסוף של בלוק הקוד
- אם
resetהוא 1 (אמת), הקוד שבתוךbeginו-endמתבצע →countהופך ל-0 - אם
resetהוא 0 (שקר), הקוד שבתוכו מדולג → שום דבר לא קורה
begin ו־end פועלים כמו סוגריים מסולסלים { } בשפות תכנות אחרות. הם מקבצים פקודות יחד, כדי ש־Verilog תדע איזה קוד שייך לתנאי if. אף שיש כאן רק פקודה אחת, השימוש ב־begin וב־end עדיין נחשב לשיטה טובה לשמירה על עקביות.
פקודת If בבלוק Always
always @(posedge clk) begin
if (reset)
count <= 0;
endהערה: עבור פקודה יחידה, begin ו־end הם אופציונליים. לדוגמה, בבלוק ה־always שלמעלה אין צורך ב־begin/end אחרי if, משום שיש בו רק פקודה אחת.
התנאי יכול להיות כל ביטוי
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
endכללים חשובים
| כלל | הסבר |
|---|---|
| התנאי יכול להיות כל ביטוי | ערכים שאינם אפס (וידועים) נחשבים לאמת, ואפס נחשב לשקר |
נדרשים begin / end עבור כמה פקודות | בדומה ל־{ } בשפות אחרות |
ללא begin/end, רק פקודה אחת מופיעה אחריהם | רק השורה הבאה |
אתגר
מה לעשות:
- הוסף את משפט ה־
ifהחסר כדי שזה יעבוד.
- כאשר
enableהוא1, הערך שלoutצריך להיות שווה ל־a & b - כאשר
enableהוא0, הערך שלoutצריך להישאר0(ללא שינוי)
קוד הפתיחה מאתחל את out = 0 ובודק את שני המקרים.
נסו בעצמכם
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// מקרה בדיקה 1: enable = 1
enable = 1;
// TODO: הוסיפו פקודת if (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// מקרה בדיקה 2: enable = 0
enable = 0;
out = 0;
// TODO: out צריך להישאר 0
$display("enable=0: out = %d (should be 0)", out);
$finish;
end
endmoduleהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין