Verilog例化,有参数
时间: 2024-01-12 15:03:39 浏览: 127
在Verilog中,我们可以使用模块实例化来重复使用已经定义的模块。当然,有时候我们需要在实例化时给模块的一些参数赋值。
以下是一个例化带参数的模块的示例代码:
```
module adder #(
parameter WIDTH = 8
) (
input [WIDTH-1:0] a,
input [WIDTH-1:0] b,
output reg [WIDTH:0] sum
);
always @(*) begin
sum = {1'b0, a} + {1'b0, b};
end
endmodule
module testbench;
// 实例化模块 adder,并将参数 WIDTH 赋值为 4
adder #(.WIDTH(4)) dut (
.a(4'b0010),
.b(4'b0100),
.sum(sum)
);
reg [4:0] sum;
initial begin
$monitor("sum = %b", sum);
end
endmodule
```
在上面的代码中,我们定义了一个名为 adder 的模块,并定义了一个名为 WIDTH 的参数。在 adder 模块中,我们使用了 WIDTH 参数来定义输入和输出端口的位宽。
在 testbench 模块中,我们实例化了 adder 模块,并将参数 WIDTH 的值赋为 4。我们还定义了输入信号 a 和 b,并使用实例化的 adder 模块计算它们的和,并将结果输出到 sum。
总的来说,Verilog中的模块实例化和参数传递是非常强大的工具,能够帮助我们更好地组织和重用代码。
阅读全文