القيم الخاصة 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 «أن هذا السلك غير متصل»
- تُستخدم للمخازن ثلاثية الحالات والنواقل المشتركة
الأسباب الشائعة:
wire c; // في البداية Z (غير متصل)
assign c = 1'bZ; // Explicitly set to Zكتابة X و Z في Verilog
يمكنك إسناد قيم X و Z تمامًا كما تفعل مع 0 و 1:
reg [3:0] data;
data = 4'b10X0; // Bit 1 is unknown (0-indexed from the right)
data = 4'b01Z1; // البت 1 ذو ممانعة عالية
data = 4'bXXXX; // All bits unknown
data = 4'bZZZZ; // جميع البتات ذات ممانعة عاليةX وZ في أشكال الموجات
في أشكال الموجات أثناء المحاكاة:
- تظهر X كخط أحمر أو "X"
- تظهر Z كخط في المنتصف أو "Z"
تساعدك هذه في تصحيح أخطاء تصميمك من خلال إظهار أماكن كون الإشارات غير معروفة أو غير متصلة.
ملاحظات مهمة
- ينتشر X عبر المنطق (X AND 0 = 0، لكن X AND 1 = X)
- يُستخدم Z عادةً مع الحافلات ثلاثية الحالة
- في عملية التركيب، قد تتم معاملة X و Z بشكل مختلف
- قم دائمًا بتهيئة إشارات reg لتجنب ظهور X في المحاكاة
التحدي
أكمل الكود بكتابة القيم الصحيحة التي تحتوي على X و Z.
ما يجب فعله:
- عيّن
aإلى قيمة من 4 بتات بحيث يكون البت 1 غير معروف (وتكون البتات الأخرى 0) - عيّن
cبحيث تكون جميع البتات غير معروفة (4 بتات) - عيّن
dبحيث تكون جميع البتات عالية الممانعة (4 بتات)
جرّب بنفسك
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العوامل الجزء 1
العوامل الحسابيةعامل باقي القسمةعوامل المقارنةمراجعة - الرياضيات البسيطةالعوامل على مستوى البتات7التعيين والبوابات
التعيين المستمرالتعيين باستخدام العواملالعناصر الأساسية المدمجة للبواباتبوابات AND وOR وNOTبوابات XOR وXNORمراجعة - دائرة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الربطالمعامل الشرطيمراجعة - تحدي المعاملات11الحلقات التكرارية
حلقة Forحلقة Whileحلقة التكرارحلقة لا نهائيةتعليمة التعطيلمراجعة - أنماط الحلقات التكرارية3نظام الأعداد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ الإدخال والإخراج ثنائية الاتجاهإنشاء مثيل للوحدةربط المنافذ حسب الاسمربط المنافذ حسب الترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة الحساسيةإسناد حاجزإسناد غير حاجزمراجعة - Always مقابل Initial15متحكّم إشارات المرور
تعريف الحالاتمنطق آلة الحالاتتدرّب بنفسك: مترجم Verilog عبر الإنترنت