Menu
Coddy logo textTech

מערכים

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

וקטור הוא ערך אחד עם כמה סיביות.
מערך הוא כמה ערכים, שלכל אחד מהם יש סיביות משלו.

הערות חשובות

  • מערכים אינם ניתנים לסינתזה בכלים רבים כאשר משתמשים בהם בגדלים גדולים
  • מערכים משמשים בעיקר בספסלי בדיקה
  • לזיכרון חומרה, השתמשו ברכיבי זיכרון ייעודיים
challenge icon

אתגר

השלימו את הקוד שלהלן כדי ליצור מערך שמאחסן 4 ערכי בדיקה.

מה לעשות: 

  1. הכריזו על מערך בשם test_data
    1. השתמשו בסוג הנתונים reg (כי הוא מאחסן ערכים בסביבת בדיקה)
    2. כל איבר צריך להיות ברוחב 8 ביטים ([7:0])
    3. במערך צריכים להיות 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
quiz iconבחנו את עצמכם

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

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

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