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

القيم الخاصة X و Z

جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 17 من 90.

تُعد القيمتان X و Z قيمًا خاصة تمنحنا معلومات حول حالة العتاد (hardware state) أثناء المحاكاة.

X (Unknown) — للتصحيح (Debugging)

تظهر القيمة X في المحاكاة للإشارة إلى وجود مشكلات في تصميمك.

عندما ترى X، أحياناً ما تعني:

  • مسجل غير مهيأ (Uninitialized register) — نسيت تعيين قيمة قبل استخدامه
  • مشغلات متعددة (Multiple drivers) — تحاول جهتان مختلفان التحكم في السلك نفسه في الوقت نفسه
  • انتهاك التوقيت (Timing violation) — تغيرت الإشارة في الوقت الخطأ، مما أدى إلى إنشاء حالة غير مستقرة

لا وجود للحالة X في العتاد الفعلي (hardware). بل هي أداة محاكاة تخبرك بوجود خطأ ما في تصميمك حتى تتمكن من إصلاحه قبل تصنيع الشريحة الفعالية.

بدون X، قد ترى قيم 0 أو 1 عشوائية دون أن تدرك وجود مشكلة. X يجعل الأخطاء البرمجية مرئية.

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

reg a;           // في البداية X (غير معروف)
reg b;
assign b = a;    // b يصبح X لأن a هو X

Z (High Impedance)

يمثل Z حالة معاوقة عالية (high-impedance) أو حالة غير متصلة.

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

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

wire c;          // في البداية Z (غير متصل)
assign c = 1'bZ; // Explicitly set to Z

كتابة X و Z في Verilog

يمكنك assign قيم 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"

تساعدك هذه على استكشاف أخطاء تصميمك وإصلاحها عن طريق إظهار الموضع الذي تكون فيه الإشارات غير معروفة (`unknown`) أو منفصلة.

ملاحظات مهمة

  • 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 أسنان (4-bit) حيث يكون Bit 1 عبارة عن unknownothers تكون 0)
  2. قم بضبط c لتكون كل الـ bits عبارة عن unknown (4 bits)
  3. قم بضبط d لتكون كل الـ bits عبارة عن high-impedance (4 bits)

جرّب بنفسك

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

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

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