מספרים שליליים
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 16 מתוך 90.
ב-Verilog, מספרים שליליים מיוצגים בפורמט משלים ל-2. משלים ל-2 הוא דרך לייצג מספרים חיוביים ושליליים בבינארי. הסיבית המשמעותית ביותר (MSB) מציינת את הסימן:
- 0 = מספר חיובי
- 1 = מספר שלילי
איך לחשב משלים ל־2
כדי למצוא את המשלים ל־2 של מספר:
- כתבו את המספר החיובי בבינארי
- הפכו את כל הביטים (0 הופך ל־1, 1 הופך ל־0)
- הוסיפו 1
דוגמה: ייצוג -5 ב-4 סיביות
| שלב | פעולה | תוצאה |
|---|---|---|
| 1 | 5 חיובי בבינארי | 0101 |
| 2 | היפוך כל הסיביות | 1010 |
| 3 | הוספת 1 | 1011 |
-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 = חיובי
אתגר
השלימו את הקוד על ידי כתיבת ערכי המשלים ל־2 הנכונים.
מה צריך לעשות:
- הגדירו את
aלערך -3 באמצעות ייצוג בינארי במשלים ל־2 של 4 סיביות - הגדירו את
bלערך -8 באמצעות ייצוג בינארי במשלים ל־2 של 4 סיביות - הגדירו את
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השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין