模板-V1
模型功能
- system verilog和verilog的区别:引入面向对象编程,类似C和C++的区别
- system verilog的应用范围:硬件描述、系统仿真、系统验证
- system verilog的使用方法:按照UVM或者其他验证方法学进行系统级仿真及验证
模型框图
system verilog与verilog的主要区别
属性 |
verilog |
system verilog |
硬件描述 |
具备 |
具备 |
模块仿真 |
具备 |
具备 |
系统仿真 |
不具备 |
具备 |
系统断言 |
不具备 |
具备 |
面向对象 |
不具备 |
具备 |
system verilog的应用范围
应用范围 |
verilog实现 |
system verilog实现 |
RTL |
主要应用场景 |
可以使用verilog语法实现完美兼容 |
逻辑层 |
支持 |
拓展了端口interface在端口中传输,实现总线传输 |
系统层 |
支持 |
兼容 |
系统层 |
支持 |
兼容 |
驱动仿真 |
支持 |
兼容 |
系统仿真 |
不支持 |
使用对象完成场景搭建,可以完美匹配系统仿真的需求 |
系统断言 |
简单支持 |
完美支持,具备专用断言语法 |
一个简易的system verilog系统仿真及验证模型
- DUT是设计单元
- 总线合集是利用interface支持传递进行数据的分流控制
- 场景描述使用并行描述,用于确保新功能可以和旧功能同步工作
- 阶段描述使用选择性描述,用于确保每个总线都可以支持多种形式的工作
- 断言则是对数据进行格式检查,同时支持按照场景进行检查
实现步骤
DUT设计
- 为了保持描述的独立性,一般用verilog进行描述,最终形成一个顶层文件
- 将顶层文件作为一个模块加入到仿真系统就可以进行仿真
- DUT的中一些高延时的参数可以根据仿真进行降低,所以DUT最好将MD_SIM传递到每个模块,方便仿真和设计分离(FPGA设计技巧)
总线合集
- 使用interface实现的总线可以在system verilog中传递,所以可以将verilog顶层的信号全部转化为总线合集
!转化成总线可以有效避免由于信号增加导致的连接层工作量
- 增加穿透性总线,直接连接到verilog里面,用于断言检测中间变量
- 合并总线声明到一个文件
- 这个主要是vivado的文件调用会合并显示,导致分文件的总线会占用大量的位置,导致寻找困难
场景描述
- 首先确定一个简单的场景,用于数据格式及输入输出控制信号的检查,也就是理论运行场景
- 建立场景对应的运行阶段
- 并行运行各个总线的对应阶段
- 建立场景对应的结果确认,替代手动检查,同时完成理论检查
阶段实现
- 确定本阶段需要调用的总线
- 实现总线需要进行驱动逻辑
- 选择若干逻辑进行运行,完成场景的阶段性逻辑
驱动的编写
- 在阶段内声明驱动任务
- 将驱动时序使用延时实现
- 输出驱动断言状态,方便总线检测的开启和结束
总线的断言检测
- 获取需要观测的总线
!可以是仿真顶层的总线,也可以是DUT内部的总线的输入输出
- 等待驱动运行,出现允许检查标志
- 按照总线格式进行格式检查
- 导入软件仿真结果进行数据信息检查
- 输出标准的检查报告
最终效果
合集实现
- 本合集将会按照本文的模型总览,逐个实现每个步骤
!一些步骤可能会比较多,需要进行多次实现
- 接下来将以图像的简易灰度来演示整个系统级仿真的流程
- 后续的system verilog都将以SV替代,方便书写
调用内容