Menu
Coddy logo textTech

פרמטרים

חלק מהיחידה יסודות במסלול ה-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), .reset(reset), .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];
endmodule

פרמטר מקומי

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 עבור קבועים שלא אמורים להשתנות.

challenge icon

אתגר

הוסף פרמטר בשם WIDTH עם ערך ברירת מחדל 4.

מה לעשות:

  1. הוסף פרמטר בשם WIDTH
  2. הגדר את ערך ברירת המחדל שלו ל־4
  3. הפרמטר נכנס בתוך #( ) אחרי שם המודול

נסו בעצמכם

module counter #(
  // הוסף כאן את הפרמטר WIDTH עם ערך ברירת מחדל 4
  
)(
  input clk,
  input reset,
  output reg [WIDTH-1:0] count
);

endmodule
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה יסודות

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