פענוח Case בטוח
חלק מהיחידה תכנון RTL ואימות במסלול ה-Verilog של Coddy. שיעור 4 מתוך 38.
השתמשו במשפט case רגיל עבור קודי בקרה מדויקים. ספקו התנהגות default עבור קודים שאינם נתמכים והקצו ערכים לכל הפלטים באמצעות assign. פענוח באמצעות תווים כלליים עם casex עלול להסתיר סיביות בקרה לא ידועות בסימולציה, ולכן אינו מתאים כשחשוב שהערכים הלא ידועים יישארו גלויים במהלך ניפוי שגיאות.
קטע רלוונטי; ההצהרות והחיבורים שמסביב מסופקים באתגר.
always @* begin
y = 0;
invalid = 0;
case (op)
0: y = a & b;
1: y = a | b;
default: invalid = 1;
endcase
endקודים שאינם נתמכים יוצרים סטטוס מפורש במקום לשמר פלט קודם.
הגדירו קודי בקרה שאינם נתמכים במפורש והימנעו מהסתרת קודי בקרה לא מוכרים באמצעות casex.
אתגר
בינוניממשו יחידה לוגית של 8 סיביות: op 0 מחשב a AND b, op 1 מחשב a OR b, op 2 מחשב a XOR b, ו־op 3 מחזיר אפס כאשר invalid מוגדר ל־one. invalid הוא אפס עבור פעולות נתמכות. עמודות הפלט: y, invalid. כל ערכי הגירוי הם ערכים בינאריים ידועים.
השלימו את design.v ושמרו על שמות המודולים והיציאות שלו. testbench.v הנעול מספק שינויים בקלט ומדפיס את הפלטים לאחר שהתייצבו. הוא בוחר תרחיש באמצעות ארגומנט של סימולטור, כגון +CASE=1; אין צורך בקלט סטנדרטי. אל תוסיפו הדפסה, השהיות או סיום סימולציה לתכנון. הפלט הצפוי הוא שורה אחת של ערכים עשרוניים לכל תצפית, מופרדים ברווח אחד ומסתיימים בשורה חדשה.
נסו בעצמכם
module dut (input [1:0] op, input [7:0] a, input [7:0] b, output reg [7:0] y, output reg invalid);
// החליפו את מציין המקום הזה בתכנון שלכם.
initial y = 0;
initial invalid = 0;
endmoduleהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנון RTL ואימות
1RTL קומבינטורי אמין
ערכי ברירת מחדל מונעים נעילותמקודדי עדיפותאימות One-Hotפענוח Case בטוחסיכום - נתב בקשות2רוחבי מילה ואריתמטיקה עם סימן
שימור ביטי נשאהשוואות עם סימןהזזות ימינה אריתמטיותגלישה ורוויהסיכום - הפרש עם סימןתרגלו בעצמכם: קומפיילר Verilog אונליין