logo

Paràmetres de Verilog

A Verilog, els paràmetres són constants i no pertanyen a cap altre tipus de dades, com ara tipus de dades de registre o de xarxa.

Una expressió constant fa referència a un nombre constant o un paràmetre definit prèviament. No podem modificar els valors dels paràmetres en temps d'execució, però podem modificar el valor d'un paràmetre mitjançant l' defparam declaració.

El defparam La instrucció només pot modificar els paràmetres en el moment de la compilació. Els valors dels paràmetres es poden modificar mitjançant l'especificació de retard # amb la instanciació del mòdul.

En Verilog , hi ha dos mètodes per substituir el valor d'un paràmetre de mòdul durant la instanciació d'un mòdul.

  1. Mitjançant la paraula clau defparam.
  2. I assignació de valor de paràmetre d'instància del mòdul.

Després de la paraula clau defparam, s'especifica la ruta jeràrquica del paràmetre i el nou valor del paràmetre. Aquest nou valor hauria de ser una expressió constant. Si l'expressió de la dreta fa referència a algun paràmetre, s'hauria de declarar dins del mòdul on s'invoca defparam.

El mètode d'assignació del valor del paràmetre de la instància del mòdul sembla una assignació de retard a la instància de la porta. Aquest mètode anul·la els paràmetres dins dels mòduls instanciats tal com apareixen al mòdul. Amb aquest format, no es poden ometre paràmetres.

Les expressions constants poden contenir paràmetres declarats prèviament. Quan es detecten canvis en els paràmetres declarats anteriorment, tots els paràmetres que depenen d'aquest valor s'actualitzen automàticament.

Tingueu en compte que es pot parametritzar un sumador de 4 bits per acceptar un valor per al nombre de bits i es poden passar nous valors de paràmetres durant la instanciació del mòdul. Així, un sumador de N bits es converteix en un sumador de 4 bits, 8 bits o 16 bits. Són com arguments d'una funció que es passa durant una trucada de funció.

 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 

Hi ha dos tipus de paràmetres, mòdul i especificar , i tots dos accepten una especificació d'interval. Però, es fan tan amples com el valor que cal emmagatzemar-los i, per tant, no és necessària una especificació de rang.

Paràmetres del mòdul

Es pot utilitzar per anul·lar definicions de paràmetres dins d'un mòdul i fa que el mòdul tingui un conjunt diferent de paràmetres en temps de compilació. Un paràmetre es pot modificar amb el defparam declaració. És habitual utilitzar lletres majúscules en els noms perquè el paràmetre les noti a l'instant.

El mòdul següent utilitza paràmetres per especificar l'amplada del bus, l'amplada de les dades i la profunditat de FIFO dins del disseny, i es pot substituir amb nous valors quan s'instancia el mòdul o mitjançant declaracions 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 

En el nou estil ANSI de declaració de port de Verilog, podem declarar paràmetres com ara:

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

Anul·lació de paràmetres

Els paràmetres es poden substituir amb nous valors durant la instanciació del mòdul. La primera part és el mòdul anomenat disseny_ip pel nom d0 on es passen nous paràmetres dins de # ( ).

La segona part és utilitzar una construcció Verilog anomenada defparam per definir els nous valors dels paràmetres. El primer mètode s'utilitza habitualment per passar nous paràmetres en dissenys RTL. I el segon mètode s'utilitza en simulacions de banc de proves per actualitzar ràpidament els paràmetres de disseny sense haver de reinstanciar el mòdul.

 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 

El comptador de mòduls té dos paràmetres N i ABAIX , que es declara que té un valor per defecte de 2 i 0.

N controla el nombre de bits a la sortida, controlant eficaçment l'amplada del comptador. És un comptador de 2 bits per defecte.

Paràmetre ABAIX controla si el comptador ha d'incrementar o disminuir. El comptador disminuirà perquè el paràmetre està establert a 0.

Comptador de 2 bits

Emojis de poma a Android
 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></=>

Els paràmetres per defecte s'utilitzen per implementar el comptador on N és igual a dos, convertint-lo en un comptador de 2 bits i ABAIX és igual a zero, el que el converteix en un comptador. La sortida del comptador es deixa sense connexió al nivell superior.

Paràmetres de Verilog

Comptador de baixada de 4 bits

En aquest cas, el comptador del mòdul s'instancia amb N com a 4, convertint-lo en un comptador de 4 bits. A DOWN es passa un valor d'1 durant la instanciació del mòdul i, per tant, s'implementa un comptador inversor.

 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 

Paràmetres de Verilog

Especifiqueu els paràmetres

Aquests paràmetres s'utilitzen per proporcionar valors de temps i retard i es declaren mitjançant l' especparam paraula clau. Es permet utilitzar tant dins del bloc especificat com del cos del mòdul principal.

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

Diferència entre paràmetres especificar i mòdul

Especifiqueu el paràmetre Paràmetre del mòdul
Especifiqueu la paraula clau specparam declara el paràmetre. El paràmetre del mòdul es declara per paràmetre.
Es pot declarar dins d'un bloc específic o dins del mòdul principal. Només es pot declarar dins del mòdul principal.
A aquest paràmetre se li poden assignar specparams i paràmetres. És possible que no se li assignin especparams.
SDF es pot utilitzar per anul·lar valors. Els valors dels paràmetres de declaració d'instància o defparam es poden utilitzar per substituir.

Notes

Aquí hi ha algunes notes importants per als paràmetres de Verilog, com ara:

  • Si estem utilitzant el defparam declaració, hem d'especificar una ruta jeràrquica al paràmetre.
  • No podem saltar un paràmetre en a Assignació del valor del paràmetre d'instància del mòdul . Si hem de fer-ho, utilitzeu el valor inicial d'un paràmetre no sobreescrit.
  • Quan un paràmetre depèn de l'altre, el segon s'actualitzarà automàticament si canviem el primer.