完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
什么是程序包?
程序包中涵盖了你想在模块之间共享的定义。可以包括参数,枚举类型,结构,类型定义(typedef),类,甚至是任务或函数。 这里有一个程序包,其中定义了数据类型和参数。 // chip_pkg.svpackage chip_pkg; typedef logic [3:0] data_t; parameter LIFE = 9;endpackage |
|
|
|
编译一个程序包
当你使用Questa进行编译时,代码将在工作库中转换为二进制形式。相较于原始代码,编译器可以更快地读取二进制版本,这就是为什么我们要导入程序包而不是包含它们的原因。 UVM程序包有70,000行,但是编译版本几乎是即时导入的。 |
|
|
|
导入程序包
模块通过导入来访问已编译的程序包代码。这里给了一个声明一些参数和变量并显示参数的芯片模块。 // chip.svmodule chip; import chip_pkg::*; // Wildcard import parameter INIT_VALUE = 'hFF; // Initial value data_t my_data = INIT_VALUE; // What are data_t and INIT_VALUE? initial $display("my_data = 'h%x / 'b%b", my_data, my_data); parameter LIFE = 42; // Ask Douglas Adams initial $display("The meaning of life is %0d", LIFE);endmodul |
|
|
|
程序包商店
SystemVerilog编译器在本地查找名称。如果找不到它们,则转到“杂货店”-即程序包。 当你编译此模块时,通配符import语句会告诉编译器该包是查找定义的地方。编译器不会从包中引入所有名称,否则那就是像把整个杂货店带回家! 模块定义参数INIT_VALUE。对于“my_data”的声明,编译器需要弄清楚“data_t”和“INIT_VALUE”的含义。编译器始终从搜索本地范围(即芯片模块)开始,并成功在这里找到INIT_VALUE。但是,这里没有data_t。只有这样编译器才会查看程序包。编译器成功在芯片程序包中找到data_t的定义! 你可以证明在本地范围之后程序包也被搜索了。下一个代码块定义了一个参数LIFE并进行打印。在$display()语句中,编译器需要知道什么是“ LIFE”。由于你只是在本地声明了它,因此即使其中有一个具有相同名称的参数,编译器也不会在chip_pkg中查找。本地定义与包中的参数不冲突,因为从未导入chip_pkg :: LIFE。 |
|
|
|
最低限度
只有在本地作用域中找不到新定义时,SystemVerilog才会从包中引入新定义。这是为什么呢?如果包中的每个名称都被立即导入,则很有可能其中一个包中的名称也许与本地范围内的一个名称冲突,例如芯片模块。最好是只引入最少的名称,而不要太多。 该模块定义了一个叫LIFE的参数。在你最喜欢的模拟器中运行此代码,找出LIFE的意义。如果你是猫的话,假如是9,这会是重要的数字吗?还是说有更深的东西? 如果模块将data_t类型定义为8chip_pkg显式获取LIFE的值?如果在chip_pkg和chop_pkg中都定义了一个新参数,并且都导入了该参数,该怎么办?会发生什么?如果我告诉您答案,您将永远不会记住它。请您自己尝试,花时间,发现真相。 |
|
|
|
只有小组成员才能发言,加入小组>>
692 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
652浏览 9评论
649浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
781浏览 6评论
628浏览 5评论
668浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 21:58 , Processed in 1.061230 second(s), Total 87, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号