القيم الخاصة X و Z
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 17 من 90.
X و Z هما قيمتان خاصتان تعطياننا معلومات حول حالة العتاد أثناء المحاكاة.
X (غير معروف) — لتصحيح الأخطاء
يظهر X في المحاكاة للإشارة إلى وجود مشكلات في تصميمك.
عندما ترى X، فغالباً ما يعني ذلك:
- سجل غير مهيأ — لقد نسيت تعيين قيمة قبل استخدامه
- مشغلات متعددة — هناك شيئان مختلفان يحاولان التحكم في نفس السلك في نفس الوقت
- انتهاك التوقيت — تغيرت الإشارة في وقت خاطئ، مما أدى إلى حالة غير مستقرة
X غير موجود في الأجهزة الحقيقية. إنها أداة محاكاة تخبرك بوجود خطأ ما في تصميمك حتى تتمكن من إصلاحه قبل بناء الشريحة الفعلية.
بدون X، قد ترى أصفاراً أو آحاداً عشوائية ولا تدرك وجود مشكلة. تجعل X الأخطاء البرمجية مرئية.
الأسباب الشائعة:
reg a; // في البداية X (غير معروف)
reg b;
assign b = a; // تصبح b بقيمة X لأن a هي XZ (ممانعة عالية)
Z يمثل حالة ممانعة عالية أو مفصولة.
- تكون الإشارة Z عندما لا يتم قيادتها بواسطة أي شيء
- Z تعني "هذا السلك مفصول"
- تُستخدم للمخازن المؤقتة ثلاثية الحالة (tri-state buffers) والنواقل المشتركة
الأسباب الشائعة:
wire c; // في البداية Z (غير متصل)
assign c = 1'bZ; // تم تعيينه صراحةً إلى Zكتابة X و Z في Verilog
يمكنك تعيين قيم X و Z تماماً مثل 0 و 1:
reg [3:0] data;
data = 4'b10X0; // البت 1 غير معروف (مفهرس بـ 0 من اليمين)
data = 4'b01Z1; // البت 1 ذو مقاومة عالية (high-impedance)
data = 4'bXXXX; // جميع البتات غير معروفة
data = 4'bZZZZ; // جميع البتات ذات مقاومة عاليةX و Z في الأشكال الموجية
في الأشكال الموجية للمحاكاة:
- X يظهر كخط أحمر أو "X"
- Z يظهر كخط في المنتصف أو "Z"
تساعدك هذه في تصحيح أخطاء تصميمك من خلال إظهار الأماكن التي تكون فيها الإشارات غير معروفة أو مفصولة.
ملاحظات هامة
- X ينتشر عبر المنطق (X AND 0 = 0، لكن X AND 1 = X)
- Z يُستخدم عادةً لنواقل الحالة الثلاثية (tri-state buses)
- في عملية التصنيع (synthesis)، قد يتم التعامل مع X و Z بشكل مختلف
- قم دائمًا بتهيئة إشارات reg لتجنب الحالة X في المحاكاة
التحدي
أكمل الكود بكتابة القيم الصحيحة التي تحتوي على X و Z.
ما يجب فعله:
- قم بتعيين
aإلى قيمة مكونة من 4 بتات حيث يكون البت 1 غير معروف (والباقي 0) - قم بتعيين
cبحيث تكون جميع البتات غير معروفة (4 بتات) - قم بتعيين
dبحيث تكون جميع البتات في حالة مقاومة عالية (4 بتات)
ورقة مرجعية
تُعد القيمتان X (غير معروف) و Z (مقاومة عالية) قيم محاكاة خاصة في لغة Verilog.
X — حالة غير معروفة (للمحاكاة فقط، وليست في الأجهزة الحقيقية):
- تبدأ الـ
regغير المهيأة كـ X - تنتج عن: السجلات غير المهيأة، وجود مشغلات متعددة (multiple drivers)، أو انتهاكات التوقيت
- تنتشر عبر المنطق (X AND 1 = X، ولكن X AND 0 = 0)
- تظهر كخط أحمر في الأشكال الموجية (waveforms)
Z — حالة المقاومة العالية / الفصل:
- تبدأ الـ
wireغير الموصلة كـ Z - تُستخدم للمخازن ثلاثية الحالة (tri-state buffers) والنواقل المشتركة (shared buses)
- تظهر كخط أوسط في الأشكال الموجية (waveforms)
كتابة X و Z في Verilog:
reg [3:0] data;
data = 4'b10X0; // Bit 1 is unknown
data = 4'b01Z1; // Bit 1 is high-impedance
data = 4'bXXXX; // All bits unknown
data = 4'bZZZZ; // All bits high-impedance
assign c = 1'bZ; // Explicitly set wire to Zجرّب بنفسك
module xz_challenge;
wire [3:0] a, c, d;
assign a = 4'b______; // Bit 1 is X (others 0)
assign c = 4'b______; // جميع البتات X
assign d = 4'b______; // All bits Z
initial begin
$display("a = %b", a);
$display("c = %b", c);
$display("d = %b", d);
$finish;
end
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة