Special Values X And 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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
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 عبر الإنترنت