Menu
CoddyTech

מספרים שליליים

חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 16 מתוך 90.

ב-Verilog, מספרים שליליים מיוצגים בפורמט משלים ל-2. משלים ל-2 הוא דרך לייצג מספרים חיוביים ושליליים בבינארי. הסיבית המשמעותית ביותר (MSB) מציינת את הסימן:

  • 0 = מספר חיובי
  • 1 = מספר שלילי

איך מחשבים משלים לשתיים

כדי למצוא את המשלים לשתיים של מספר:

  1. כותבים את המספר החיובי בבינארי
  2. הופכים את כל הביטים (0 הופך ל־1, 1 הופך ל־0)
  3. מוסיפים 1

דוגמה: ייצוג ‎-5‎ ב־4 סיביות

שלבפעולהתוצאה
1המספר החיובי 5 בבינארי0101
2הפיכת כל הסיביות1010
3הוספת 11011

‎-5‎ במשלים ל־2 ב־4 סיביות הוא 4'b1011

כתיבת מספרים שליליים ב-Verilog

אפשר לכתוב מספרים שליליים ישירות בפורמט עשרוני:

reg signed [3:0] a;
a = -5;        // Verilog משתמש אוטומטית במשלים ל־2

כשעובדים עם מספרים בינאריים בגודל מוגדר, יש לכתוב את הערך במשלים ל־2:

a = 4'b1011;   // This is -5 in 4-bit two's complement

עם סימן לעומת ללא סימן

כברירת מחדל, האותות reg ו-wire הם ללא סימן. כדי לעבוד עם מספרים שליליים, יש להצהיר על אותות כ-signed:

reg signed [3:0] negative;   // יכול לאחסן ערכים מ־-8 עד 7
reg [3:0] positive;          // יכול לאחסן ערכים מ־0 עד 15

טווח המספרים עם סימן

עבור N ביטים, מספר עם סימן יכול לייצג:

  • מינימום: -2^(N-1)
  • מקסימום: 2^(N-1) - 1
סיביותטווח
4 סיביות-8 עד 7
8 סיביות-128 עד 127
16 סיביות-32768 עד 32767

הערות חשובות

  • יש להשתמש במילת המפתח signed כדי לאפשר טיפול במספרים שליליים
  • ללא signed, ‏reg או wire מתייחסים לכל ערך כחיובי
  • אריתמטיקה בשיטת המשלים לשתיים מתבצעת אוטומטית כשמשתמשים ב־signed
  • הסיבית המשמעותית ביותר קובעת את הסימן: 1 = שלילי, 0 = חיובי
challenge icon

אתגר

השלימו את הקוד על ידי כתיבת ערכי המשלים ל-2 הנכונים.

מה צריך לעשות:

  1. הגדירו את a לערך -3 באמצעות מספר בינארי בן 4 סיביות במשלים ל-2
  2. הגדירו את b לערך -8 באמצעות מספר בינארי בן 4 סיביות במשלים ל-2
  3. הגדירו את c לערך -1 באמצעות מספר בינארי בן 4 סיביות במשלים ל-2

נסו בעצמכם

module negative_challenge;
  reg signed [3:0] a, b, c;
  
  initial begin
    a = 4'b______;   // -3 in 4-bit two's complement
    b = 4'b______;   // -8 in 4-bit two's complement
    c = 4'b______;   // -1 in 4-bit two's complement
    
    $display("a = %d", a);
    $display("b = %d", b);
    $display("c = %d", c);
    $finish;
  end
endmodule
quiz iconבחנו את עצמכם

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

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

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