Menu
Coddy logo textTech

וקטורים

חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 9 מתוך 90.

וקטור הוא חוט או reg מרובה־סיביות. במקום סיבית יחידה, וקטורים מאפשרים לך לעבוד עם אפיקי נתונים. זהו אוסף של סיביות המקובצות יחד.

הערה: וקטור אינו סוג נתונים נפרד. הוא פשוט גרסה מרובת־סיביות של wire או reg.

wire single;        // ביט יחיד
wire [7:0] bus;     // וקטור של 8 ביטים (מביט 7 עד ביט 0)

כדי להכריז על וקטור, משתמשים בתחביר [MSB:LSB] כאשר MSB הוא הביט המשמעותי ביותר ו-LSB הוא הביט הפחות משמעותי.

wire [3:0] a;       // וקטור wire של 4 ביטים
reg [7:0] data;     // וקטור reg של 8 ביטים
wire [15:0] addr;   // וקטור wire של 16 ביטים

גישה לסיביות

כשניגשים לסיביות בודדות או לחלקים מתוך וקטור, משתמשים במספרים עשרוניים לציון מיקומי הסיביות (אינדקסים) ובערכים בינאריים (0 או 1) לצורך ההשמות.

הסיבה לכך היא שמיקום של סיבית הוא מקום (כמו כתובת), שבאופן טבעי מבוטא כמספר עשרוני, בעוד שהערך המאוחסן בסיבית הזאת יכול להיות רק 0 או 1: בחירה בינארית.

לדוגמה, data[0] פירושו "ביט מספר אפס", ו־= 1 פירושו "להגדיר אותו לגבוה". הקצאת מספר עשרוני כמו 75 לביט יחיד אינה מאחסנת את 75; Verilog שומרת בשקט רק את הביט הנמוך ביותר שלו, לכן יש לכתוב תמיד 0 או 1 במפורש.

reg [7:0] data;

data = 170;  
data[0] = 1;             // הגדר את LSB ל-1
data[7] = 0;             // הגדר את MSB ל-0
data[3:1] = 3'b101;      // Set bits 3,2,1 to 101 (binary remains)

סדר הסיביות

סדר הסיביות חשוב:

wire [3:0] a;     // a[3] הוא MSB, a[0] הוא LSB
wire [0:3] b;     // b[0] הוא MSB, b[3] הוא LSB (פחות נפוץ)

רוב המעצבים משתמשים בפורמט [MSB:LSB] כאשר MSB משמאל.

הקצאת ערכים

reg [3:0] a;

a = 10;       
a = 5;         
a = 3;        

קטעי וקטור

אפשר לגשת לטווח של ביטים:

reg [15:0] word;

word[15:8] = 255;        // הקצה את הבייט העליון (8'hFF = 255)
word[7:0]  = 0;          // הקצה את הבייט התחתון (8'h00 = 0)
word[3:1]  = 3'b101;     // Assign a slice 
challenge icon

אתגר

המודול שלהלן זקוק להצהרות וקטור. 

מה לעשות: 

  1. שנה כל קלט ופלט לווקטורים של 8 סיביות.

נסו בעצמכם

module vector_example(
  input a,          // שנה לווקטור של 8 ביטים [7:0]
  input b,          // שנה לווקטור של 8 ביטים [7:0]
  output c          // שנה לווקטור של 8 ביטים [7:0]
);
  
  assign c = a & b;
  
endmodule
quiz iconבחנו את עצמכם

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

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

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