Menu
Coddy logo textTech

העברה קדימה בקריאה ובכתיבה

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

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

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

if(re) begin
    if(we && waddr==raddr) q <= data;
    else q <= mem[raddr];
end

המעקף בוחר במילה הנכנסת רק במקרה של התנגשות כתובות אמיתית.

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

challenge icon

אתגר

בינוני

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

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

נסו בעצמכם

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

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

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

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