文章目录
- 1 SV基础
-
- 1.0 阻塞赋值和非阻塞赋值
- 1.0 SV和V的比较
- 1.1 SV数据类型
- 1.2 定宽数组
- 1.3 动态数组
- 1.4 队列
- 1.5 关联数组
- 1.6 数组方法:定位排序
- 1.7 类型转换与\$cast
- 1.8 ref 和 const
- 1.9 任务task,函数function,虚函数virtual
- 1.10 class和module的区别
- 1.11 断言
- 1.12 fork线程
- 1.13 wait和@的区别
- 1.14 事件event、旗语semaphore和信箱mailbox
- 1.15 随机化和约束randomization&constraints
- 1.16 Program和Module
- 1.17 SV的仿真调度机制Scheduler
- 2 UVM基础
-
- 2.1 UVM的优势和劣势、方法学的演变
- 2.2 UVM树形结构
- 2.3 UVM组件Components
- 2.4 启动测试(用例)的方式
- 2.5 Components和Objects的联系与区别
- 2.6 uvm_component_utils和uvm_object_utils的区别
- 2.7 接口interface和virtual interface
- 2.8 sequence机制
- 2.9 phase机制
- 2.10 Objection机制
- 2.11 factory工厂机制
- 2.12 config_db机制
- 2.13 field_automation域的自动化机制
- 2.14 UVM的层次引用
- 2.15 UVM的消息管理
- 2.16 uvm_do系列宏
- 2.17 uvm_create和uvm_send
- 2.18 事务级建模TLM
- 2.19 Register Model寄存器模型
- 3 验证通识/思想
写在前面:本文是笔者最近学习SV和UVM总结所得,主要参考资料为SV官方文档以及UVM白皮书,部分为网上其他博客摘录整理,之后也会陆续更新。若有错误之处,请在评论区或私信给我指出。感谢!
1 SV基础
待补充:
全局变量和局部变量的作用域是什么,静态变量和动态变量的区别是什么
package的作用使用,使用package和include有什么区别
SV的覆盖率如何声明,如何采集覆盖率,bin的数量如何确定,交叉覆盖率的作用是什么,ignore和illegal的bin如果触发了有什么区别
1.0 阻塞赋值和非阻塞赋值
- 阻塞赋值:=。指同一个always块中,后面的赋值语句在前面一句赋值结束后再开始赋值,顺序执行。
- 非阻塞赋值:=>。赋值时先计算非阻塞赋值符号右边的表达式,之后前后的语句是同时赋值的,并行执行,一般时序逻辑用非阻塞。
1.0 SV和V的比较
SV是验证语言,建模能力更强,有点像V和C的结合;V是设计语言,更侧重对硬件电路的具体描述。
- SV有接口,接口把各种信号封装在一起,来进行不同模块之间的信号交流
- SV加了断言,来做验证
- SV还有一些C语言的数据类型,比如用户自定义类型,typedef;枚举类型,还有引用和const