verilog 中parameter的定义

本文详细介绍了Verilog语言中parameter的两种声明位置(模块名后或端口声明后),以及模块端口声明风格的区别。同时讲述了如何在模块实例化时使用defparam语句修改参数值,以《VerilogHDL入门》第三版为例进行讲解。
摘要由CSDN通过智能技术生成

verilog 中parameter定义可以放在模块名后面,例如:


module u1 #(
    parameter width = 1)(
    clk,
    a,
    b
    );
    input clk;
    input a;
    output [width-1:0] b;

    ...

endmodule


module u2 #(
    parameter width = 1)(
    input clk,
    input a,
    output [width-1:0] b
    );

    ...

endmodule

也可以放在模块端口声明后面,例如:


module u3  (
    input clk,
    input  a,
    output b
    );
    parameter width = 1;

    ...

endmodule


module u4  (
    clk,
    a,
    b
    );
    input clk;
    input a;
    output [width-1:0] b;

    parameter width = 1;

    ...

endmodule

模块的端口声明可以放在端口列表里,称为模块端口声明风格,例如u2,u3;
也可以放在模块内部,称为模块端口列表风格,例如u1,u4。

模块的参数也有两种声明风格:放在参数端口中声明,例如u1,u2;
放在模块内部声明,例如u3,u4。

u1,u2,u3,u4都可以在例化的时候,修改参数a的值。
有两种方法可以修改参数a的值:

  1. 使用定义参数语句(defparam)修改参数值

    
    module top(
        input clk,
        input a,
        output [2:0]b
    )
    
    defparam u1_inst.width = 3;
    
    u1 u1_inst(
        .clk(clk),
        .a(a),
        .b(b)
        );
    
    endmodule
    
  2. 在模块实例引用中修改参数值

    下面代码中对u1和u4的例化把u1和u4中的参数a的值修改成3.

    module top(
        input clk,
        input a,
        output [2:0]b,c)
    
        u1 #(.width(3)) u1_inst(
            .clk(clk),
            .a(a),
            .b(b)
            );
    
        u4 #(.width(3)) u4_inst(
            .clk(clk),
            .a(a),
            .b(c)
            );
    
    endmodule
    
    

本文主要参考:《Verilog HDL入门》第三版,2019年由北京航空航天大学出版社出版。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值