fpga_feixiang 发表于 2020-7-16 15:55:54

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

大鹏 发表于 2020-7-19 16:05:23

Verilog中的参数
页: [1]
查看完整版本: Verilog中的参数