Menu
CoddyTech

פרמטרים

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

Localparam

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 אונליין