מספרים ללא גודל מוגדר
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 15 מתוך 90.
מספר ללא ציון גודל הוא מספר שנכתב בלי לציין כמה ביטים יש לו. כשכותבים מספר בלי קידומת גודל, Verilog מניח כברירת מחדל שהוא בן 32 ביטים.
a = 'b1010; // Unsized: Verilog treats this as 32 bits
a = 32'b1010; // כמו בשורה הקודמת, אבל מפורשמספרים ללא גודל מוגדר משתמשים רק בתבנית ובערך: [format][value]
format: בסיס המספר:bלבינארי,dלעשרוני,hלהקסדצימלי אוoלאוקטליvalue: המספר עצמו (לדוגמה,1010)
הגרש ' עדיין נדרש לפני אות הפורמט, אבל לא מופיע לפניו מספר הביטים.
'b1010: המספר הבינארי 1010 ברוחב 32 סיביות'd255: המספר העשרוני 255 ברוחב 32 סיביות'hFF: המספר ההקסדצימלי FF ברוחב 32 סיביות'b1: המספר הבינארי 1 ברוחב 32 סיביות (עם 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_reg;
small_reg = 'b1111; // 32-bit value, but fits in 4 bits (fine)
small_reg = '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 אונליין
בדקו המרה: ממיר בסיסי ספירה