Menu
Coddy logo textTech

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

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

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

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

איך לחשב משלים ל־2

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

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

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

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

‎-5 במשלים ל-2 של 4 סיביות הוא <strong>4'b1011</strong>

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

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

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

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

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

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

כברירת מחדל, Verilog מתייחס למספרים כאל מספרים ללא סימן. כדי לעבוד עם מספרים שליליים, הכריזו על אותות כ-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, Verilog מתייחסת לכל הערכים כחיוביים
  • החשבון במשלים לשתיים מתבצע אוטומטית כשמשתמשים ב־signed
  • הסיבית המשמעותית ביותר קובעת את הסימן: 1 = שלילי, 0 = חיובי
challenge icon

אתגר

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

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

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

נסו בעצמכם

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