معامل الدمج
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 27 من 90.
يجمع عامل التجميع (concatenation operator) { } بين العديد من الإشارات أو الثوابت (constants) أو التعبيرات في موجه (vector) واحد أكبر. ويُستخدم كلما احتجت إلى ربط البتات (bits) معًا لتشكيل قيم أوسع.
ما هي القيم التي تعمل مع التجميع (Concatenation)
يمكنك تجميع:
- الأسلاك (Wires) والمسجلات (regs) — أي إشارة
- الثوابت (Constants) — أرقام مثل
4'b1010أو8'hFF
- التعبيرات (Expressions) — نتائج العمليات مثل
a + b - التكرارات (Replications) — تكرار قيمة عدة مرات
يجب أن تكون لجميع القيم المتسلسلة (concatenated) أطوال ثابتة ومعروفة.
الصياغة الأساسية: {value1, value2, value3, ...} عرض النتيجة هو مجموع كافة الأطوال الفردية.
أمثلة
دمج قيمتين بـ 4-bit إلى 8 bits:
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}; // جميع العروض تضافReplication
يمكنك تكرار قيمة عدة مرات باستخدام {n{value}}:
repeated = {4{4'b1010}}; // 16'b1010101010101010 (repeat 4 times)هذا مفيد للتمديد مع الإشارة (sign extension):
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} - يجب أن تكون لجميع الأجزاء أحجام ثابتة (لا تُستخدم أرقام غير محددة الحجم)
- يمكن استخدام الدمج (Concatenation) على كلا الجانبين الأيسر والأيمن لعمليات التعيين
التحدي
اكتب تعبيرات التجميع (concatenation) الصحيحة لكل مهمة.
ما يجب فعله:
- قم بدمج
aوbفي نتيجة بحجم 8-bitsوخزنها فيcombine1 - قم بدمج
cوdوeفي نتيجة بحجم 12-bitsوخزنها فيcombine2 - قم بدمج
fونسختين منgفي نتيجة بحجم 12-bitsوخزنها في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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة