אופרטור שרשור
חלק מהיחידה יסודות במסלול ה-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} - לכל החלקים חייב להיות רוחב קבוע (ללא מספרים שרוחבם אינו מוגדר)
- אפשר להשתמש בשרשור הן בצד שמאל והן בצד ימין של השמות
אתגר
כתבו את ביטויי השרשור הנכונים עבור כל משימה.
מה לעשות:
- שרשרו את
aואתbלתוצאה של 8 סיביות ושמרו אותה ב-combine1 - שרשרו את
c, אתdואתeלתוצאה של 12 סיביות ושמרו אותה ב-combine2 - שרשרו את
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השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין