מערכים
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 10 מתוך 90.
מערך מאפשר לך לאחסן כמה ערכים במשתנה אחד. ניתן לגשת לכל איבר במערך באמצעות האינדקס שלו.
הערה: מערך אינו טיפוס נתונים נפרד. הוא אוסף של טיפוסים מסוג wire, reg, integer או real.
הכרזה על מערכים
תחביר: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256 בתים של זיכרון (כל אחד בגודל 8 ביטים)
reg data [0:7]; // 8 רגיסטרים של ביט יחיד
wire [3:0] bus [0:3]; // 4 אפיקים, כל אחד ברוחב 4 ביטים
integer counters [0:9]; // 10 מספרים שלמיםהמספר שבסוגריים [ ] הוא גודל המערך, לא רוחב הביטים.
גישה לאיברי מערך
reg [7:0] memory [0:3];
memory[0] = 165; // עשרוני 165
memory[1] = 90; // עשרוני 90
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]); // מדפיס: 255מערכים שימושיים מאוד בספסלי בדיקה לאחסון נתוני בדיקה.
מערכים רב־ממדיים
אפשר ליצור מערכים בעלי ממדים מרובים:
reg [7:0] matrix [0:3][0:3]; // מערך 4x4 של ערכים בני 8 ביטים
matrix[0][0] = 255; // 8'hFF = 255 בבסיס עשרוני
matrix[2][1] = 85; // 8'h55 = 85 בבסיס עשרונימערך לעומת וקטור
| וקטור | מערך | |
|---|---|---|
| מה זה | חוט או רג מרובה־סיביות | אוסף של ערכים מרובים |
| תחביר | [MSB:LSB] | [size] |
| דוגמה | reg [7:0] data; | reg [7:0] mem [0:255]; |
| גישה | data[3] (סיבית 3) | mem[3] (איבר 3) |
וקטור הוא ערך אחד עם כמה סיביות.
מערך הוא כמה ערכים, שלכל אחד מהם יש סיביות משלו.
הערות חשובות
- מערכים אינם ניתנים לסינתזה בכלים רבים כאשר משתמשים בהם בגדלים גדולים
- מערכים משמשים בעיקר בספסלי בדיקה
- לזיכרון חומרה, השתמשו ברכיבי זיכרון ייעודיים
אתגר
השלימו את הקוד שלהלן כדי ליצור מערך שמאחסן 4 ערכי בדיקה.
מה לעשות:
- הכריזו על מערך בשם
test_data- השתמשו בסוג הנתונים
reg(כי הוא מאחסן ערכים בסביבת בדיקה) - כל איבר צריך להיות ברוחב 8 ביטים (
[7:0]) - במערך צריכים להיות 4 איברים (
[0:3])
- השתמשו בסוג הנתונים
נסו בעצמכם
module arrays;
// הכריזו על מערך בשם test_data
// המערך צריך להכיל 4 איברים, שכל אחד מהם ברוחב 8 ביטים
// השתמשו בטיפוס הנתונים reg (כי הוא שומר ערכים בסביבת בדיקה)
integer i;
initial begin
test_data[0] = 170;
test_data[1] = 240;
test_data[2] = 204;
test_data[3] = 15;
for (i = 0; i < 4; i = i + 1) begin
$display("test_data[%0d] = %b", i, test_data[i]);
end
$finish;
end
endmoduleהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין