משפט תנאי
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 52 מתוך 90.
משפט if הוא בלוק לקבלת החלטות שמריץ קוד רק כאשר תנאי מתקיים. משפט if בודק תנאי.
אם התנאי הוא true (1), הקוד שבתוכו מתבצע. אם התנאי הוא false (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 |
אתגר
מה צריך לעשות:
- הוסף את משפט ה־
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 אונליין