当前位置:网站首页>SystemVerilog: 验证知识点点滴滴
SystemVerilog: 验证知识点点滴滴
2022-08-11 00:36:00 【笨牛慢耕】
目录
3. import pkg::*是将pkg的所有都导入进来吗?
1. 软件世界和硬件世界
Class代表软件世界,Module代表硬件世界,Interface是连接软件世界和硬件世界的桥梁,但是更加偏硬件一些。
Package也是软件世界的,相当于是SV中用于定义namescope的东西。Interface和Module(由于含有硬件世界的成分)不能包含在(属于软件世界的)Package中。
类中的成员(数据、函数、任务)缺省地都是automatic类型。如果需要static类型成员的话,需要用static显式地指定。Module中的所有变量、函数、任务都缺省为static。如果需要automatic类型成员的话,需要用automatic显式地指定。
Module的例化都是静态的。Class的对象的创建是动态的。这里所谓的静态是指在编译后就已经生成了。而动态则是指要到仿真实际开始后执行new()创建。
Module一经例化,模块的实例自始自终一直存在。而SV中关于对象生命期管理是采用自动回收机制,如果一个对象已经没有任何一个handle指向它,它就被自动回收了。
由于Module和Interface是硬件世界的,它们的例化是静态的,所以在编译后它们就已经被创建了。但是对象的创建是动态的,必须在仿真真正开始后才会被创建。以QuestaSim仿真为例,即便在执行了vsim命令后,对象其实还没有被创建,直到执行了“run 0ns”以后(那些应该在一开始就创建的)对象才真正被创建。
2. 什么是package
Ref: SystemVerilog Package (chipverify.com)
SystemVerilog中的package提供了保存和共享数据、参数和方法的机制,可以在多个module、class、program和interface中重用。
package中声明的内容都属于这个package作用域(scope)。
如果要想使用package中的东西,就需要先import这个package,然后通过package引用。SV中的import与python中的import是相同的功能。
package my_pkg;
typedefenumbit [1:0] { RED,YELLOW, GREEN, RSVD } e_signal;
typedefstruct { bit [3:0]signal_id;
bit active;
bit [1:0] timeout;
} e_sig_param;
function my_func();
$display ("mypkg::my_func is called...");
endfunction
endpackageimport的时候可以逐个import想要使用的东西,或者一锅端将package中的所有东西都import进来,如以下例子所示:
//import my_pkg::* ; // Import all things defined in my_pkg
import my_pkg::my_func ;// Import my_func only from my_pkg
module tb_top;
initial begin
my_func();
end如果在package中定义的一个变量或者函数名与外部其它定义的变量或函数名冲突的时候,需要用pkg_name::var的形式进行引用以示区分。
import my_pkg::* ; // Import all things defined in my_pkg
typedef enum bit [1:0] { RED,YELLOW,GREEN} e_pixel;
module tb_top;
initial begin
e_signal signal = RED;
e_pixel pixel = RED;
my_func();
end
endmodule以上例子中,用到了两个RED,会发生冲突。这是需要加package名前缀用于区分,如下所示
...
e_signal signal = my_pkg::RED;
...3. import pkg::*是将pkg的所有都导入进来吗?
一个常见的误解是使用“import pkg::*”会将一个package的所有的东西一股脑儿都导入进来。因此有人会担心这样做会不会使得编译产生的库会不适当地变得巨大因而导致仿真内存紧张?
其实不会。
“import pkg::*”这条语句的效果是告诉仿真器,当在当前namescope中没有找到某个类、变量或者函数、任务等的声明时可以到该pkg中去找。而且仿真器在寻找某个类、变量、函数、任务等时是遵循所谓的“就近原则”。
当有多个packge中都包含某个待搜索的{ 类、变量、函数、任务}名,而且它们都以“import pkg::*”的形式被导入时,此时会发生name collision,最明智的做法是如上节所述一样以pkg::name的显式的形式进行引用。
4. import vs include
如上所述,import是用于package的导入。
`include将文件中所有文本原样插入包含的文件中。这是一个预处理语句,`include在import之前执行。
import不会复制文本内容。但是import可package中内容引入import语句所在的作用域。
To put it simply, include is equivalent to copy/paste or insertion of whatever is present in that file to wherever you include; import is used to make all/select variables from a package visible.
边栏推荐
- Web-based meal ordering system in epidemic quarantine area
- 【考虫 六级英语】语法课笔记
- 只会懒汉式和饿汉式 你还不懂单例模式!
- J9数字论:DAO治理更像一种生态过程:治理原生于网络,不断演变
- Jvm.分析工具(jconsole,jvisualvm,arthas,jprofiler,mat)
- nodejs项目连接mysql数据库
- 分布式.性能优化
- "NIO Cup" 2022 Nioke Summer Multi-School Training Camp 3 DF Problem Solving
- C#使用计时器
- Which foreign language journals and conferences can be submitted for software engineering/system software/programming language?
猜你喜欢

"NIO Cup" 2022 Nioke Summer Multi-School Training Camp 3 DF Problem Solving

#yyds干货盘点#【愚公系列】2022年08月 Go教学课程 008-数据类型之整型

Jvm.分析工具(jconsole,jvisualvm,arthas,jprofiler,mat)

C# using timer

【openpyxl】过滤和排序

Elastic scaling of construction resources

BEVDepth: Acquisition of Reliable Depth for Multi-view 3D Object Detection Paper Notes

YOLOv5的Tricks | 【Trick10】从PyTorch Hub加载YOLOv5

"NIO Cup" 2022 Nioke Summer Multi-School Training Camp 2 DGHJKL Problem Solution

【考虫 六级英语】语法课笔记
随机推荐
Jvm. Profiling tools (jconsole, jvisualvm, arthas, jprofiler, mat)
91.(cesium之家)cesium火箭发射模拟
sed of the Three Musketeers of Shell Programming
微信小程序获取当前页面的url和参数
力扣------使用最小花费爬楼梯
异常和异常处理机制
深度解析volatile关键字(保证够全面)
虚拟电厂可视化大屏,深挖痛点精准减碳
Difference Between Image Recognition and Semantic Segmentation
【考虫 六级英语】语法课笔记
【爬虫】scrapy创建运行爬虫、解析页面(嵌套url)、自定义中间件(设置UserAgent和代理IP)、自定义管道(保存到mysql)
[21天学习挑战赛——内核笔记](五)——devmem读写寄存器调试
Jvm.分析工具(jconsole,jvisualvm,arthas,jprofiler,mat)
YOLOv5的Tricks | 【Trick11】在线模型训练可视化工具wandb(Weights & Biases)
二维数组实战项目--------《扫雷游戏》
[Excel知识技能] 将文本型数字转换为数值格式
[Excel knowledge and skills] Convert "false" date to "true" date format
详谈二叉搜索树
鲲鹏编译调试及原生开发工具基础知识
In 22 years, the salary of programmers nationwide in January was released, only to know that there are so many with annual salary of more than 400,000?