القيم الخاصة X و Z
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 17 من 90.
X وZ قيمتان خاصتان تمنحاننا معلومات عن حالة العتاد أثناء المحاكاة.
X (غير معروف)، لتصحيح الأخطاء
تظهر X في المحاكاة للإشارة إلى وجود مشكلات في تصميمك.
عندما ترى X، فغالبًا ما يعني ذلك:
- مسجل غير مهيأ: نسيت تعيين قيمة له قبل استخدامه
- مشغلات متعددة: هناك شيئان مختلفان يحاولان التحكم في السلك نفسه في الوقت نفسه
- انتهاك التوقيت: تغيّرت إشارة في وقت غير مناسب، مما أدى إلى إنشاء حالة غير مستقرة
لا يوجد X في العتاد الحقيقي. إنها أداة محاكاة تخبرك بوجود خطأ ما في تصميمك حتى تتمكن من إصلاحه قبل بناء الشريحة الفعلية.
من دون X، قد ترى أصفارًا أو آحادًا عشوائية ولا تدرك أن هناك مشكلة. يجعل X الأخطاء البرمجية مرئية.
الأسباب الشائعة:
reg a; // في البداية X (غير معروف)
wire 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 عبر الإنترنت