Menu
Coddy logo textTech

אופרטור שרשור

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

אופרטור השרשור { } מאחד כמה אותות, קבועים או ביטויים לווקטור אחד גדול יותר. משתמשים בו כשרוצים לחבר ביטים יחד כדי ליצור ערכים רחבים יותר.

אילו ערכים אפשר לשרשר

אפשר לשרשר:

  • חוטים ואוגרים: כל אות
  • קבועים: מספרים כמו 4'b1010 או 8'hFF
  • ביטויים: תוצאות של פעולות כמו a + b
  • שכפולים: חזרה על ערך כמה פעמים

לכל הערכים המשורשרים חייב להיות רוחב קבוע וידוע.

תחביר בסיסי:  {value1, value2, value3, ...} רוחב התוצאה הוא סכום הרוחבים של כל הערכים הבודדים.

דוגמאות

שילוב שני ערכים בני 4 סיביות ל־8 סיביות:

reg [3:0] high, low;
reg [7:0] word;

word = {high, low};     // high הופך ל-4 הביטים העליונים, low הופך ל-4 הביטים התחתונים

שילוב עם קבועים:

data = {4'b1010, 4'b0000};   // 8'b10100000

שילוב של יותר משניים:

full = {a, b, c, d};   // All widths add up

שכפול

אפשר לחזור על ערך מספר פעמים באמצעות {n{value}}:

repeated = {4{4'b1010}};   // 16'b1010101010101010 (repeat 4 times)

הדבר שימושי להרחבת סימן:

signed_8bit = {{4{sign_bit}}, value_4bit};

דוגמת קוד

module concatenation_demo;
  reg [3:0] upper, lower;
  reg [7:0] combined;
  reg [11:0] repeated;
  
  initial begin
    upper = 4'b1010;
    lower = 4'b1100;
    
    combined = {upper, lower};        // 10101100
    repeated = {3{4'b1010}};          // 101010101010
    
    $display("{upper, lower} = %b", combined);
    $display("{3{4'b1010}} = %b", repeated);
    $finish;
  end
endmodule

פלט:

{upper, lower} = 10101100
{3{4'b1010}} = 101010101010

הערות חשובות

  • לסדר יש חשיבות: {a, b} שונה מ־{b, a}
  • לכל החלקים חייב להיות רוחב קבוע (ללא מספרים שרוחבם אינו מוגדר)
  • אפשר להשתמש בשרשור הן בצד שמאל והן בצד ימין של השמות
challenge icon

אתגר

כתבו את ביטויי השרשור הנכונים עבור כל משימה.

מה לעשות:

  1. שרשרו את a ואת b לתוצאה של 8 סיביות ושמרו אותה ב-combine1
  2. שרשרו את c, את d ואת e לתוצאה של 12 סיביות ושמרו אותה ב-combine2
  3. שרשרו את f ואת g פעמיים לתוצאה של 12 סיביות ושמרו אותה ב-combine3

נסו בעצמכם

module concatenation_challenge;
  reg [3:0] a, b;
  reg [3:0] c, d, e;
  reg [3:0] f, g;
  reg [7:0] combine1;
  reg [11:0] combine2, combine3;
  
  initial begin
    a = 4'b1010;
    b = 4'b0101;
    c = 4'b1111;
    d = 4'b0000;
    e = 4'b1100;
    f = 4'b1001;
    g = 4'b0110;
    
    combine1 = ______;   // Combine a and b into an 8-bit result 
    combine2 = ______;   // Combine c, d, and e into a 12-bit result 
    combine3 = ______;   // Combine f and two copies of g into a 12-bit result 
    
    $display("{a, b} = %b", combine1);
    $display("{c, d, e} = %b", combine2);
    $display("{f, g, g} = %b", combine3);
    $finish;
  end
endmodule
quiz iconבחנו את עצמכם

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

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

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