logo

פרמטרים של Verilog

ב-Verilog, פרמטרים הם קבועים ואינם שייכים לשום סוג נתונים אחר כגון אוגר או סוגי נתונים נטו.

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

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

ב Verilog , קיימות שתי שיטות לעקוף ערך פרמטר של מודול במהלך מופע מודול.

  1. על ידי שימוש במילת המפתח defparam.
  2. והקצאת ערך פרמטר של מופע מודול.

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

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

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

קחו בחשבון, ניתן להגדיר פרמטר של מוסיף 4 סיביות כדי לקבל ערך עבור מספר הסיביות, וניתן להעביר ערכי פרמטרים חדשים במהלך מופע המודול. אז, מוסיף N-bit ממיר למוסיף 4-bit, 8-bit או 16-bit. הם כמו ארגומנטים לפונקציה שמועברת במהלך קריאת פונקציה.

 parameter MSB = 7; // MSB is a parameter with the constant value 7 parameter REAL = 4.5; // REAL holds the real number parameter FIFO_DEPTH = 256, MAX_WIDTH = 32; // Declares two parameters parameter [7:0] f_const = 2'b3; // 2 bit value is converted into 8 bits; 8'b3 

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

פרמטרים של מודול

זה יכול לשמש כדי לעקוף הגדרות פרמטרים בתוך מודול וגורם למודול לקבוצה שונה של פרמטרים בזמן ההידור. ניתן לשנות פרמטר באמצעות ה- defparam הַצהָרָה. מקובל להשתמש באותיות רישיות בשמות כדי שהפרמטר יבחין בהן באופן מיידי.

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

 module design_ip ( addr, wdata, write, sel, rdata); parameter BUS_WIDTH = 32, DATA_WIDTH = 64, FIFO_DEPTH = 512; input addr; input wdata; input write; input sel; output rdata; wire [BUS_WIDTH-1:0] addr; wire [DATA_WIDTH-1:0] wdata; reg [DATA_WIDTH-1:0] rdata; reg [7:0] fifo [FIFO_DEPTH]; endmodule 

בסגנון ה-ANSI החדש של הצהרת יציאות Verilog, אנו עשויים להכריז על פרמטרים כגון:

 module design_ip #(parameter BUS_WIDTH=32, parameter DATA_WIDTH=64) (input [BUS_WIDTH-1:0] addr, // other port declarations ); 

עוקף פרמטרים

ניתן לעקוף פרמטרים עם ערכים חדשים במהלך מופע המודול. החלק הראשון הוא המודול שנקרא design_ip בשם d0 כאשר פרמטרים חדשים מועברים בתוך # ( ).

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

 module tb; // Module instantiation override design_ip #(BUS_WIDTH = 64, DATA_WIDTH = 128) d0 ( [port list]); // Use of defparam to override defparam d0.FIFO_DEPTH = 128; endmodule 

למונה המודול יש שני פרמטרים נ ו מטה , שמוכרז כבעל ערך ברירת מחדל של 2 ו-0.

נ שולט במספר הביטים בפלט, שולט למעשה על רוחב המונה. זה מונה של 2 סיביות כברירת מחדל.

פָּרָמֶטֶר מטה שולט אם המונה צריך להגדיל או להקטין. המונה יקטן מכיוון שהפרמטר מוגדר ל-0.

מונה של 2 סיביות

כפתור מרכזי ב-CSS
 module counter # ( parameter N = 2, parameter DOWN = 0) (input clk, input rstn, input en, output reg [N-1:0] out); always @ (posedge clk) begin if (!rstn) begin out <= 0; end else begin if (en) (down) out <="out" - 1; + endmodule pre> <p>The module counter is instantiated with <strong> <em>N</em> </strong> as 2 even though it is not required because the default value is anyway 2.</p> <p> <strong> <em>DOWN</em> </strong> is not passed during module instantiation. And it takes the default value of 0 making it an up-counter.</p> <pre> module design_top (input clk, input rstn, input en, output [1:0] out); counter #(.N(2)) u0 (.clk(clk), .rstn(rstn), .en(en)); endmodule </pre> <p>The default parameters are used to implement the counter where <strong> <em>N</em> </strong> equals two, making it a 2-bit counter, and <strong> <em>DOWN</em> </strong> equals zero, making it an up-counter. The output from the counter is left unconnected at the top level.</p> <img src="//techcodeview.com/img/verilog-tutorial/47/verilog-parameters.webp" alt="Verilog Parameters"> <p> <strong>4-bit down Counter</strong> </p> <p>In this case, the module counter is instantiated with N as 4 making it a 4-bit counter. DOWN is passed a value of 1 during the module instantiation and hence a down-counter is implemented.</p> <pre> module design_top (input clk, input rstn, input en, output [3:0] out); counter #(.N(4), .DOWN(1)) u1 (.clk(clk), .rstn(rstn), .en(en)); endmodule </pre> <br> <img src="//techcodeview.com/img/verilog-tutorial/47/verilog-parameters-2.webp" alt="Verilog Parameters"> <h3>Specify Parameters</h3> <p>These parameters are used to provide time and delay values and declared using the <strong> <em>specparam</em> </strong> keyword. It is allowed to use both within the specified block and the main module body.</p> <pre> // Use of specify block Specify specparam t_rise = 200, t_fall = 150; specparam clk_to_q = 70, d_to_q = 100; endspecify // Within main module module my_block ( ); specparam dhold = 2.0; specparam ddly = 1.5; parameter WIDTH = 32; endmodule </pre> <h3>Difference between Specify and Module Parameters</h3> <table class="table"> <tr> <th>Specify parameter</th> <th>Module parameter</th> </tr> <tr> <td>Specify the specparam keyword declares parameter.</td> <td>The module parameter is declared by parameter.</td> </tr> <tr> <td>It can be declared inside a specific block or within the main module.</td> <td>It can only be declared within the main module.</td> </tr> <tr> <td>This parameter may be assigned specparams and parameters.</td> <td>This may not be assigned specparams.</td> </tr> <tr> <td>SDF can be used to override values.</td> <td>Instance declaration parameter values or defparam can be used to override.</td> </tr> </table> <p> <strong>Notes</strong> </p> <p>Here are some important notes for the Verilog parameters, such as:</p> <ul> <li>If we are using the <strong> <em>defparam</em> </strong> statement, we must specify a hierarchical path to the parameter.</li> <li>We cannot skip over a parameter in a <strong> <em>module instance parameter value assignment</em> </strong> . If we need to do this, use the initial value for a not overwritten parameter.</li> <li>When one parameter depends on the other, then the second will automatically be updated if we change the first one.</li> </ul> <hr></=>

פרמטרי ברירת המחדל משמשים ליישום המונה איפה נ שווה לשניים, מה שהופך אותו למונה של 2 סיביות, ו מטה שווה לאפס, מה שהופך אותו ל-up-counter. הפלט מהדלפק נותר לא מחובר ברמה העליונה.

פרמטרים של Verilog

מונה למטה של ​​4 סיביות

במקרה זה, מונה המודול מוזמן עם N כ-4 מה שהופך אותו למונה של 4 סיביות. DOWN מועבר ערך של 1 במהלך מופע המודול ומכאן מיושם מונה למטה.

 module design_top (input clk, input rstn, input en, output [3:0] out); counter #(.N(4), .DOWN(1)) u1 (.clk(clk), .rstn(rstn), .en(en)); endmodule 

פרמטרים של Verilog

ציין פרמטרים

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

 // Use of specify block Specify specparam t_rise = 200, t_fall = 150; specparam clk_to_q = 70, d_to_q = 100; endspecify // Within main module module my_block ( ); specparam dhold = 2.0; specparam ddly = 1.5; parameter WIDTH = 32; endmodule 

ההבדל בין פרמטרים Specify לפרמטרים של מודול

ציין פרמטר פרמטר מודול
ציין את פרמטר מילת המפתח specparam declares. פרמטר המודול מוצהר לפי פרמטר.
ניתן להכריז עליו בתוך בלוק ספציפי או בתוך המודול הראשי. ניתן להכריז עליו רק בתוך המודול הראשי.
לפרמטר זה ניתן להקצות ספקפרמים ופרמטרים. לא ניתן להקצות לזה ספקפרמים.
ניתן להשתמש ב-SDF כדי לעקוף ערכים. ניתן להשתמש בערכי פרמטרים של הצהרת מופעים או ב-defparam כדי לעקוף.

הערות

להלן כמה הערות חשובות עבור הפרמטרים של Verilog, כגון:

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