Concatenation Operator
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 27 من 90.
يجمع عامل التسلسل { } بين إشارات أو ثوابت أو تعبيرات متعددة في متجه واحد أكبر. ويُستخدم كلما احتجت إلى ضم البتات معًا لتكوين قيم أعرض.
ما القيم التي تعمل مع التسلسل
يمكنك إجراء تسلسل لـ:
- الأسلاك والسجلات: أي إشارة
- الثوابت: أرقام مثل
4'b1010أو8'hFF
- التعبيرات: نتائج العمليات مثل
a + b - التكرارات: تكرار قيمة عدة مرات
يجب أن تكون جميع القيم المضمومة ذات عروض ثابتة ومعروفة.
Basic Syntax: {value1, value2, value3, ...} عرض النتيجة هو مجموع عروض جميع القيم الفردية.
أمثلة
دمج قيمتين من 4 بت في 8 بت:
reg [3:0] high, low;
reg [7:0] word;
word = {high, low}; // high يصبح الـ 4 بتات العلوية، low يصبح الـ 4 السفليةCombine مع constants:
data = {4'b1010, 4'b0000}; // 8'b10100000دمج أكثر من اثنين:
full = {a, b, c, d}; // جميع العروض تتجمعالتكرار
يمكنك تكرار قيمة عدة مرات باستخدام {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} - يجب أن تكون لجميع الأجزاء عروض ثابتة (من دون أرقام غير محددة الحجم)
- يمكن استخدام الربط على جانبي إسناد القيم، الأيسر والأيمن
التحدي
اكتب تعبيرات التسلسل الصحيحة لكل مهمة.
ما يجب فعله:
- Combine بين
aوbفي result بحجم 8-bit وخزّنه فيcombine1 - Combine بين
cوdوeفي result بحجم 12-bit وخزّنه فيcombine2 - Combine بين
fونسختين منgفي result بحجم 12-bit وخزّنه في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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logicتدرّب بنفسك: مترجم Verilog عبر الإنترنت