模块调用时对参数值的更改
当某个模块被另一个模块调用后,调用模块可以对被调用模块内的参数值进行更改由此可以通过
更改参数值来对被调用模块实现的功能进行控制。比如说我们可以设计一个加法器模块,该加法
器的位数由模块内的参数指定。这样,在对这个加法器模块进行调用时,我们只需要在调用时进行
一下参数更改就可以交同一加法器模块作为8位、16位、32位等任意位的加法器。
对参数值更改的两种方式:
1、使用带有参数值的模块实例语句;
格式如下:
#(<参数值1>,<参数值2>,。。。<参数值n>)
如果只有一个参数,括号可省 “#<参数值>”
例:
module multibits_multiplier(data1, data2, out);
parameter WIDE1 = 4;
parameter WIDE2 = 4;
input [WIDE1 -1 : 0] data1;
input [WIDE2 - 1 : 0] data2;
output [WIDE1 + WIDE2 - 1 : 0] out;
assign out = data1 * data2;
endmodule
通过调用上面的模块并修改参数,我们可以得到一个8X8的乘法器模块
module eight_bits_multiplier(a, b, result);
input [7 : 0] a, b;
output [15 : 0] result;
multibits_multiplier #(8, 8) U1(a, b, result);
endmodule
2、使用参数重定义语句(defparam语句)。
格式如下:
defparam <参数名1> = <参数值1>,
<参数名2> = <参数值2>,
......
<参数名n> = <参数值n>;
例:
module multibits_multiplier(data1, data2, out);
parameter WIDE1 = 4;
parameter WIDE2 = 4;
input [WIDE1 -1 : 0] data1;
input [WIDE2 - 1 : 0] data2;
output [WIDE1 + WIDE2 - 1 : 0] out;
assign out = data1 * data2;
endmodule
通过模块调用,实现一个8*8的乘法器
module eight_bits_multiplier(a, b, result);
input [7 : 0] a, b;
output [15 : 0] result;
defparam U1.WIDE1 = 8,
U1.WIDE2 = 8;
multibits_multiplier U1(a, b, result);
endmodule