模板-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替代,方便书写
调用内容
verilog基础模型
======== ======\\ ======= -
|| || \\ // \\ /-\
|| || || // // \\
|| || // || // \\
====== ======= || === ========
|| || || \\ // \\
|| || \\ || // \\
|| || \\ // // \\
|| || ======= // \\
作者:绿叶落秋风,专注FPGA技术分析和分享,转载请注明原文链接:https://www.cnblogs.com/electricdream/p/18113467,文中资源链接如下:
1. GITHUB开源仓库
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期