在设计中引入参数化设计可以大大提高模块的可重用性以及节约资源,下面用点灯来记录一下几种常见的设计方式和例化方式。
一、在设计中引入parameter参数
底层模块设计
实现500ms时,led自动翻转,led的闪烁周期是1s,亮500ms,灭500ms。
module param_design
(
input wire clk ,
input wire rst_n ,
output reg led
);
reg [24:0] cnt;
parameter CNT_MAX = 25'd24_999_999;
always@(posedge clk or negedge rst_n)
if(!rst_n)
cnt <= 25'd0;
else if(cnt == CNT_MAX)
cnt <= 25'd0;
else
cnt <= cnt + 1'b1;
always@(posedge clk or negedge rst_n)
if(!rst_n)
led <= 1'b1;
else if(cnt == CNT_MAX)
led <= ~led;
else
led <= led;
endmodule
1、defparam方式传入数据
在tb中改变CNT_MAX的数值可以大大减少仿真时等待时间。
`timescale 1ns/1ns
`define clk_period 20
module param_design_tb;
//============================<端口>==============================
reg clk;
reg rst_n;
wire led;
//================================================================
//== 模块例化
//================================================================
param_design param_design_inst_0
(
.clk (clk),
.rst_n (rst_n),
.led (led)
);
defparam para