当一个模块引用另外一个模块时,高层模块可以改变低层模块用parameter定义的参数值,改变低层模块的参数值可采用以下两种方式:

  1)defparam 重定义参数

  语法:defparam path_name = value ;

  低层模块的参数可以通过层次路径名重新定义,如下例:

module top ( .....)
input....;
output....;
defparam U1 . Para1 = 10 ;
M1 U1 (..........);
endmodule
module M1(....);
parameter para1 = 5 ;
input...;
output...;
......
endmodule

  在上例中,模块M1参数 para1 的缺省值为5,而模块top实例了M1后将参数的值改为10。

  2) 实例化时传递参数

  在这种方法中,实例化时把参数传递进去,如下例所示:

module top ( .....)
input....;
output....;
M1 #( 10 ) U1 (..........);
endmodule

  在该例中,用#( 10 )修改了上例中的参数para1,当有多个参数时,用逗号隔开,如#( 10 , 5 ,

  3 )传递了3个参数值。

  模块参数的方法使得模块的重用性更强,当需要在同一个设计中多次实例化同样的模块,只是参数值不同时,就可以采用模块参数的方式,而不必只因为参数不同产生了多个文件。

引用:

利用defparam定义参数声明语句!
defparam 例化模块名.参数名1 = 常数表达式,
例化模块名.参数名2 = 常数表达式, ……;
格式
defparam语句在编译时可重新定义参数值.
可综合性问题:一般情况下是不可综合的.
提示:不要使用defparam语句!在模块的实例引用时可用"#"号后跟参数的语法来重新定义参数.

[例]
module mod ( out, ina, inb);

parameter cycle = 8, real_constant = 2.039,
file = "/user1/jmdong/design/mem_file.dat";

endmodule
module test;

mod mk(out,ina,inb); // 对模块mod的实例引用
defparam mk.cycle = 6, mk.file = "../my_mem.dat"; // 参数的传递

endmodule

5 模块实例引用时参数的传递——方法之二:利用特殊符号"#"
[例]
module mod ( out, ina, inb);

parameter cycle = 8, real_constant = 2.039,
file = "/user1/jmdong/design/mem_file.dat";

endmodule
module test;

mod # (5, 3.20, "../my_mem.dat") mk(out,ina,inb); // 对模块mod的实例引用

endmodule
被引用模块
参数的传递
必须与被引用模块中的参数一一对应!
建议用此方法!
被引用模块名 # (参数1,参数2,…)例化模块名(端口列表);

verilog中defparam的用法 (verilog调用底层模块(只改变)参数的传递)的更多相关文章

  1. verilog中的function用法与例子

    函数的功能和任务的功能类似,但二者还存在很大的不同.在 Verilog HDL 语法中也存在函数的定义和调用. 1.函数的定义 函数通过关键词 function 和 endfunction 定义,不允 ...

  2. verilog中的task用法

    任务就是一段封装在“task-endtask”之间的程序.任务是通过调用来执行的,而且只有在调用时才执行,如果定义了任务,但是在整个过程中都没有调用它,那么这个任务是不会执行的.调用某个任务时可能需要 ...

  3. verilog中task的用法

    任务就是一段封装在“task-endtask”之间的程序.任务是通过调用来执行的,而且只有在调用时才执行,如果定义了任务,但是在整个过程中都没有调用它,那么这个任务是不会执行的.调用某个任务时可能需要 ...

  4. LPAD在Oracle中和 mssql以及在MySQL中的不同用法 以及调用存储过程方法

    Oracle: ,') from dual ,,') from dual 效果: Mssql: )+ltrim(tt.number_no) from Tabletest as tt 效果: MySQL ...

  5. verilog中参数传递与参数定义中#的作用(二)

    一.module内部有效的定义 用parameter来定义一个标志符代表一个常量,称作符号常量,他可以提高程序的可读性和可维护性.parameter是参数型数据的关键字,在每一个赋值语句的右边都必须是 ...

  6. 在verilog中调用VHDL模块

    习惯了自己发现一些小问题,既然发现了,就记下来吧,不然又要忘了,这是多么悲痛的领悟. 今天在用vivado进行块设计时所生成的顶层模块居然是用VHDL语言描述的,这时郁闷了,表示只看过VHDL语法但没 ...

  7. Verilog中使用'include实现参数化设计

    前段时间在FPGA上用Verilog写了一个多端口以太网的数据分发模块,因为每个网口需要独立的MAC地址和IP地址,为了便于后期修改,在设计中使用parameter来定义这些地址和数据总线的位宽等常量 ...

  8. system verilog中的跳转操作

    在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...

  9. 一段比较有意思的代码——介绍system verilog中的新增幅值语句

    system verilog中新加了很多幅值语句,虽然都只适用于阻塞幅值,但是在某些场合中非常实用. 下面是一段有意思的代码,覆盖了一些用法. package definitions; typedef ...

随机推荐

  1. git报“commiter email "root@localhost.localdomain"does not match your user account”

    首先检查账户邮箱配置是否正确,检查方法: git config --list 发现邮箱及帐号配置正确,但是git push时仍然报如题错误: 原因:git执行add.commit 时已经记录下了做了该 ...

  2. js、css、img等浏览器缓存问题的2种解决方案

    转:http://www.jb51.net/article/42339.htm 浏览器缓存的意义在于提高了执行效率,但是也随之而来带来了一些问题,导致服务端修改了js.css,客户端不能更新,下面有几 ...

  3. [转]sqlmap使用教程

    sqlmap也是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题,sql注入另一方面就是手工党了,这个就另当别论了. 今天把我一 ...

  4. maven下载的jar相应pom文件下载不完整问题。

    今天遇到一个奇葩问题: 同样的项目,我启动报错 : 某个class文件找不到.. 查找maven 依赖也的确没有找到 对应的jar 包. 查找同事项目,可以看到该class对应的 jar 包 是 lo ...

  5. SpringBoot 多环境配置

    转载:https://www.cnblogs.com/gdpuzxs/p/7191436.html 在我们的实际开发中,一般都有三套环境,开发环境,测试环境,生产环境,三套环境的数据库连接配置也有所不 ...

  6. PHP删除空格函数

    删除空格或其他字符的相关函数 ltrim函数 描述:实现删除字符串开始位置的空格或其他字符 语法:string ltrim(string $str [,string $charlist]) 说明:ch ...

  7. CentOS Linux更改MySQL数据库目录位置具体操作

    引言: 由于MySQL的数据库太大,默认安装的/var盘已经再也无法容纳新增加的数据,没有办法,只能想办法转移数据的目录. 下面我整理一下把MySQL从/var/lib/mysql目录下面转移到/ho ...

  8. 47.iOS跳转AppStore评分和发送邮件

    1.跳转到AppStore评分 应用地址是关键:IOS 设备,手机搜索应用,拷贝链接 NSString *appStr =@"https://itunes.apple.com/cn/app/ ...

  9. WebSocket 处理事件

    WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在 W ...

  10. pat1079+1086+1090+1094(树的遍历)感想

    今天做了这4道题,虽然大部分以前做过,但还是有些知识掌握不全. 总结一下所用的树的知识及解决方法 (1)非二叉树的遍历: 非二叉树就是图,所以它的存储结构类似邻接表,c++提供了vector数组可以很 ...