logo

Verilog parametri

Programmā Verilog parametri ir konstantes un nepieder nevienam citam datu tipam, piemēram, reģistra vai tīkla datu tipiem.

Konstanta izteiksme attiecas uz konstantu skaitli vai iepriekš definētu parametru. Mēs nevaram modificēt parametru vērtības izpildlaikā, bet mēs varam modificēt parametra vērtību, izmantojot defparam paziņojums, apgalvojums.

The defparam paziņojums var mainīt parametrus tikai kompilācijas laikā. Parametru vērtības var mainīt, izmantojot # aizkaves specifikāciju ar moduļa instanciāciju.

In Verilog , ir divas metodes, kā ignorēt moduļa parametra vērtību moduļa inscenēšanas laikā.

  1. Izmantojot atslēgvārdu defparam.
  2. Un moduļa instances parametru vērtību piešķiršana.

Pēc atslēgvārda defparam tiek norādīts parametra hierarhiskais ceļš un parametra jaunā vērtība. Šai jaunajai vērtībai jābūt nemainīgai izteiksmei. Ja labās puses izteiksme atsaucas uz kādiem parametriem, tā ir jādeklarē modulī, kurā tiek izsaukta defparam.

Šķiet, ka moduļa instances parametru vērtību piešķiršanas metode ir aizkaves piešķiršana vārtu instancei. Šī metode ignorē parametrus momentānos moduļos, kā tie parādās modulī. Izmantojot šo formātu, parametrus nevar izlaist.

Pastāvīgās izteiksmes var saturēt iepriekš deklarētus parametrus. Kad tiek konstatētas izmaiņas iepriekš deklarētajos parametros, visi parametri, kas ir atkarīgi no šīs vērtības, tiek automātiski atjaunināti.

Apsveriet, ka 4 bitu summētāju var parametrizēt, lai pieņemtu bitu skaita vērtību, un moduļa instanču laikā var nodot jaunas parametru vērtības. Tātad, N-bitu summētājs pārvēršas par 4 bitu, 8 bitu vai 16 bitu summētāju. Tie ir kā argumenti funkcijai, kas tiek nodota funkcijas izsaukšanas laikā.

 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 

Ir divu veidu parametri, modulis un norādīt , un abi pieņem diapazona specifikāciju. Taču tie ir izgatavoti tik plati, cik liela ir to saglabāšanas vērtība, un tāpēc diapazona specifikācija nav nepieciešama.

Moduļa parametri

To var izmantot, lai ignorētu parametru definīcijas modulī, un modulim kompilēšanas laikā ir atšķirīga parametru kopa. Parametru var mainīt ar defparam paziņojums, apgalvojums. Parametru nosaukumos parasti izmanto lielos burtus, lai tos uzreiz pamanītu.

Tālāk esošajā modulī tiek izmantoti parametri, lai norādītu kopnes platumu, datu platumu un FIFO dziļumu dizainā, un to var ignorēt ar jaunām vērtībām, kad modulis ir instantiēts vai izmantojot defparam paziņojumus.

 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 

Jaunajā Verilog porta deklarācijas ANSI stilā mēs varam deklarēt tādus parametrus kā:

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

Ignorējošie parametri

Parametrus var ignorēt ar jaunām vērtībām moduļa inscenēšanas laikā. Pirmā daļa ir modulis, ko sauc dizaina_ip ar nosaukumu d0, kur jauni parametri tiek nodoti # ( ) robežās.

Otrā daļa ir izmantot Verilog konstrukciju, ko sauc defparam lai iestatītu jaunās parametru vērtības. Pirmo metodi parasti izmanto jaunu parametru nodošanai RTL dizainā. Un otrā metode tiek izmantota testa stenda simulācijās, lai ātri atjauninātu dizaina parametrus, neatjaunojot moduli.

 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 

Moduļa skaitītājam ir divi parametri N un UZ LEJU , kuras noklusējuma vērtība ir 2 un 0.

N kontrolē bitu skaitu izvadē, efektīvi kontrolējot skaitītāja platumu. Pēc noklusējuma tas ir 2 bitu skaitītājs.

Parametrs UZ LEJU kontrolē, vai skaitītājam ir jāpalielina vai jāsamazina. Skaitītājs samazināsies, jo parametrs ir iestatīts uz 0.

2 bitu augšup skaitītājs

java apakšvirknes funkcija
 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></=>

Noklusētie parametri tiek izmantoti, lai ieviestu skaitītāju kur N ir vienāds ar diviem, padarot to par 2 bitu skaitītāju, un UZ LEJU ir vienāds ar nulli, padarot to par augšupejošu skaitītāju. Izeja no letes tiek atstāta nepieslēgta augšējā līmenī.

Verilog parametri

4 bitu leju skaitītājs

Šajā gadījumā moduļa skaitītājs tiek parādīts ar N kā 4, padarot to par 4 bitu skaitītāju. DOWN tiek nodota vērtība 1 moduļa inscenēšanas laikā, un līdz ar to tiek ieviests lejupvērsts skaitītājs.

 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 parametri

Norādiet parametrus

Šie parametri tiek izmantoti, lai nodrošinātu laika un aizkaves vērtības, un tiek deklarēti, izmantojot specparam atslēgvārds. Atļauts izmantot gan norādītajā blokā, gan galvenā moduļa korpusā.

 // 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 

Atšķirība starp Specify un Module parametriem

Norādiet parametru Moduļa parametrs
Norādiet specparam atslēgvārdu deklarē parametru. Moduļa parametrs tiek deklarēts pēc parametra.
To var deklarēt noteiktā blokā vai galvenajā modulī. To var deklarēt tikai galvenajā modulī.
Šim parametram var piešķirt specparamus un parametrus. Tam nevar piešķirt specparamus.
SDF var izmantot, lai ignorētu vērtības. Instanču deklarācijas parametru vērtības vai defparam var izmantot, lai ignorētu.

Piezīmes

Šeit ir dažas svarīgas piezīmes par Verilog parametriem, piemēram:

  • Ja mēs izmantojam defparam paziņojumā, mums jānorāda hierarhisks ceļš uz parametru.
  • Mēs nevaram izlaist pāri parametram a moduļa instances parametra vērtību piešķiršana . Ja mums tas ir jādara, izmantojiet nepārrakstīta parametra sākotnējo vērtību.
  • Ja viens parametrs ir atkarīgs no otra, otrais tiks automātiski atjaunināts, ja mainīsim pirmo.