Menu
CoddyTech

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

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

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

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 אונליין

בדקו המרה: ממיר בסיסי ספירה