Параметры
/* Вариант 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);
endmoduleLast updated