logo

Верилог Параметерс

У Верилогу, параметри су константе и не припадају ниједном другом типу података као што су типови података регистра или мреже.

Константни израз се односи на константан број или претходно дефинисани параметар. Не можемо да мењамо вредности параметара у току извођења, али можемо да изменимо вредност параметра користећи дефпарам изјава.

Тхе дефпарам израз може да мења параметре само у време компилације. Вредности параметара се могу мењати коришћењем # спецификације кашњења са инстанцирањем модула.

Ин Верилог , постоје два начина да се замени вредност параметра модула током инстанцирања модула.

  1. Коришћењем кључне речи дефпарам.
  2. И додељивање вредности параметра инстанце модула.

После кључне речи дефпарам, хијерархијска путања је наведена до параметра и нове вредности параметра. Ова нова вредност треба да буде константан израз. Ако израз са десне стране упућује на било које параметре, треба га декларисати унутар модула где се дефпарам позива.

Метод додељивања вредности параметра инстанце модула изгледа као додељивање кашњења инстанци капије. Овај метод замењује параметре унутар инстанцираних модула онако како се појављују у модулу. Користећи овај формат, параметри се не могу прескочити.

Константни изрази могу да садрже претходно декларисане параметре. Када се открију промене на претходно декларисаним параметрима, сви параметри који зависе од ове вредности се аутоматски ажурирају.

Узмите у обзир, 4-битни сабирач се може параметризовати да прихвати вредност за број битова, а нове вредности параметара се могу пренети током инстанцирања модула. Дакле, Н-битни сабирач се претвара у 4-битни, 8-битни или 16-битни сабирач. Они су као аргументи функцији која се прослеђује током позива функције.

 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 

Постоје две врсте параметара, модул и спецификовати , и оба прихватају спецификацију опсега. Али, они су направљени онолико широки колико је вредност која ће их сачувати, па стога спецификација опсега није неопходна.

Параметри модула

Може се користити за замени дефиниција параметара унутар модула и чини да модул има другачији скуп параметара у време компајлирања. Параметар се може модификовати помоћу дефпарам изјава. Уобичајено је да се у именима користе велика слова да би их параметар одмах приметио.

Модул испод користи параметре да специфицира ширину магистрале, ширину података и дубину ФИФО унутар дизајна, и може се заменити новим вредностима када се модул инстанцира или коришћењем дефпарам изјава.

 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 

У новом АНСИ стилу Верилог декларације порта, можемо декларисати параметре као што су:

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

Превазилажење параметара

Параметри се могу заменити новим вредностима током инстанцирања модула. Први део је модул тзв десигн_ип по имену д0 где се нови параметри прослеђују унутар # ( ).

Други део је употреба Верилог конструкције тзв дефпарам да бисте поставили нове вредности параметара. Први метод се обично користи за преношење нових параметара у РТЛ дизајну. А други метод се користи у симулацијама тестног стола за брзо ажурирање параметара дизајна без потребе да се поново инстанцира модул.

 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-битни бројач

басх дужина низа
 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-битним бројачем, и ДОВН једнака нули, што га чини уп-цоунтер. Излаз са бројача остаје неповезан на највишем нивоу.

Верилог Параметерс

4-битни бројач

У овом случају, бројач модула је инстанциран са Н као 4 што га чини 4-битним бројачем. ДОВН се прослеђује вредност 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 

Верилог Параметерс

Одредите параметре

Ови параметри се користе за обезбеђивање вредности времена и кашњења и декларишу се помоћу спецпарам кључна реч. Дозвољено је коришћење и унутар наведеног блока и главног тела модула.

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

Разлика између параметара Специфи и Модуле

Наведите параметар Параметар модула
Наведите параметар декларисања кључне речи спецпарам. Параметар модула је декларисан параметром.
Може се декларисати унутар одређеног блока или унутар главног модула. Може се декларисати само унутар главног модула.
Овом параметру могу бити додељени спецпарамс и параметри. Овоме можда неће бити додељени спецпарамс.
СДФ се може користити за замену вредности. Вредности параметара декларације инстанце или дефпарам се могу користити за замену.

Напомене

Ево неколико важних напомена за Верилог параметре, као што су:

  • Ако користимо дефпарам изјаву, морамо навести хијерархијску путању до параметра.
  • Не можемо прескочити параметар у а додељивање вредности параметра инстанце модула . Ако то треба да урадимо, употребите почетну вредност за параметар који није преписан.
  • Када један параметар зависи од другог, онда ће други аутоматски бити ажуриран ако променимо први.