Menu
Coddy logo textTech

מספרים ללא גודל מוגדר

חלק מהיחידה יסודות במסלול ה-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 או 'd2558'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

בהשמות לחומרה בפועל, השתמשו במספרים בגודל מוגדר כדי להיות מפורשים ולהימנע מאזהרות.

challenge icon

אתגר

בקוד שלהלן, חלק מהמספרים אינם מוגדרים בגודל. שנה אותם למספרים מוגדרי גודל (8 ביטים) כדי למנוע אזהרות.

מה לעשות:

  1. שנה את a למספר בינארי בן 8 ביטים המייצג את 1010
  2. שנה את b למספר עשרוני בן 8 ביטים המייצג את 255
  3. שנה את 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
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: קומפיילר Verilog אונליין