Menu
CoddyTech

القيم الخاصة 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 هي 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 عبر الإنترنت