verilog中参数传递与参数定义中#的作用(二)
一、module内部有效的定义
用parameter来定义一个标志符代表一个常量,称作符号常量,他可以提高程序的可读性和可维护性。parameter是参数型数据的关键字,在每一个赋值语句的右边都必须是一个常数表达式。即该表达式只能包含数字或先前已经定义的参数。
parameter msb=7; //定义参数msb=7
parameter r=5.7; //定义r为一个实型参数5.7
parameter byte_size=8,byte_msb=byte_size-1; //利用常数表达式赋值
参数型常量经常用于定义延迟时间和变量宽度。在模块和实例引用时,可以通过参数传递改变在被引用模块或实例中已经定义的参数。
module exam_prj
#(parameter WIDTH=)
//端口内的参数只能在这使用
(
input [WIDTH-:] dataa,//[WIDTH-1:0]
input [WIDTH-:] datab, output reg [WIDTH:] result
);
parameter Conuter_Top = 4'd9;//用于代码部分的参数
//代码部分省略
这里出现的两个参数parameter,第一个表示只在端口设置时使用,后面的是对于模块内部的使用。
二、参数传递
传递的方法:
1、module_name #( parameter1, parameter2) inst_name( port_map);
module adder_16(sum,a,b);
parameter time_delay=,time_count=;
......
endmodule
module top;
wire[:] a1,b1;
wire[:] a2,b2,sum1;
wire[:] sum2;
adder_16 #(,) AD1(sum1,a1,b1);//time_delay=4,time_count=8
endmodule
2、module_name #( .parameter_name(para_value), .parameter_name(para_value)) inst_name (port map);
//module exam_prj_tb;
exam_prj//---------
#(
.WIDTH(),
.Conuter_Top('d5)
)
exam_prj_inst//------*注意例化时的名字在这个位置*
(
.dataa(dataa),
.datab(datab),
.result(sum)
);
3、在多层次的模块中,改变参数需要使用defparam命令。 defparam Test.T.B1.P=2; //Test、T、B1分别是高层模块中的底层模块实例。
参数需要写绝对路径来指定。
三、子模块调用子模块
module Sub_Sub_Modu;
parameter W1=;
... endmodule module Sub_modu;
parameter W=;
...
Sub_Sub_Modu #(W) ( );
...
endmodue module Main_Modu ;
...
Sub_Modu #() ; //这样W和W1都是16位
..
endmodue
verilog中参数传递与参数定义中#的作用(二)的更多相关文章
- Python中sorted(iterable, *, key=None, reverse=False)函数参数定义中的独立星号(*)的含义
老猿在 <Python中函数的参数带星号是什么意思?>中介绍了Python函数中参数带星号的含义,而在实际使用和Python的标准文档中,会看到某写函数(如sorted(iterable, ...
- VB类模块中属性的参数——VBA中Range对象的Value属性和Value2属性的一点区别
在VB中,属性是可以有参数的,而VBA中属性使用参数非常常见.比如最常用的:Worksheet.Range("A1:A10") VB的语法,使用参数的不一定是方法,也有可能是属性 ...
- spring MVC中传递的参数对象中包含list的情况
测试需要的jar包:spring 3.2.jar + jackson-all-1.8.5.jar. 写代码时碰到个需要将对象里的子明细一起传递到controller里去,当时就想直接将参数一起传递过 ...
- C函数和宏中的可变参数
一:调用惯例 函数的调用方和被调用方对函数如何调用应该有统一的理解,否则函数就无法正确调用.比如foo(int n, int m),调用方如果认为压栈顺序是m,n,而foo认为压栈顺序是n, m,那么 ...
- golang struct 定义中json``解析说明
在代码学习过程中,发现struct定义中可以包含`json:"name"`的声明,所以在网上找了一些资料研究了一下 package main import ( "enco ...
- TP v5中环境变量在项目中的应用
环境变量,顾名思义就是在不同的系统环境,同一个变量的值可以有所不同. 如开发环境.测试环境与正式环境下,数据库配置.静态资源文件Url前缀.缓存.各种key等配置都不相同,对于提交到仓库中的代码,理论 ...
- java中可变长参数的定义及使用方法
JAVA中可以为方法定义可变长参数( Varargs)来匹配不确定数量的多个参数,其定义用“...”表示.其实,这类似于为方法传了一个数组,且在使用方法上也和数组相同,如下: public void ...
- mixin 在传参中可以出现 参数 在类内部可以定义 作用域
mixin 在传参中可以出现 参数 在类内部可以定义
- C#中方法的参数的四种类型
C#中方法的参数有四种类型: 1. 值参数类型 (不加任何修饰符,是默认的类型) 2. 引用型参数 (以ref 修饰符声明) 3. 输出型参数 (以out 修 ...
随机推荐
- python 生成器&迭代器
列表生成式 要生成[1x1, 2x2, 3x3, ..., 10x10]>>> [x * x for x in range(1, 11)]for循环后面还可以加上if判断>&g ...
- css笔记 2
定义一个类选择器.center {text-align: center} h1 有 center 类.这意味将遵守 ".center" 选择器中的规则.<h1 class=& ...
- Eigen参考资料
Getting started https://eigen.tuxfamily.org/dox/GettingStarted.html long tutorial https://eigen.tuxf ...
- IntelliJ IDEA自动补全变量名称和属性名称的快捷键
自动补全变量名称 : Ctrl + Alt + v 自动补全属性名称 : Ctrl + Alt + f
- 请求是如何传递给StandardEngine的?
将请求的传递过程分解学习. CoyoteAdapter将中持有Connector的引用,所以在Coyote这个类中Connector查找它所属的StandardService,而StandardSer ...
- redis安装和简介(2)
承接上篇未完成的配置...此次使用的的 Redis-x64-3.2.100 版本 一.打开redis服务器 方式一:打开 redis-server.exe 显示如下图: 图中: 显示运行进程号.当前运 ...
- 一款css3的标签动画效果
/*响应式设计,动画效果需引入animate.min.css库*/ <div class="index_tag"> <div class="rowFlu ...
- 使用jmeter进行简单的压测
安装下载 前往官网下载,[地址] 环境 需要java环境,此处略 最好对jmeter配置下环境变量,方便打开,此处略 运行 启动jmeter 进入到bin目录,输入 ./jmeter 启动 ...
- Docker创建镜像文件并在容器中运行
1.如何创建镜像文件 首先找到Docker ToolBox安装的路径,在路径下直接新建Dockerfile文件 在Dockerfile文件里写入的内容为: FROM docker/whalesay:l ...
- 使用Fiddler做抓包分析
转载:http://blog.csdn.net/ohmygirl/article/details/17849983 Fiddler抓取HTTP请求. 抓包是Fiddler的最基本的应用,以本博客为例, ...