参数parameter的作用大体与宏定义类似,用来改变一个模块的局部参数,如信号宽度等。

参数parameter的声明有两种格式:一种是verilog-1995,在模块内部声明;另一种是verilog-2001新增的,在模块名字后面声明,这种方式更加友好。

使用参数时,这两者格式既可以任选其一,亦可以两种都用,但是推荐使用verilog-2001新增的格式。因此以后我们只说parameter的verilog-2001用法,1995的语法不再介绍。

parameter可以有一个类型(type: signed or unsigned)说明和一个位宽范围(range)说明,其标准格式为:

parameter[ type] [ range ] list_of_param_assignments

先举几个parameter声明的例子:

parameter msb = 7; // defines msb as a constant value 7parameter e = 25, f = 9; // defines two constant numbersparameter r = 5.7; // declares r as a real parameterparameter byte_size = 8,          byte_mask = byte_size - 1;parameter average_delay = (r + f) / 2;parameter signed [3:0] mux_selector = 0;parameter real r1 = 3.5e17;parameter p1 = 13’h7e;parameter [31:0] dec_const = 1’b1; // value converted to 32 bitsparameter newconst = 3’h4; // implied range of [2:0]parameter newconst = 4; // implied range of at least [31:0]

结合上述例子,我们总结一下parameter的类型(type: signed or unsigned)和范围(range)应符合以下规则:

1,参数被赋值后,没有类型或范围定义的参数声明应默认为分配给该参数的值的类型和范围。

2,具有范围定义但没有类型定义的参数应为参数声明的范围且应为无符号。符号和范围不应受参数值覆盖的影响。

3,具有类型定义但没有范围定义的参数应属于声明指定的类型。在被赋值后,带符号的参数应默认为分配给该参数的值的范围。

4,具有类型定义和范围定义的参数声明的符号和范围都是确定好的,参数的符号和范围不受赋值的符号和范围影响。

5,没有范围定义的参数,无论是有符号类型定义还是没有类型定义,都应该有一个隐含的范围,其中 lsb 等于 0,msb 等于分配给参数的值的范围减1。

6,一个没有范围定义的参数,有符号类型说明或没有类型说明,并且分配给它的值的范围是不确定的,那么就应该有一个隐含的范围,lsb 等于 0,msb为 31。

下面举例子说明参数使用的方法,我们以后按照这个格式使用parameter即可:

parameter使用的例子1:

module AAAA#(parameter MSB=3, LSB=0, DEPTH=4) // These parameters can be overridden(      input [MSB:LSB] in,      input clk,      output [MSB:LSB] out,      output full, empty);……endmodule

parameter使用的例子2:

module BBBB#(    parameter A = 8'h11,    parameter B = 8'h08,           parameter C = 8'h00)(    input   axi_tclk ,    output  Fifo_full,    output Fifo_empty,    output  fifo_cmd_empty);……endmodule

模块调用parameter的例子1:

AAAA #  (    .MSB(MSB3),    .LSB(LSB2),    .DEPTH(DEPTH5)  )  AAAA_inst  (    .in(in),    .clk(clk),    .out(out),    .full(full),    .empty(empty)  );

模块调用parameter的例子2:

BBBB #  (    .A (AAA),    .B (BBB),    .C (CCC)  )  BBBB_inst  (    .axi_tclk       (axi_tclk),    .Fifo_full      (Fifo_full),    .Fifo_empty     (Fifo_empty),    .fifo_cmd_empty (fifo_cmd_empty)  );

在模块实例化时,参数传递同样需要遵循以下规则:

1,对于没有范围和类型的参数,默认使用模块实例时传进来数值的范围和类型

2,对于有范围但没类型定义的参数,就认为参数类型时无符号。模块实例传进来数值的范围和类型要转换成参数的范围和类型。

3,对于没有范围但有类型的参数,就使用参数的类型。模块实例传进来数值的类型要转换成参数的类型。对于符号数,默认使用模块实例传进来数值的范围。

4,对于有范围和类型的参数,模块实例传进来数值的类型和范围要转换成参数的范围和类型。

另外,参数传递还有一个关键字defparam,本来用它十分的简单明了和使用方便,但这个关键字如今被滥用了,所以基本上大家都不使用defparam做参数传递,如今该关键字已经过时,应该抛弃掉,以后就不要用了,相关的用法博主也就不介绍了。

参考文献:

1,verilog传奇——从电路出发的HDL代码设计

2,verilog编程艺术

23,verilog之参数parameter介绍相关推荐

  1. Oracle推导参数Derived Parameter介绍

    ORACLE推导参数Derived Parameter介绍 2016-10-30 23:46 by 潇湘隐者,  16 阅读,  0 评论,  收藏,  编辑 Oracle的推导参数(Derived ...

  2. (14)Verilog HDL参数:parameter

    (14)Verilog HDL参数:parameter 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL参数:parameter 5)结语 1.2 ...

  3. Verilog参数Parameter使用、参数化赋值

    1.参数化Parameter使用 方便后期重用,主要用于位宽.计数器大小.延时大小等的定义. 先说Parameters的三大分类分别是,Module Parameter, Local Paramete ...

  4. 浅谈verilog hdl中parameter的用法

    浅谈verilog hdl中parameter的用法 parameter 1.parameter参数使用 事例1: 事例2: 事例3 事例4 2.defparam使用 事例5 3.parameter与 ...

  5. mysql function 参数默认值_MySQL参数log_bin_trust_function_creators介绍

    MySQL的有个参数log_bin_trust_function_creators,官方文档对这个参数的介绍.解释如下所示: log_bin_trust_function_creators Comma ...

  6. Verilog语法中parameter与localparam

    Verilog语法中parameter与localparam 对读者的假设 已经掌握: .可编程逻辑基础 .Verilog HDL基础 .使用Verilog设计的Quartus II入门指南 .使用V ...

  7. php margin参数,margin参数简单介绍_html/css_WEB-ITnose

    margin参数简单介绍: 此属性是用来设置元素的外边距的,再简单不过了,这里就不多介绍了,唯一可能造成困扰的就是它的参数,因为它最多可以有4个参数,当然也有缩写的形式,比如可以只带一个参数,下面就简 ...

  8. 参数(parameter)和属性(attribute)的区别

    参数parameter 属性attribute 区别 来源 parameter来源于用户提交的http请求.以Get方法提交的请求来源于url:以Post提交的请求来源于请求体 web资源中设置的属性 ...

  9. 【Nginx】截取URL中某个参数Parameter

    前言 nginx 1.15.11(下面的代码在此版本测试通过) 截取URL中某个参数Parameter 假设,截取参数method的值.当method=autoGenerateIndex时,截取到au ...

最新文章

  1. asp从后台调出的公式怎么参与运算_吴望一《流体力学》第一章中微分运算公式的初等证明...
  2. Java对象克隆方法(浅克隆、深克隆)
  3. 自制“低奢内”CSS3登入表单,包含JS验证,请别嫌弃哦。
  4. python不能分配给操作员_Python:无法分配给li
  5. sql server版本 性能_迁移到高版本 SQL 数据库后,性能变差了
  6. 使用负载均衡SLB时为何出现请求分布不均衡的现象
  7. python import pandas报错找不到_扎心!“我学了半年 Python,还是找不到工作”
  8. java日期减去天数得日期_Java日期添加天数,减去天数,日历
  9. selenium pydev环境配置中IEdriver server失败
  10. 实验、配置Eigrp 验证,汇总
  11. 计算机能直接和cpu交换数据的是,内存储器_能直接与CPU交换信息的存储器是
  12. 购物也能乐开花 淘宝搞笑评价集萃--2
  13. 电脑垃圾,电脑垃圾怎么清理?电脑垃圾深度清理方法?
  14. sr650安装linux网卡驱动,SR650安装Windows2016添加RAID卡驱动
  15. rust连接不上社区服务器 显示超过时间,rust链接服务器超时
  16. html教程:网页字体的设置
  17. 【等保测评】等保测评师怎么考,前景怎么样?
  18. 全球云服务商排名情况及国内云主机市场占有率份额排名对比
  19. 圣光照耀联盟—PostgreSQL临时表的创建与使用过程
  20. JSON.parse报错: Unexpected identifier

热门文章

  1. 安装配置群晖 DS918+ NAS及常用技巧
  2. 韦东山数码相框项目进度一
  3. [路由][教程]OpenWrt设置为交换机+无线功能教程
  4. QQ发表说说显示服务器超时,qq空间发表说说无法显示的原因
  5. 用友YonSuite荣膺2020中国企业服务SaaS年度产品创新奖
  6. Android鹰眼轨迹追踪
  7. c盘是不是越大越好_Windows系统磁盘分区,C盘划分多大最合适?不是越大越好!...
  8. np.rot90()的用法
  9. 51nod 2075 图书管理员
  10. Nvidia TX2 Ubuntu18.04 安装 IntelRealsense L515 realsense SDK 及 Realsense ROS (make各种问题解答,一篇到位版本)