Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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 هو X

Z (ممانعة عالية)

تمثل 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 في المحاكاة
challenge icon

التحدي

أكمل الكود بكتابة القيم الصحيحة التي تحتوي على X و Z.

ما يجب فعله:

  1. عيّن a إلى قيمة من 4 بتات بحيث يكون البت 1 غير معروف (وتكون البتات الأخرى 0)
  2. عيّن c بحيث تكون جميع البتات غير معروفة (4 بتات)
  3. عيّن 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
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: مترجم Verilog عبر الإنترنت