Menu
Coddy logo textTech

צינור נתונים ואות תקפות

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

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

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

always @(posedge clk) begin
    stage <= data;
    stage_valid <= in_valid;
    result <= stage;
    out_valid <= stage_valid;
end

הנתונים והתקפות שלהם עוברים דרך אותו מספר אוגרים.

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

challenge icon

אתגר

בינוני

ממשו צינור עם שני שלבי אוגרים. בכל חזית שעון שאינה בזמן איפוס, השלב הראשון דוגם את a ואת in_valid. השלב השני משתמש בערכים הקודמים של השלב הראשון: out_valid מקבל את ערך התקפות הקודם שלו, ו-y מקבל את הנתון הקודם שלו בתוספת אחת modulo 256 כאשר הוא תקף, ואחרת אפס. rst סינכרוני מנקה את שני השלבים ואת היציאות. עמודות הפלט: y, out_valid. כל אותות הבקרה והנתונים יציבים לפני כל חזית שעון עולה; התוצאות נצפות לאחריה.

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

נסו בעצמכם

module dut (input clk, input rst, input in_valid, input [7:0] a, output reg [7:0] y, output reg out_valid);
    // החליפו את מציין המקום הזה בתכנון שלכם.
    initial y = 0;
    initial out_valid = 0;
endmodule
quiz iconבחנו את עצמכם

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

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

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