Параметры
Параметры позволяют легко создать несколько похожих модулей с различной спецификацией. Параметры являются константами времени компиляции. SystemVerilog предоставляет несколько методов для установки значения констант параметров. Каждому параметру может быть присвоено значение по умолчанию при объявлении. Значение параметра созданного модуля, интерфейса или программы может быть переопределено в каждом экземпляре.
Параметры обозначаются ключевым словом parameter
. Помимо параметров, которые можно специфицировать извне модуля, можно задать локальные параметры (localparam
), которые задаются внутри модуля и не видны снаружи.
Синтаксис
/* Вариант 1: объявление параметризованного модуля */
module module_name #(parameter <parameter_name> = <value>) ...
/* Вариант 2: объявление параметризованного модуля с локальным параметром */
module module_name(ports);
parameter <parameter_name> = <value>; // или localparam
...
/* Вариант 3: инстанцирование параметризованного модуля */
module_name module_var #(<value1>, <value2>, ...) ...
/* Враиант 4: инстанцирование параметризованного модуля именнованным списком параметров */
module_name module_var #(.<parameter_name1>(<value1>), ...) ...
Пример
module counterm #(parameter N = 4)(output reg[N-1:0] out, input clk, reset, enable);
always @ (posedge clk) begin
if (enable) begin
if (reset)
out = 0;
else
out = out + 1;
end else begin
out = out;
end
end
endmodule
module counterm_tb;
parameter _N = 5;
reg clk, reset, enable;
wire[_N-1:0] out;
counterm #(_N) _counterm(out, clk, reset, enable); // mod 2**5
initial begin
$display("Time [**]:\tclk\trst\ten\tout_bin\tout_dec");
clk = 0; reset = 1; enable = 1;
#1 reset = 0;
#2 reset = 1;
#2 reset = 0;
#10 $finish;
end
always #1 clk = ~clk;
always @(posedge clk)
$display("Time [%0t]:\t%b\t%b\t%b\t%b\t%d",
$time, clk, reset, enable, out, out);
endmodule
Результат исполнения
Time [**]: clk rst en out_bin out_dec
Time [1]: 1 0 1 xxxxx x
Time [3]: 1 1 1 00000 0
Time [5]: 1 0 1 00000 0
Time [7]: 1 0 1 00010 2
Time [9]: 1 0 1 00010 2
Time [11]: 1 0 1 00100 4
Time [13]: 1 0 1 00100 4
Time [15]: 1 0 1 00110 6
Last updated