Menu
Coddy logo textTech

הערכים המיוחדים 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 פירושו "החוט הזה מנותק"
  • משמש למאגרי תלת־מצב ולאפיקים משותפים

סיבות נפוצות:

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 אונליין