Verilog中的参数
参数由一个标识符和一个常数组成。比如:parameter n=4;
parameter S0=2’b00; S1=2’b01;S2=2’b10;S3=2’b11;
标识符n可以在代码中替换表示数字4的地方,S0则可以替换数值2’b00。参数的主要作用是指定参数化的子电路。比如下面的代码中,可以看到代码通过parameter定义了一个常量n,实例化时候通过addern #(.n(32)) addern_0(…)的形式把32传入到参数n中,从而实现32位的加法操作。另外一种调用参数的方法是用defparam,比如下面的例子:
addern addern_0(…)
defparam addern_0.n=32;
但这种方法是不可综合的,通常只是用在testbench当中。
复制代码
module addern(x, y, s, cout);
parameter n=8;
input x;
input y;
output reg s;
output reg cout;
reg c;
integer k;
always @(x,y) begin
c = 1'b0;
for(k = 0; k < n; k = k + 1) begin
s = x^y^c;
c = (x&y)|(x&c)|(y&c);
end
cout = c;
end
endmodule
复制代码
复制代码
`timescale 1ns/1ns
`define clock_period 20
module addern_tb;
reg x,y;
wire cout;
wire s;
reg clk;
addern #(.n(32)) addern_0(
.x(x),
.y(y),
.s(s),
.cout(cout)
);
initial clk = 0;
always #(`clock_period/2) clk = ~clk;
initial begin
x = 0;
repeat(20)
#(`clock_period) x = $random;
end
initial begin
y = 0;
repeat(20)
#(`clock_period) y = $random;
end
initial begin
#(`clock_period*20)
$stop;
end
endmodule Verilog中的参数
页:
[1]