verilog的模块参数定义

在Verilog中,模块参数定义的定义分为两种:模块声明时定义的参数和模块体内部定义的参数。

  1. 模块声明时定义的参数(Module Parameter):

    • 模块声明时定义的参数是在模块实例化时提供的常量值。
    • 它们是通过模块实例化语句的参数列表来指定的。
    • 参数的值在编译时确定,不能在运行时改变。
    • 它们通常用于在不同的模块实例之间共享常量或配置选项。

    示例:

    module MyModule #(parameter WIDTH = 8) (input [WIDTH-1:0] data);
      // 使用模块参数 WIDTH
      // ...
    endmodule
    
    // 实例化 MyModule 并为参数 WIDTH 提供值
    MyModule #(16) myInstance (.data(data_in));
    
  2. 模块体内部定义的参数(Local Parameter):

    • 模块体内部定义的参数是在模块内部使用的常量值。
    • 它们在模块的声明和实例化之间被定义,并且只在模块内部可见。
    • 参数的值在编译时确定,不能在运行时改变。
    • 它们通常用于在模块内部进行计数、索引或配置选项。

    示例:

    module MyModule (input [WIDTH-1:0] data);
      parameter WIDTH = 8;
      // 使用模块内部定义的参数 WIDTH
      // ...
    endmodule
    
    // 实例化 MyModule 并为参数 WIDTH 提供值
    MyModule #(16) myInstance (.data(data_in));
    

总结:

  • 模块声明时定义的参数是在模块实例化时提供的常量值,用于在不同的模块实例之间共享常量或配置选项
  • 模块体内部定义的参数是在模块内部使用的常量值,在模块内部进行计数、索引或配置选项。
  • 两者的区别在于作用范围和可见性,以及模块体内部定义的参数只在模块内部可见,而模块声明时定义的参数可以在模块实例化的时候提供不同的值。
  • 两种方式定义的parameter均可在例化时通过#()对参数进行配置,个人觉得使用起来几乎没区别,取决于个人习惯。
  • 部分博文说当模块体内部定义的参数(Local Parameter)的方式在例化时更新参数会报错的说法是错误的。
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值