לולאות Generate
חלק מהיחידה תכנון RTL ואימות במסלול ה-Verilog של Coddy. שיעור 13 מתוך 38.
לולאת generate-for יוצרת חומרה חוזרת במהלך שלב ההרחבה. אינדקס ה-genvar שלה אינו אוגר שמשתנה בזמן ריצה. בלוקי generate בעלי שם מספקים שמות היררכיים צפויים למופעים או להשמות שנוצרו. גבולות הלולאה חייבים להיות קבועים בזמן ההרחבה.
קטע רלוונטי; ההצהרות והחיבורים שמסביב מסופקים באתגר.
genvar i;
generate
for(i=0;i<WIDTH;i=i+1) begin: bitcell
assign y[i] = a[i] ^ b[i];
end
endgenerateכל איטרציה יוצרת פעולת ביט נפרדת, במקום לצרוך מחזור שעון.
השתמשו ב־genvar עם גבולות קבועים כדי לתאר מבנה חוזר בזמן ההרחבה.
אתגר
בינוניהשתמשו בלולאת generate-for בעלת שם, עם genvar i, כדי ליצור השמת רציפה אחת לכל סיבית, כך שייווצר y[i] = a[i] XOR b[i]. WIDTH חיובי. סביבת הבדיקה הנעולה יוצרת מופעים עם ערכי WIDTH של 1, 4 ו-8, ומשתמשת בסיביות הנמוכות של a ו-b עבור מופעים צרים יותר. עמודות הפלט הן y1, y4 ו-y8 בעשרוני.
השלימו את design.v ושמרו על שמות המודולים והיציאות שלו. testbench.v הנעול מספק שינויי קלט ומדפיס את הפלטים לאחר התייצבותם. הוא בוחר תרחיש באמצעות ארגומנט סימולטור כגון +CASE=1; אין צורך בקלט סטנדרטי. אל תוסיפו להדפסות, השהיות או סיום סימולציה לתכנון. הפלט הצפוי הוא שורה אחת של ערכים עשרוניים לכל תצפית, המופרדים ברווח אחד ומסתיימים בשורה חדשה.
נסו בעצמכם
module dut #(parameter WIDTH=4) (input [WIDTH-1:0] a,b, output [WIDTH-1:0] y);
// ממשו את המעגל עם הפרמטרים.
assign y = 0;
endmoduleהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנון RTL ואימות
1RTL קומבינטורי אמין
ערכי ברירת מחדל מונעים נעילותמקודדי עדיפותאימות One-Hotפענוח Case בטוחסיכום - נתב בקשות2רוחבי מילה ואריתמטיקה עם סימן
שימור ביטי נשאהשוואות עם סימןהזזות ימינה אריתמטיותגלישה ורוויהסיכום - הפרש עם סימן3RTL לשימוש חוזר
פונקציות קומבינטוריותפרמטרים בטוחים מבחינת רוחבלולאות GenerateGenerate מותנהסיכום - מסכת ביטים לשימוש חוזר6סביבות בדיקה עם בדיקה עצמית
בדיקות בארבעה מצביםמשימות בדיקה לשימוש חוזרמודלי ייחוס וניקודכיסוי מקרי קצה ובקרהסיכום - בדיקת מחברתרגלו בעצמכם: קומפיילר Verilog אונליין