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

القيم الخاصة 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 هي X

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

Z يمثل حالة ممانعة عالية أو مفصولة.

  • تكون الإشارة Z عندما لا يتم قيادتها بواسطة أي شيء
  • Z تعني "هذا السلك مفصول"
  • تُستخدم للمخازن المؤقتة ثلاثية الحالة (tri-state buffers) والنواقل المشتركة

الأسباب الشائعة:

wire c;          // في البداية Z (غير متصل)
assign c = 1'bZ; // تم تعيينه صراحةً إلى Z

كتابة X و Z في Verilog

يمكنك تعيين قيم X و Z تماماً مثل 0 و 1:

reg [3:0] data;

data = 4'b10X0;    // البت 1 غير معروف (مفهرس بـ 0 من اليمين)
data = 4'b01Z1;    // البت 1 ذو مقاومة عالية (high-impedance)
data = 4'bXXXX;    // جميع البتات غير معروفة
data = 4'bZZZZ;    // جميع البتات ذات مقاومة عالية

X و Z في الأشكال الموجية

في الأشكال الموجية للمحاكاة:

  • X يظهر كخط أحمر أو "X"
  • Z يظهر كخط في المنتصف أو "Z"

تساعدك هذه في تصحيح أخطاء تصميمك من خلال إظهار الأماكن التي تكون فيها الإشارات غير معروفة أو مفصولة.

ملاحظات هامة

  • X ينتشر عبر المنطق (X AND 0 = 0، لكن X AND 1 = X)
  • Z يُستخدم عادةً لنواقل الحالة الثلاثية (tri-state buses)
  • في عملية التصنيع (synthesis)، قد يتم التعامل مع X و Z بشكل مختلف
  • قم دائمًا بتهيئة إشارات reg لتجنب الحالة X في المحاكاة
challenge icon

التحدي

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

ما يجب فعله:

  1. قم بتعيين a إلى قيمة مكونة من 4 بتات حيث يكون البت 1 غير معروف (والباقي 0)
  2. قم بتعيين c بحيث تكون جميع البتات غير معروفة (4 بتات)
  3. قم بتعيين d بحيث تكون جميع البتات في حالة مقاومة عالية (4 بتات)

ورقة مرجعية

تُعد القيمتان X (غير معروف) و Z (مقاومة عالية) قيم محاكاة خاصة في لغة Verilog.

X — حالة غير معروفة (للمحاكاة فقط، وليست في الأجهزة الحقيقية):

  • تبدأ الـ reg غير المهيأة كـ X
  • تنتج عن: السجلات غير المهيأة، وجود مشغلات متعددة (multiple drivers)، أو انتهاكات التوقيت
  • تنتشر عبر المنطق (X AND 1 = X، ولكن X AND 0 = 0)
  • تظهر كخط أحمر في الأشكال الموجية (waveforms)

Z — حالة المقاومة العالية / الفصل:

  • تبدأ الـ wire غير الموصلة كـ Z
  • تُستخدم للمخازن ثلاثية الحالة (tri-state buffers) والنواقل المشتركة (shared buses)
  • تظهر كخط أوسط في الأشكال الموجية (waveforms)

كتابة X و Z في Verilog:

reg [3:0] data;

data = 4'b10X0;    // Bit 1 is unknown
data = 4'b01Z1;    // Bit 1 is high-impedance
data = 4'bXXXX;    // All bits unknown
data = 4'bZZZZ;    // All bits high-impedance

assign c = 1'bZ;   // Explicitly set wire to Z

جرّب بنفسك

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اختبر نفسك

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

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