Verilog HDL中模块参数传递的方法


前言

“parameter”是Verilog HDL中的一个关键字,代表着参数型常量,即用parameter来定义一个标识符代表一个常量,这样可以提高程序的可读性与可维护性。

例如:
parameter max_time = 10; //定义参数max_time为常量10

参数型常量在Verilog HDL中通常用来定义时间延迟和数据位宽。


一、参数传递

一方面,对于一个Verilog HDL模块而言,在实际中可能时间常量需要设置一个相对较大的值,这样才能符合设计预期,但是如果我们在仿真中依旧采用这样一个较大的值会导致仿真时间过长,耽误开发速度,因此可以仿真平台中(Testbench)利用参数传递改变底层模块中所设置的时间参数。
另一方面,如果我们在另一个模块中例化我们已经有的模块,但是又希望更改其中的一些参数值,这时利用参数传递就能很便捷地、灵活地通过顶层对底层的参数值进行更改。

二、参数传递方法

1.方法一

方法一是通过在例化过程中使用#(A)进行参数的传递。

例如:

module T( //模块一,底层。
	a,
	b,
	c
	);
	......
	parameter Width = 6, mem_num = 3;
	......
endmodule

module Y(	//模块二,顶层。
	d,
	e,
	f
	);
	......
	T #(5,7) T_inst0(  //这样的话Width=5,mem_num =7;
	.a(),
	.b(),
	.c()
	);
	......
endmodule

2.方法二

方法二是顶层在在例化时,在例化模块名前使用#(.(参数1),.(参数2))

例如:

module T( //模块一,底层。
	a,
	b,
	c
	);
	......
	parameter Width = 6, mem_num = 3;
	......
endmodule

module Y(	//模块二,顶层。
	d,
	e,
	f
	);
	......
	T #(.Width(5) ,
		.mem_num(7)
		) 
	T_inst0(  //这样的话Width=5,mem_num =7;
	.a(),
	.b(),
	.c()
	);
	......
endmodule

3.方法三

当在多个层次的模块中改变参数,就可以用”defparam“关键字。

例如:

module T( //模块一,底层。
	a,
	b,
	c
	);
	......
	parameter Width = 6, mem_num = 3;
	......
endmodule

module Y(	//模块二,顶层。
	d,
	e,
	f
	);
	......
	T T_inst0(  
	.a(),
	.b(),
	.c()
	);
	
	defparam T_inst0.Width = 5;
	defparam T_inst0.mem_num = 7;
	//这样的话Width=5,mem_num =7;
	......
endmodule

总结

以上就是在Verilog HDL程序设计中,相对都层次模块中的参数进行改变时可以用到的参数传递方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿__星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值