Menu
Coddy logo textTech

יציאות קריאה עם רגיסטרים

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

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

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

always @(posedge clk) begin
    if(we) mem[waddr] <= data;
    if(rst) q <= 0;
    else if(re) q <= mem[raddr];
end

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

השהיית קריאת מסמך, התנהגות כשקריאה מושבתת ואיזה איפוס מצב אכן מנקה.

challenge icon

אתגר

בינוני

ממשו זיכרון בן ארבע מילים ברוחב 8 סיביות עם כתיבה סינכרונית וקריאה רשומה q. we כותב בקצוות העולים. rst מאפס באופן סינכרוני רק את q; אחרת re טוען ל-q את הערך מ-mem[raddr] שלפני הקצה; כאשר re=0, הערך של q נשמר. הזיכרון אינו מתאפס, והכתיבות אינן תלויות ב-rst. אם הקריאה והכתיבה משתמשות באותה כתובת בקצה אחד, q מקבל את המילה הישנה. הבדיקות מאתחלות מילים לפני קריאות מאופשרות. עמודות הפלט: 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 אונליין