Menu
CoddyTech

מערכים

חלק מהיחידה יסודות במסלול ה-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 (כי הוא מאחסן ערכים ב-testbench)

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