Vo Verilog sú parametre konštanty a nepatria do žiadneho iného typu údajov, ako sú napríklad typy údajov registra alebo siete.
Konštantný výraz sa vzťahuje na konštantné číslo alebo predtým definovaný parameter. Nemôžeme upravovať hodnoty parametrov za behu, ale môžeme upraviť hodnotu parametra pomocou defparam vyhlásenie.
The defparam môže meniť parametre iba v čase kompilácie. Hodnoty parametrov je možné upraviť pomocou špecifikácie oneskorenia # s inštanciou modulu.
In Verilog , existujú dva spôsoby na prepísanie hodnoty parametra modulu počas vytvárania inštancie modulu.
- Pomocou kľúčového slova defparam.
- A priradenie hodnoty parametra inštancie modulu.
Po kľúčovom slove defparam je zadaná hierarchická cesta k parametru a nová hodnota parametra. Táto nová hodnota by mala byť konštantným výrazom. Ak výraz na pravej strane odkazuje na nejaké parametre, mal by byť deklarovaný v module, kde sa volá defparam.
Metóda priradenia hodnoty parametra inštancie modulu vyzerá ako priradenie oneskorenia inštancii brány. Táto metóda prepíše parametre vo vnútri vytvorených modulov tak, ako sa objavujú v module. Pri použití tohto formátu nie je možné preskočiť parametre.
Konštantné výrazy môžu obsahovať predtým deklarované parametre. Keď sa zistia zmeny na predtým deklarovaných parametroch, všetky parametre, ktoré závisia od tejto hodnoty, sa automaticky aktualizujú.
Zvážte, že 4-bitová sčítačka môže byť parametrizovaná tak, aby akceptovala hodnotu pre počet bitov a nové hodnoty parametrov je možné odovzdať počas vytvárania inštancie modulu. N-bitová sčítačka sa teda prevedie na 4-bitovú, 8-bitovú alebo 16-bitovú sčítačku. Sú ako argumenty funkcie, ktorá sa odovzdáva počas volania funkcie.
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
Existujú dva typy parametrov, modul a špecifikovať a obe akceptujú špecifikáciu rozsahu. Vyrábajú sa však tak široké, ako je hodnota, ktorá sa má uložiť, a preto nie je potrebná špecifikácia rozsahu.
Parametre modulu
Môže sa použiť na prepísanie definícií parametrov v rámci modulu a modul má v čase kompilácie inú sadu parametrov. Parameter je možné upraviť pomocou defparam vyhlásenie. Je bežné používať veľké písmená v názvoch parametra, aby ste si ich okamžite všimli.
Nižšie uvedený modul používa parametre na špecifikáciu šírky zbernice, šírky dát a hĺbky FIFO v rámci návrhu a môže byť prepísaný novými hodnotami, keď je modul vytvorený alebo pomocou príkazov 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
V novom štýle ANSI deklarácie portu Verilog môžeme deklarovať parametre, ako napríklad:
module design_ip #(parameter BUS_WIDTH=32, parameter DATA_WIDTH=64) (input [BUS_WIDTH-1:0] addr, // other port declarations );
Prevažujúce parametre
Parametre môžu byť prepísané novými hodnotami počas inštancie modulu. Prvou časťou je modul tzv design_ip menom d0, kde sa nové parametre odovzdávajú v rámci # ( ).
Druhou časťou je použitie konštruktu Verilog s názvom defparam na nastavenie nových hodnôt parametrov. Prvá metóda sa bežne používa na odovzdávanie nových parametrov v návrhoch RTL. A druhá metóda sa používa v simuláciách testbench na rýchlu aktualizáciu konštrukčných parametrov bez toho, aby bolo nutné modul znova inštalovať.
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
Počítadlo modulov má dva parametre N a DOLE , ktorá je deklarovaná ako predvolená hodnota 2 a 0.
N riadi počet bitov na výstupe a efektívne riadi šírku počítadla. Štandardne je to 2-bitové počítadlo.
Parameter DOLE kontroluje, či sa má počítadlo zvyšovať alebo znižovať. Počítadlo sa bude znižovať, pretože parameter je nastavený na 0.
2-bitové počítadlo
zoznam triediacich polí java
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></=>
Predvolené parametre sa používajú na implementáciu počítadla kde N sa rovná dvom, čo z neho robí 2-bitové počítadlo a DOLE rovná sa nule, čím sa stáva počítadlom. Výstup z počítadla je na najvyššej úrovni ponechaný nezapojený.
4-bitové počítadlo smerom nadol
V tomto prípade je počítadlo modulu inštanciované s N ako 4, čo z neho robí 4-bitové počítadlo. DOWN prechádza hodnotou 1 počas vytvárania inštancie modulu, a preto je implementovaný down-counter.
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
Zadajte parametre
Tieto parametre sa používajú na poskytovanie hodnôt času a oneskorenia a deklarujú sa pomocou specparam kľúčové slovo. Je povolené používať v špecifikovanom bloku aj v tele hlavného modulu.
// 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
Rozdiel medzi parametrami Specify a Module
Zadajte parameter | Parameter modulu |
---|---|
Zadajte parameter deklaruje kľúčové slovo specparam. | Parameter modulu je deklarovaný parametrom. |
Môže byť deklarovaný v konkrétnom bloku alebo v hlavnom module. | Môže byť deklarovaný iba v rámci hlavného modulu. |
Tomuto parametru možno priradiť specparam a parametre. | Tomuto nemusia byť priradené specparams. |
SDF možno použiť na prepísanie hodnôt. | Hodnoty parametrov deklarácie inštancie alebo defparam možno použiť na prepísanie. |
Poznámky
Tu je niekoľko dôležitých poznámok pre parametre Verilog, ako napríklad:
- Ak používame defparam musíme zadať hierarchickú cestu k parametru.
- Nemôžeme preskočiť parameter v a priradenie hodnoty parametra inštancie modulu . Ak to potrebujeme, použite počiatočnú hodnotu pre neprepísaný parameter.
- Keď jeden parameter závisí od druhého, druhý sa automaticky aktualizuje, ak zmeníme prvý.
=>