Menu
CoddyTech

הערכים המיוחדים X ו־Z

חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 17 מתוך 90.

X ו-Z הם ערכים מיוחדים שמספקים לנו מידע על מצב החומרה במהלך סימולציה.

X (לא ידוע), לצורכי איתור שגיאות

X מופיע בסימולציה כדי לציין בעיות בתכנון שלך.

כשאתה רואה X, לרוב המשמעות היא:

  • אוגר שלא אותחל: שכחת להגדיר ערך לפני השימוש בו
  • כמה התקנים שולטים באותו חוט: שני דברים שונים מנסים לשלוט באותו חוט בו-זמנית
  • הפרת תזמון: אות השתנה בזמן הלא נכון ויצר מצב לא יציב

X אינו קיים בחומרה אמיתית. זהו כלי סימולציה שמודיע לך שמשהו אינו תקין בתכנון שלך, כדי שתוכל לתקן אותו לפני בניית השבב בפועל.

בלי X, ייתכן שתראה 0 או 1 אקראיים ולא תבין שיש בעיה. 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 אונליין