logo

Parametry Verilog

Ve Verilog jsou parametry konstanty a nepatří k žádnému jinému datovému typu, jako je registr nebo net datový typ.

Konstantní výraz odkazuje na konstantní číslo nebo dříve definovaný parametr. Nemůžeme upravovat hodnoty parametrů za běhu, ale můžeme upravit hodnotu parametru pomocí defparam prohlášení.

The defparam může měnit parametry pouze v době kompilace. Hodnoty parametrů lze upravit pomocí specifikace # delay s konkretizací modulu.

v Verilog Existují dva způsoby, jak přepsat hodnotu parametru modulu během vytváření instance modulu.

  1. Pomocí klíčového slova defparam.
  2. A přiřazení hodnoty parametru instance modulu.

Po klíčovém slově defparam je určena hierarchická cesta k parametru a nová hodnota parametru. Tato nová hodnota by měla být konstantním výrazem. Pokud výraz na pravé straně odkazuje na nějaké parametry, měl by být deklarován v modulu, kde je vyvolán defparam.

Metoda přiřazení hodnoty parametru instance modulu vypadá jako přiřazení zpoždění k instanci brány. Tato metoda přepíše parametry uvnitř vytvořených modulů tak, jak se objevují v modulu. Při použití tohoto formátu nelze parametry přeskočit.

Konstantní výrazy mohou obsahovat dříve deklarované parametry. Když jsou zjištěny změny u dříve deklarovaných parametrů, všechny parametry, které na této hodnotě závisí, se automaticky aktualizují.

Zvažte, že 4bitová sčítačka může být parametrizována tak, aby akceptovala hodnotu pro počet bitů, a nové hodnoty parametrů lze předávat během vytváření instance modulu. N-bitová sčítačka se tedy převede na 4bitovou, 8bitovou nebo 16bitovou sčítačku. Jsou jako argumenty funkce, která je předána během volání funkce.

 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 parametrů, modul a specifikovat a oba přijímají specifikaci rozsahu. Jsou však vyrobeny tak široké, jako je hodnota, která se má uložit, a proto není nutné specifikovat rozsah.

Parametry modulu

Lze jej použít k přepsání definic parametrů v rámci modulu a umožňuje modulu mít v době kompilace jinou sadu parametrů. Parametr lze upravit pomocí defparam prohlášení. Je běžné používat velká písmena v názvech parametru, abyste si jich okamžitě všimli.

Níže uvedený modul používá parametry k určení šířky sběrnice, šířky dat a hloubky FIFO v rámci návrhu a může být přepsán novými hodnotami, když je modul vytvořen instancí nebo pomocí příkazů 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 novém stylu ANSI deklarace portu Verilog můžeme deklarovat parametry jako:

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

Převažující parametry

Parametry lze přepsat novými hodnotami během vytváření instancí modulu. První částí je modul tzv design_ip jménem d0, kde jsou nové parametry předávány v rámci # ( ).

Druhá část je použití konstrukce Verilog nazvané defparam pro nastavení nových hodnot parametrů. První metoda se běžně používá k předávání nových parametrů v návrzích RTL. A druhá metoda se používá v simulacích testbench k rychlé aktualizaci parametrů návrhu, aniž by bylo nutné znovu instanciovat modul.

 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 

Čítač modulů má dva parametry N a DOLŮ , která je deklarována jako výchozí hodnota 2 a 0.

N řídí počet bitů na výstupu a efektivně řídí šířku čítače. Ve výchozím nastavení je to 2bitový čítač.

Parametr DOLŮ řídí, zda se má počítadlo zvyšovat nebo snižovat. Čítač se bude snižovat, protože parametr je nastaven na 0.

2-bitový čítač

sort array list 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></=>

Výchozí parametry se používají k implementaci čítače kde N rovná se dvě, což z ní činí 2bitový čítač, a DOLŮ rovná se nule, což z ní činí počítadlo. Výstup z čítače je na nejvyšší úrovni ponechán nezapojený.

Parametry Verilog

4-bit down Counter

V tomto případě je čítač modulu instancí N jako 4, což z něj činí 4bitový čítač. DOWN je předána hodnota 1 během konkretizace modulu, a proto je implementován 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 

Parametry Verilog

Zadejte parametry

Tyto parametry se používají k poskytování hodnot času a zpoždění a deklarují se pomocí specparam klíčové slovo. Je povoleno používat jak v rámci specifikovaného bloku, tak v těle 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 

Rozdíl mezi parametry Specify a Module

Zadejte parametr Parametr modulu
Zadejte parametr deklarace klíčového slova specparam. Parametr modulu je deklarován parametrem.
Může být deklarován uvnitř konkrétního bloku nebo v rámci hlavního modulu. Může být deklarován pouze v rámci hlavního modulu.
Tomuto parametru mohou být přiřazeny specparams a parametry. Tomuto nemusí být přiřazeny specparamy.
SDF lze použít k přepsání hodnot. Hodnoty parametrů deklarace instance nebo defparam lze použít k přepsání.

Poznámky

Zde jsou některé důležité poznámky k parametrům Verilog, jako například:

  • Pokud používáme defparam příkazu, musíme zadat hierarchickou cestu k parametru.
  • Nemůžeme přeskočit parametr v a přiřazení hodnoty parametru instance modulu . Pokud to potřebujeme udělat, použijte počáteční hodnotu pro nepřepsaný parametr.
  • Když jeden parametr závisí na druhém, pak se druhý automaticky aktualizuje, pokud změníme první.