logo

הצהרת מקרה של Verilog

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

ייתכן שמבנה ה-if-else לא יהיה ישים אם יש לבחון תנאים רבים ביחידת המדידה ותתמזג למקודד עדיפות במקום למכשיר.

ב Verilog , הצהרת מקרה כוללת את כל הקוד בין מילות המפתח של Verilog, מקרה ('casez', 'casex') ו-Endcase. הצהרת מקרה יכולה להיות מבנה בחירה אחד מני רבים שהוא בערך כמו הצהרת Associate בסיעוד אם-אחר-אם.

תחביר

הצהרת מקרה של Verilog מתחילה במילת המפתח מקרה ומסתיימת במילת המפתח של סוף.

הביטוי בתוך יחידת שטח בסוגריים שמטרתו להיות מוערכת באופן ספציפי פעם אחת ומושוואת לרשימת החלופות בסדר הכתיבה.

וההצהרות שהבחירה תואמת את יחידת הביטוי הנתונה של מדידה מת. גוש של הצהרות מרובות צריך להיות ממוין ולהיות בתוך ההתחלה והסוף.

 case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase 

אם אף אחד מהדברים לא תואם את הביטוי הנתון, הצהרות בתוך יחידת המדידה של פריט ברירת המחדל מתות. הצהרת ברירת המחדל אינה חובה, ויש רק הצהרת ברירת מחדל אחת לאורך הצהרת מקרה. הצהרות מקרה מקוננות.

הביצוע תצא מבלוק המקרה בעוד שלא תעשה דבר אחד אם אף אחד מהפריטים לא תואם לביטוי, ולא ניתנת הצהרת ברירת מחדל.

דוגמא

בעוד לולאה java

מודול האופנה הבא כולל 2-bit opt ​​for אות לנתב אחד בין שלושת כניסות 3-bit השונות לשלט המצוין כ-out.

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

 module my_mux (input [2:0] a, b, c, // three 3-bit inputs [1:0]sel, // 2-bit opt for signal to choose on from a, b, c output reg [2:0] out); // Output 3-bit signal // invariably block is dead whenever a, b, c or sel changes in value invariably @ (a, b, c, sel) begin case(sel) 2'b00 : out = a; // If sel=0, output can be a 2'b01 : out = b; // If sel=1, output is b 2'b10 : out = c; // If sel=2, output is c default : out = 0; // If sel is something, out is commonly zero endcase end endmodule 

כותרת הצהרת מקרה

כותרת הצהרת מקרה מורכבת ממילת המפתח case ('casez', 'casex') ואחריה ביטוי מקרה, בדרך כלל הכל בשורה אחת של קוד.

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

פריט מקרה

פריט המקרה הוא שהביטוי הביט, הווקטור או ה-Verilog הרגיל להשוות מול ביטוי המקרה.

בניגוד לשפות תכנות שונות ברמה גבוהה כמו ' ג ', הצהרת המקרה של Verilog כוללת הצהרות הפסקות מרומזות.

פריט המקרה הראשון שמתאים לביטוי מקרה זה גורם להצהרת פריט המקרה המקבילה להיות מתה, ולכן כל שאר יחידת המידה של המקרה שדילגת עליה עוברת את הצהרת המקרה.

הצהרת פריט מקרה

הצהרת פריט מקרה היא אחת או הרבה הצהרות Verilog מתות אם פריט המקרה תואם לביטוי מקרה זה. דברים לא כמו VHDL, מקרה Verilog יכולים להיות ביטויים בעצמם.

כדי לשנות את הניתוח של מסמך קוד Verilog, הצהרות פריטי מקרה של Verilog צריכות להיות מוקפות בין מילות המפתח 'התחל' ו 'סוֹף' אם יותר מהצהרה אחת אמורה להיות מתה עבור פריט מקרה ספציפי.

קאז

ב-Verilog, יש הצהרת casez, וריאציה של הצהרת מקרה המאפשרת 'z' ו-'?' ערכים שיש להתייחס אליהם לאורך כל השוואת המקרים כערכים 'לא אכפת להם'.

הצהרת javascript if

'Z' ו'?' יחידת מדידה המטופלת כאל לא אכפת להם אם הם נמצאים בתוך ביטוי המארז או אם הם בתוך פריט המארז.

כשכותבים בסוד הצהרת מקרה עם 'לא אכפת', השתמשו בהצהרת casez והשתמשו ב-'?' תווים במקום תווים 'z' בתוך המארז דברים למטרת 'לא אכפת' ביטים.

Casex

ב-Verilog, יש משפט casex, וריאציה של הצהרת מקרה המאפשרת להתייחס לערכי 'z', '?' ו-'x' לאורך כל ההשוואה כערכים 'לא אכפת'.

'x', 'z' ו-'?' יחידת מדידה המטופלת כאל לא אכפת להם אם הם נמצאים בתוך ביטוי המארז או אם הם בתוך פריט המארז.

הצהרת מקרה מלאה

הצהרת מקרה מלא יכולה להיות הצהרת מקרה בפנים שכל התבניות הבינאריות הניתנות לביטוי מקרה מותאמות לפריט מקרה או ברירת מחדל של מקרה.

אם הצהרת מקרה אינה מאמצת ברירת מחדל של מקרה, ואפשר לחפש ביטוי מקרה בינארי שאינו תואם לאף אחד מדברי המקרה המודפסים, הצהרת המקרה אינה מלאה.

הצהרת מקרה מלאה יכולה להיות הצהרת מקרה בפנים שכל שילוב בינארי, לא בינארי ותערובת של תבניות בינאריות ולא בינאריות ניתנות למסגר כפריט מקרה בתוך הצהרת מקרה.

Verilog לא רוצה שהצהרות מקרה יהיו מלאות בסינתזה או בצפיפות גבוהה של ליפופרוטאינים, אבל הצהרות מקרה של Verilog מבוצעות על ידי הוספת ברירת מחדל של מקרה. VHDL רוצה שהצהרות המקרה יהיו מלאות בהדמיית ליפופרוטאינים בצפיפות גבוהה, מה שבדרך כלל מעוניין בסעיף 'אחרים' של Associate in Nursing.

הצהרת מקרה מקביל

הצהרת מקרה מקבילה יכולה להיות הצהרת מקרה בפנים שניתן להתאים רק ביטוי מקרה לפריט מקרה אחד בלבד.

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

סכמטי חומרה

קוד ה-RTL מפותח כדי לקבל סכמטי חומרה המייצג מרבבי 4 עד 1.

הצהרת מקרה של Verilog

לאחר ביצוע התכנון לעיל, הפלט הוא אפס כאשר sel הוא 3 ומתאים לכניסות המוקצות עבור ערכים אחרים.

 ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0b11 out=0x0 [10] a=0x5 b=0x5 c=0x5 sel=0b10 out=0x5 [20] a=0x1 b=0x5 c=0x6 sel=0b01 out=0x5 [30] a=0x5 b=0x4 c=0x1 sel=0b10 out=0x1 [40] a=0x5 b=0x2 c=0x5 sel=0b11 out=0x0 ncsim: *W,RNQUIE: Simulation is complete. 

בהצהרת מקרה, ההשוואה מצליחה רק כאשר כל סיביות בביטוי תואמת לאחת מהחלופות כולל 0, 1, x ו-z. בדוגמה שלמעלה, אם כל אחד מהסיביות ב-sel הוא x או z, ה- בְּרִירַת מֶחדָל ההצהרה תבוצע מכיוון שאף אחת מהחלופות האחרות לא התאימה. במקרה כזה, הפלט יהיה כולו אפסים.

 ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0bxx out=0x0 [10] a=0x3 b=0x5 c=0x5 sel=0bzx out=0x0 [20] a=0x5 b=0x2 c=0x1 sel=0bxx out=0x0 [30] a=0x5 b=0x6 c=0x5 sel=0bzx out=0x0 [40] a=0x5 b=0x4 c=0x1 sel=0bxz out=0x0 [50] a=0x6 b=0x5 c=0x2 sel=0bxz out=0x0 [60] a=0x5 b=0x7 c=0x2 sel=0bzx out=0x0 [70] a=0x7 b=0x2 c=0x6 sel=0bzz out=0x0 [80] a=0x0 b=0x5 c=0x4 sel=0bxx out=0x0 [90] a=0x5 b=0x5 c=0x5 sel=0bxz out=0x0 ncsim: *W,RNQUIE: Simulation is complete. 

אם להצהרת המקרה בעיצוב יש x ו-z בחלופות פריט המקרה, התוצאות יהיו שונות.

 module mux (input [2:0] a, b, c, output reg [2:0] out); // Case items have x and z, and sel has to match the exact value for // output to be assigned with the corresponding input always @ (a, b, c, sel) begin case(sel) 2'bxz: out = a; 2'bzx: out = b; 2'bxx: out = c; default: out = 0; endcase end endmodule 

הבדל בין המקרה לבין אם-אחר

הצהרת המקרה שונה מאם-אחר-אם בשתי דרכים, כגון:

  • ביטויים שניתנו ב-an אחרת בלוק הם כלליים יותר, בעוד שבגוש מקרה, ביטוי בודד מותאם למספר פריטים.
  • המקרה יספק תוצאה סופית כאשר יש ערכי X ו-Z בביטוי.