אם-אחרת
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 53 מתוך 90.
הפקודה if-else מאפשרת לך לבחור בין שתי פעולות שונות על סמך תנאי. אם התנאי נכון, בלוק אחד מתבצע. אם הוא שגוי, הבלוק השני מתבצע.
המשפט if-else נותן לקוד שלך נקודת החלטה: לבצע דבר אחד אם התנאי נכון, ולבצע דבר אחר אם התנאי שגוי.
תחביר:
if (condition) begin
// מתבצע כאשר condition הוא true (1)
end else begin
// מתבצע כאשר condition הוא false (0)
endדוגמה פשוטה
if (reset) begin
count = 0;
end else begin
count = count + 1;
end- אם
resetהוא 1 →countהופך ל-0 - אם
resetהוא 0 →countגדל ב-1
כמה פקודות
השתמשו ב-begin וב-end כשיש לכם יותר מפקודה אחת:
if (enable) begin
out = data_in;
valid = 1;
end else begin
out = 0;
valid = 0;
endתנאי If-Else מרובים
אפשר לשרשר משפטי if-else:
if (a > b) begin
max = a;
end else if (b > a) begin
max = b;
end else begin
max = a; // a ו-b שווים
endכללים חשובים
| כלל | הסבר |
|---|---|
else היא אופציונלית | אפשר להשתמש ב-if בלי else |
else שייכת ל-if הקרובה ביותר | יש להיזהר בקינון |
יש להשתמש ב-begin/end עבור כמה פקודות | נדרש עבור יותר משורה אחת |
אתגר
מה צריך לעשות:
- הוסיפו את משפט ה־
if-elseהחסר כדי שזה יעבוד. - כאשר
enableהוא 1,outצריך להיות שווה ל־a & b. - כאשר
enableהוא 0,outצריך להיות שווה ל־a | b.
נסו בעצמכם
module ifelse_challenge;
reg a, b, enable;
reg out;
initial begin
a = 1;
b = 0;
enable = 1;
// TODO: הוסיפו משפט if-else
// אם enable הוא 1: out = a & b
// אחרת: out = a | b
$display("out = %d (should be 0 because 1&0=0)", out);
$finish;
end
endmoduleהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין