Menu
Coddy logo textTech

אחסון במערך רגיסטרים

חלק מהיחידה תכנון RTL ואימות במסלול ה-Verilog של Coddy. שיעור 22 מתוך 38.

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

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

reg [7:0] mem [0:3];
always @(posedge clk)
    if(we) mem[waddr] <= data;
assign q = mem[raddr];

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

הגדירו במפורש את ההפעלה לכתיבה ואת תזמון הקריאה; אל תסתמכו על תוכן זיכרון initial שלא צוין.

challenge icon

אתגר

בינוני

ממשו ארבע מילים של 8 סיביות. בקצה עולה, we כותב נתונים אל mem[waddr]. ‏q הוא קריאה קומבינטורית אסינכרונית של mem[raddr]. לזיכרון אין איפוס או תוכן initial; ספסל הבדיקה כותב לכל כתובת שנצפתה לפני שהוא קורא ממנה. התצפיות מתבצעות אחרי הקצה, לכן כתיבה וקריאה באותה כתובת נראית ב־q. עמודות הפלט: q. כל אותות הבקרה והנתונים יציבים לפני כל חזית שעון עולה; התוצאות נצפות אחריה.

השלימו את design.v ושמרו על שמות המודולים והפורטות שלו. הקובץ הנעול testbench.v מספק שינויי קלט ומדפיס את הפלטים לאחר התייצבותם. הוא בוחר תרחיש באמצעות ארגומנט של הסימולטור, כגון +CASE=1; אין צורך בקלט סטנדרטי. אל תוסיפו הדפסה, השהיות או סיום סימולציה לתכן. הפלט הצפוי הוא שורה אחת של ערכים עשרוניים לכל תצפית, מופרדים ברווח אחד ומסתיימים בשורה חדשה.

נסו בעצמכם

module dut (input clk, input we, input [1:0] waddr, input [7:0] data, input [1:0] raddr, output [7:0] q);
    // החליפו את מציין המקום הזה בתכנון שלכם.
    assign q = 0;
endmodule
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנון RTL ואימות

תרגלו בעצמכם: קומפיילר Verilog אונליין