מספרים ללא גודל מוגדר
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 15 מתוך 90.
מספר ללא גודל מוגדר הוא מספר שנכתב בלי לציין כמה ביטים יש בו. כשכותבים מספר בלי קידומת גודל, Verilog מניחה שגודלו 32 ביטים כברירת מחדל.
a = 'b1010; // Unsized: Verilog treats this as 32 bits
a = 32'b1010; // זהה למה שמופיע למעלה, אך מפורשמספרים ללא גודל משתמשים רק בפורמט ובערך: [format][value]
<strong>format</strong>: בסיס המספר:bלבינארי,dלעשרוני,hלהקסדצימלי, אוoלאוקטלי<strong>value</strong>: המספר עצמו (לדוגמה,1010)
עדיין נדרשת גרש בודד ' בין הפורמט לערך, אבל לא מציינים לפניו את מספר הביטים.
'b1010: מספר בינארי בן 32 סיביות, 1010'd255: מספר עשרוני בן 32 סיביות, 255'hFF: מספר הקסדצימלי בן 32 סיביות, FF'b1: מספר בינארי בן 32 סיביות, 1 (עם 31 אפסים מובילים)
דוגמת קוד:
reg [7:0] data;
initial begin
data = 1010; // ללא גודל מוגדר: ערך של 32 ביט (עלול לגרום לאזהרה)
data = 'd255; // Unsized: 32-bit decimal 255
data = 'hFF; // ללא גודל מוגדר: ערך הקסדצימלי של 32 ביט FF
endללא ציון גודל לעומת עם ציון גודל
| ללא ציון גודל | עם ציון גודל | |
|---|---|---|
| דוגמה | 1010 או 'd255 | 8'b1010 או 8'd255 |
| רוחב סיביות | 32 סיביות (ברירת מחדל) | מפורש (כפי שצוין) |
| גרש | נדרש עם בסיס מספרי | נדרש |
| מתי להשתמש | קוד פשוט של testbench | השמות לחומרה |
בעיה אפשרית
מספרים ללא ציון גודל עלולים לגרום להתנהגות בלתי צפויה כאשר משייכים אותם לאוגרים קטנים יותר:
reg [3:0] small;
small = 'b1111; // 32-bit value, but fits in 4 bits (fine)
small = 'b10000; // ערך של 32 ביט, אבל גדול מדי! (אזהרה)בדוגמה השנייה מוקצה ערך של 32 סיביות 10000 לאוגר של 4 סיביות. רק 4 הסיביות הנמוכות נשמרות (0000), וייתכן שזה לא מה שציפית.
מתי להשתמש במספרים ללא גודל מוגדר
מספרים ללא גודל מוגדר נוחים עבור:
- מספרים פשוטים בספסלי בדיקה
- מונה לולאה
- הוראות
$display
בהשמות לחומרה בפועל, השתמשו במספרים בגודל מוגדר כדי להיות מפורשים ולהימנע מאזהרות.
אתגר
בקוד שלהלן, חלק מהמספרים אינם מוגדרים בגודל. שנה אותם למספרים מוגדרי גודל (8 ביטים) כדי למנוע אזהרות.
מה לעשות:
- שנה את
aלמספר בינארי בן 8 ביטים המייצג את 1010 - שנה את
bלמספר עשרוני בן 8 ביטים המייצג את 255 - שנה את
cלמספר הקסדצימלי בן 8 ביטים המייצג את FF
נסו בעצמכם
module unsized_challenge;
reg [7:0] a, b, c;
initial begin
a = 'b1010; // Change to sized (8-bit binary)
b = 'd255; // שנה לערך בגודל מוגדר (עשרוני של 8 ביטים)
c = 'hFF; // Change to sized (8-bit hex)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %b", c);
$finish;
end
endmoduleהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין