前言
“parameter”是Verilog HDL中的一个关键字,代表着参数型常量,即用parameter来定义一个标识符代表一个常量,这样可以提高程序的可读性与可维护性。
例如:
parameter max_time = 10; //定义参数max_time为常量10
参数型常量在Verilog HDL中通常用来定义时间延迟和数据位宽。
一、参数传递
一方面,对于一个Verilog HDL模块而言,在实际中可能时间常量需要设置一个相对较大的值,这样才能符合设计预期,但是如果我们在仿真中依旧采用这样一个较大的值会导致仿真时间过长,耽误开发速度,因此可以仿真平台中(Testbench)利用参数传递改变底层模块中所设置的时间参数。
另一方面,如果我们在另一个模块中例化我们已经有的模块,但是又希望更改其中的一些参数值,这时利用参数传递就能很便捷地、灵活地通过顶层对底层的参数值进行更改。
二、参数传递方法
1.方法一
方法一是通过在例化过程中使用#(A)进行参数的传递。
例如:文章来源:https://www.toymoban.com/news/detail-505717.html
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程序设计中,相对都层次模块中的参数进行改变时可以用到的参数传递方法。文章来源地址https://www.toymoban.com/news/detail-505717.html
到了这里,关于Verilog HDL中模块参数传递的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!