פרמטרים
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 11 מתוך 90.
אפשר ליצור עותקים רבים של אותו מודול ולהשתמש בהם במקומות שונים. זה נקרא **מופעים מרובים**. במקום לכתוב את אותו קוד שוב ושוב, כותבים אותו פעם אחת ומשתמשים בו מחדש כמה פעמים שצריך. כל מופע הוא עותק נפרד של אותה חומרה בשבב.
אבל מה אם צריך שכל עותק יהיה שונה? לדוגמה, מונה אחד של 8 סיביות, מונה אחד של 16 סיביות ומונה אחד של 32 סיביות. בלי פרמטרים, יהיה עליך לכתוב שלושה מודולים נפרדים.
פרמטרים פותרים את הבעיה הזאת.
פרמטר הוא ערך קבוע שאפשר להגדיר כשיוצרים מופע. הוא מאפשר להגדיר כל עותק של המודול באופן שונה.
הצהרת פרמטרים
module counter #(
parameter WIDTH = 8
)(
input clk,
output reg [WIDTH-1:0] count
);
always @(posedge clk) count <= count + 1;
endmoduleהפקודה #(parameter WIDTH = 8) מגדירה פרמטר בשם WIDTH עם ערך ברירת מחדל של 8.
בעת הצהרה על פרמטרים, משתמשים בסמל # מיד אחרי שם המודול ולפני רשימת הפורטים. הסמל # מציין ל-Verilog שמה שבא אחריו הוא רשימת פרמטרים שמגדירים את תצורת המודול. אם אין למודול שלך פרמטרים, פשוט משמיטים את # לחלוטין.
שימוש בפרמטרים
אפשר להשתמש בפרמטרים בכל מקום שבו נדרש קבוע:
reg [WIDTH-1:0] data; // גודל הווקטור
count <= count + 1; // פועל עם כל רוחב
assign out = data[WIDTH-1]; // מיקום ה-MSBדריסת פרמטרים
כשאתה משתמש במודול, אתה יכול לשנות את ערך הפרמטר:
// רוחב ברירת המחדל (8 ביטים)
counter u1 (.clk(clk), .count(count1));
// דריסה ל־16 ביטים
counter #(.WIDTH(16)) u2 (.clk(clk), .count(count2));פרמטרים מרובים
אפשר להגדיר כמה פרמטרים:
module fifo #(
parameter DEPTH = 16,
parameter WIDTH = 8
)(
input clk, wr_en, rd_en,
input [WIDTH-1:0] data_in,
output [WIDTH-1:0] data_out
);
reg [WIDTH-1:0] memory [0:DEPTH-1];
endmoduleLocalparam
localparam דומה, אבל אי אפשר לדרוס אותו מבחוץ:
module example;
localparam STATE_IDLE = 2'b00;
localparam STATE_RUN = 2'b01;
localparam STATE_STOP = 2'b10;
// These values are fixed inside this module
endmoduleהשתמשו ב־localparam עבור קבועים שלא אמורים להשתנות.
אתגר
הוסף פרמטר בשם WIDTH עם ערך ברירת מחדל של 4.
מה לעשות:
- הוסף פרמטר בשם
WIDTH - הגדר את ערך ברירת המחדל שלו ל-
4 - הפרמטר נכנס בתוך
#( )אחרי שם המודול
נסו בעצמכם
module counter #(
// הוסיפו כאן את הפרמטר WIDTH עם ערך ברירת מחדל 4
)(
input clk,
input reset,
output reg [WIDTH-1:0] count
);
endmoduleהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין