【verilog教程】verilog带参数例化

1. verilog 带参数例化

当一个模块被另一个模块引用例化时,高层模块可以对低层次模块的参数值进行改写。

2. defparam

可以用关键字 defaram 通过模块层次调用的方法,来改写低层次模块的参数值。

示例如下

verilog 复制代码
defparam u_ram.MASK = 7 ;

ram u_ram(
	.clk (clk) ,
	.a   (a  ) ,
	.d   (d  ) ,
	.en  (en ) ,
	.wr  (wr ) ,
	.q   (q  )
);

/// 此模块的MAKSK已经被上层模块传参为7
module ram #( 

	parameter MASK = 3 
)(

	input wire 		 clk 	,
	input wire [7:0] a		,
	input wire [7:0] d		,
	input wire       en		,
	input wire		 wr    	,

	output reg [7:0] q	
);

reg [7:0] mem [0:(1<<7)-1] ;

always @(posedge clk) begin
	if(en && wr) begin
		mem[a] <= d & mask ;
	end
	else if(en && !wr) begin
		q <= mem[a] & mask ;
	end
end

endmodule

3. 带参数模块例化

示例如下

verilog 复制代码
ram #(
	.aw(4) ,
	.dw(4) 
)
u_ram(
	.clk 	(clk		) ,
	.a 		(a[aw-1:0]	) ,
	.d 		(d			) ,
	.en 	(en			) ,
	.wr 	(wr			) ,
	.q		(q			)
);

/// 此模块下的aw,dw都被上层模块传参为4
module ram #(

	parameter aw = 2 ,
	parameter dw = 3
(
	input wire 			clk ,
	input wire [aw-1:0] a   , /// 现在a的位宽为3,原始为1
 	input wire [dw-1:0] d   , /// 现在b的位宽为3,原始为2
	input wire 			en  ,
	input wire			wr  ,
	output reg [dw-1:0] q   
);
	...
	...
	...
	
endmodule

笔记

实际工作中,带参数例化的情况较多。


相关推荐
Johny_Zhao8 小时前
网络安全等级保护测评实施方案
linux·网络·人工智能·网络安全·信息安全·云计算·等保测评·系统运维·itsm
落羽的落羽8 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
刚入门的大一新生9 小时前
Linux-进程控制
linux·运维·服务器·c++
上火的金鱼妹9 小时前
K8S基础组件作用和关系整理
linux·运维·服务器·kubernetes
Vcaker9 小时前
Linux学习25-harbor私有仓库部署
linux·运维·学习
刃神太酷啦9 小时前
Redis 进阶核心:持久化 (RDB/AOF)、事务与主从复制全解析----《Hello Redis!》(5)
linux·c语言·数据库·c++·redis·缓存·bootstrap
编程的一拳超人9 小时前
DeepSeek Harness Linux/macOS/Windows 本地下载、启动与模型配置指南
linux·windows·macos·deepseek
时凌云.9 小时前
【2026最新】JDK 下载安装与环境配置全教程(Windows/Mac/Linux 三平台,零基础友好)
java·linux·macos
不懂的浪漫10 小时前
ToDesk 连接 Linux 后分辨率过低的解决方法
linux·运维·数据库
广州灵眸科技有限公司11 小时前
从手动三步到上电即连:4G模组systemd开机自连方案
linux·运维·服务器·开发语言·网络·人工智能·php