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)

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

הערות חשובות

  • מערך reg הוא ניתן לסינתזה: כלי סינתזה בונים זיכרונות כמו RAM וקובצי אוגרים ממערכים כגון reg [7:0] mem [0:255];
  • משתמשים במערכים גם בסביבות בדיקה לאחסון נתוני בדיקה
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 אונליין