verilog基础—规范化参数定义parameter

引言

采用parameter可以让程序变得可维护性,所以在verlog中,尽量在有数据可能发生变动的地方,设置为parameter,以免以后又从头开始更改。
parameter经常用于定义数据位宽,定义时间延迟,在模块和实例引用时,可以通过参数传递,改变被引用的模块。因此我们尽量把所有的可能变动的参数设置在顶层,一眼明了,方便日后维护。

端口参数与模块内部参数

在这里插入图片描述
本module内有效的定义,可用于参数传递;
如果在模块内部定义时无法进行参数传递,

参数传递

参数传递经常用于顶层的参数传递给子模块,这样我们只需要关注顶层实体的内容,把子模块的内容当做一个黑箱子即可,这也是非常实用的。
在这里插入图片描述
可以看到参数传递和例化是非常继续相似的,

   顶层模块名# (
        .子模块参数( 顶层参数)
        ) 子模块名(
子端口1(顶层端口1)
子端口2(顶层端口2)
。
。
子端口n(顶层端口n)
        );

众说parameter、define、localparam的区别

`define:           作用 -> 常用于定义常量可以跨模块、跨文件;
                           范围 -> 整个工程;
parameter:         作用 -> 常用于模块间参数传递;
                           范围 -> 本module内有效的定义;
localparam          作用 -> 常用于状态机的参数定义;
                           范围 -> 本module内有效的定义,不可用于参数传递;
                                  localparam cannot be used within the module port parameter list.

defparam

defparam这个单独拿出来说一下,其实这个参数,个人觉得意义不大,因为你用parameter参数实例化就可以很好的解决问题,defparam用于重定义参数的数,可以通过
defparam 顶层.子模块名1.子模块名2=XXX
这样的语法格式更改,从而实现专门针对某一个子模块更改,这样有助于例化了多个相同的子模块,但我只更改一个子模块的问题。!
我们来一起看看官方文档IEEE verilog 2005
defparam的语法我们就去亲自查阅官方语法!这样才能有收货。

在这里插入图片描述
这段说了,defparam适用于改变指定层次模块下的参数,不影响其他模块的参数。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这段话也再次说明了,即使是使用相同的子模块实例化生成的模块,也不会受影响,defparam只针对指定路径下的参数更改。
/------------------------------------------------------------------------------------------------------------------------------------------------------/
defparam目前所有综合工具都不支持综合,所以仅仅用于仿真。
在这里插入图片描述

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值