SystemVerilog学习(1)——验证导论

news2024/11/17 17:46:39

写在最前

        选课不慎,选修课选了个SystemVerilog,事情比必修还多,上课老师讲的一点用没有,但是学分还得修,只能自学了,既来之则安之。

一、什么是SystemVerilog

        SystemVerilog简称为SV语言,是一种相当新的语言,它建立在Verilog语言的基础上,是 IEEE 1364 Verilog-2001 标准的扩展增强,兼容Verilog 2001,将硬件描述语言(HDL)与现代的高层级验证语言(HVL)结合了起来,并成为下一代硬件设计和验证的语言。

        System Verilog是Verilog语言的拓展和延伸。Verilog适合系统级,算法级,寄存器级,逻辑级,门级,电路开关级设计而System Verilog更适合于可重用的可综合IP和可重用的验证用IP设计,以及特大型基于IP的系统级设计和验证。

        相比与HDL,HVL具有一些典型的性质:

        (1)受约束的随机激励产生

        (2)功能覆盖率

        (3)更高层次的结构,尤其是面向对象的编程

        (4)多线程及线程间的通信

        (5)支持HDL数据类型,例如Verilog的四状态数值

        (6)集成了事件仿真器,便于对设计施加控制

        简单说,SV是建立在Verilog基础上的,一种用于验证的语言(其实也可以用于设计吧,毕竟很多综合工具都是支持SV的)。

二、验证流程

        验证的流程并行于设计的流程。对于每个设计模块,设计者需要首先阅读硬件描述规范,解析自然语言描述,然后使用RTL代码之类的机器语言创建相应的逻辑。为了完成这个过程,设计者需要知道输入格式,传输函数和输出格式,解析过程中总会有模糊的地方,原因可能是规范文档本身的表达不清楚,遗漏了细节或者细节不一致。验证工程师也必须阅读硬件规范并拟定验证计划,创建测试来检查RTL代码是否准确实习了所有的特征。

三、基本测试平台功能 

        测试平台的用途在于确定待测试的正确性。包含下列步骤:

        (1)产生激励

        (2)把激励施加到DUT上

        (3)捕捉响应

        (4)检测正确性

        (5)对照整个验证目标测算进展情况

四、分层的测试平台

        对于任意一个新型的验证方法学来说,分层的测试平台是一个关键的概念。虽然分层似乎会使得测试平台变得更加复杂,但是它能够把代码分而治之,确实有助于帮助测试工程师减轻自己的工作负担。不要尝试去编写一个包含所有功能的子程序,用它来随机产生所有类型的激励,包含合法的非法的,并使用多层协议进行错误注入。这样的子程序很快就会变得很复杂,并且难以维护。

4.1 信号与命令层

        下图是一个测试平台中最低的几个层次

        在底部的信号层,包含有待测试和把待测试设计连接到测试平台的信号。

        再往上一层就是命令层,执行总线读或者写命令的驱动器驱动了待测设计的输入。待测设计的输出与监视器相连,监测器负责监测信号的变化,并把这些变化按照命令分组。断言也穿过命令层与信号层,它们负责监视独立的信号以寻找穿越整个命令的信号变化。

4.2 功能层 

        下图为加上功能层的测试平台,功能层向下面对的是命令层。代理(在VMM 中称为事务处理器)接收到来自上层的事务,例如,DMA读或写,把它们分解成独立的命令。这些命令也被送往用于预测事务结果的记分板。检验器则负责比较来自监视器和记分板的命令。

4.3 场景层

        如图1.11所示,功能层被位于场景层中的发生器所驱动。什么是场景呢?记住一点,作为验证工程师,你的工作是确保待测设备能够完成预期的任务。一个设备案例是MP3 播放器,它能一边播放事先存储好的音乐,一边从一台主机上下载新的音乐,并且同时对用户输人如音量调整或音轨控制等操作保持响应。这中间的每一个操作都能称为一个场景。下载一个音乐文件需要若干步骤,例如前期准备时的控制寄存器读和写、歌曲传送过程中多次DMA写,以及之后的很多读写操作。场景层就是负责组织协调这些步骤的,操作的参数如音轨大小和寄存器位置等都采用受约束的随机值。
        在测试平台环境中的这些块(位于图1.11虚线框内)是在刚开始开发的时候画出来的。随着项目的进展,它们可能会有一些变化,你也可能会加入一些功能,但是这些块对于每个独立的测试都是不应该改变的。可以通过在代码中留下"钩子"来做到这一点,这样即使这些块的行为需要在测试时改变,也不必重新编写代码。"钩子"可以使用工厂模式和回调函数来创建。

4.4 测试的层次和功能覆盖率

        现在到了测试平台的最顶层——测试层,如图1.12所示,待测设计模块间的漏洞是比较难以发现的,因为这些模块可能是不同的人按照不同的规范设计出来的。

        这个顶层的测试就像一个指挥官:他不演奏任何乐器,但引领着其他人的表演,测试包含了用于创建激励的约束。
        功能覆盖率可以衡量所有测试在满足验证计划要求方面的进展,随着各项测量标准的完成,功能覆盖率代码在整个项目过程中会经常变化,由于代码经常被修改,所以它不作为测试环境的组成部分。
        你可以在受约束的随机环境中创建"定向测试"。只需在随机序列中间插人定向测试的代码,或者把两部分代码并列。定向代码执行你期望的任务,而随机的"背景噪声"可能会使漏洞暴露出来,而且漏洞还有可能是在你从来没有想到过的模块里。
        在你的测试平台中是否需要所有的层次呢?答案要视待测设计而定。设计越复杂。则所需的测试平台就要越完备。测试层则是必须的。对于一个简单的设计来说,场景层可能过于简单以至于可以把它合并到代理中。在估算对一个设计进行测试所需要的工作量时。不要以门数作为计算依据,而应该考虑设计人员的数目。每次往设计团队里增加一个人员,就意味着同时也增加了一种对规范的不同解读。
        当然,你可能还需要更多的层次。如果你的待测设计有多个协议层,那么每个层都应该在测试平台环境中有对应的层。例如,你使用IP封装了TCP流量,然后通过以太网数据包的形式发送,对这种情况的测试应该考虑使用三个独立的层来产生和校验数据。如果能够使用已有的验证构件则更好。
        图1.12中需要注意的最后一点是,它只给出了各块之间一些可能的连接方式,你的测试平台模块间的连接可能会与之不同。比如你的测试层可能需要连接到驱动器层以迫使物理漏洞出现。这里给出的只是一些引导——实际当中应该是,你需要什么就创建什么。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1115701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

攻防世界web篇-get_post

打开给出的地址 将浏览器上的地址http://61.147.171.105:58937/改为http://61.147.171.105:58937/?a1 输入?a1是完成了第一步,get请求,接下来要完成post的请求 这里,我使用的backbar quantum插件 得出flag值

【剑指Offer】32.从上往下打印二叉树

题目 不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返…

深度强化学习 第 4 章 DQN 与 Q 学习

4.1 DQN 最优动作价值函数的用途 假如我们知道 Q ⋆ Q_⋆ Q⋆​,我们就能用它做控制。 我们希望知道 Q ⋆ Q_⋆ Q⋆​,因为它就像是先知一般,可以预见未来,在 t 时刻就预见 t 到 n时刻之间的累计奖励的期望。假如我们有 Q ⋆ Q…

【关于FPGA内部die到pin的延时数据,即pin delay获取方法】

首先,本文只介绍Xilinx的,Alteral的以后。。 第一,生成平台 Xilinx目前在用的是ISE,和Vivado;二者之间并不是可以互相替代的,或者说这两者不完全是迭代的关系。 第二,先介绍常用的–VIVADO 这里又有几种…

Linux系统之passwd命令的基本使用

Linux系统之passwd命令的基本使用 一、passwd命令介绍1.1 passwd命令简介1.2 passwd命令起源 二、passwd命令的使用帮助2.1 passwd命令的help帮助信息2.2 passwd命令的语法解释 三、查看passwd相关文件3.1 查看用户相关文件3.2 查看组相关文件 四、passwd命令的基本使用4.1 设置…

mysql MVC jsp实现表分页

mysql是轻量级数据库 在三层架构中实现简单的分页 在数据库sql编程中需要编写sql语句 SELECT * FROM sys.student limit 5,5; limit x,y x是开始节点,y是开始节点后的需要显示的长度。 在jdbc编程中需要给出x和y 一般是页数*页码,显示的长度。 代…

谷歌云:下一代开发者和企业解决方案的强力竞争者

自从2018年Oracle前研发总裁Thomas Kurian加入谷歌云(Google Cloud)并出任谷歌云CEO以来,业界对于谷歌云的发展就十分好奇。而谷歌云的前任CEO Diane Greene曾是VMware的创始人之一,那么两任企业级技术和解决方案出身的CEO&#x…

windows上下载github上的linux内核项目遇到的问题

问题一:clone的时候报错 Cloning into G:\github\linux... POST git-upload-pack (gzip 27925 to 14032 bytes) remote: Counting objects: 6012062, done. remote: Compressing objects: 100% (1031/1031), done. remote: Total 6012062 (delta 893), reused 342 (…

Android推送问题排查

针对MobPush智能推送服务在使用过程中可能出现的问题,本文为各位开发者们带来了针对MobPush安卓端推送问题的解决办法。 TCP在线推送排查 排查TCP在线收不到推送时,我们先通过客户端的RegistrationId接口获取设备的唯一标识 示例: MobPush…

【Reinforcement Learning】Ubuntu中mujoco210 mujoco_py D4RL安装及错误解决

Ubuntu中mujoco210 mujoco_py D4RL安装及错误解决 本文根据一篇知乎文章链接在此进行配置,记录在配置过程中遇到的一些问题,原文作者的教程很详细,在此对原作者表示感谢~ 直接进行知乎原文的第2.2 有效安装过程(避坑) 2.注意上…

行业领先的三个企业正在利用聊天机器人变得更强

聊天机器人已成为客户服务领域的革命者,深刻地改变了企业与客户互动的方式。这些虚拟助手简化了交互,提供了24/7全天候高效和个性化的支持。凭借先进的技术和自然语言处理能力,聊天机器人擅长快速处理查询。 效率是聊天机器人的关键优势。它…

《数据结构、算法与应用C++语言描述》-队列的应用-图元识别问题

《数据结构、算法与应用C语言描述》-队列的应用-图元识别问题 图元识别 问题描述 数字化图像是一个 mxm 的像素矩阵。在单色图像中,每一个像素要么为0,要么为 1。值为0的像素表示图像的背景。值为1的像素表示图元上的一个点,称其为图元像素…

A_搜索(A Star)算法

A*搜索(A Star) 不同于盲目搜索,A算法是一种启发式算法(Heuristic Algorithm)。 上文提到,盲目搜索对于所有要搜索的状态结点都是一视同仁的,因此在每次搜索一个状态时,盲目搜索并不会考虑这个状态到底是有利于趋向目标的&#x…

STM32使用WWDG窗口看门狗

1 WWDG 介绍 1.1 WWDG 简介 窗口看门狗 WWDG 其实和独立看门狗类似,它是一个 7 位递减计数器不断的往下递减计数, 当减到一个固定值 0X40 时还不喂狗的话,产生一个 MCU 复位,这个值叫窗口的下限,是固定的值&#xf…

Android 开发技巧:音乐播放器的后台处理【Service、Handler、MediaPlayer】

给定部分完成的MusicPlayer项目,实现其中未完成的service部分: 1、创建MusicService类,通过service组件实现后台播放音乐的功能; 2、在MainActivity中通过ServiceConnection连接MusicService,实现对音乐播放的控制&…

Android端自定义铃声

随着移动应用竞争进入红海时代,如何在APP推送中别出心裁显得尤为重要。例如对自己的APP推送赋予独特的推送铃声,能够给用户更加理想的使用体验。 1、个性化提醒铃声有助于当收到特定类型的消息时,用户能够立刻识别出来。 2、不同的推送铃声…

xxl-job任务调度2.0.2升级到2.3.0版本,执行器改造过程中经验总结

xxl-job任务调度2.0.2升级到2.3.0版本 一、背景二、开始改造1、修改pom.xml2、修改Handler3、启动服务并验证4、解决异常5、再次启动服务并验证 一、背景 现在要对一批老项目中的执行器进行升级,原来老项目中的执行器,依赖的任务调度中心xxl-job版本是2…

金和OA SQL注入漏洞

一、漏洞描述 金和OA协同办公管理系统C6软件,为北京金和网络股份有限公司 开发系统,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率的核心思想,为…

Go包介绍与初始化:搞清Go程序的执行次序

Go包介绍与初始化:搞清Go程序的执行次序 文章目录 Go包介绍与初始化:搞清Go程序的执行次序一、main.main 函数:Go 应用的入口函数1.1 main.main 函数1.2 main.main 函数特点 二、包介绍2.1 包介绍与声明2.2 非 main包的 main 函数2.3 包的命名…

剑指Offer || 050.路径总和|||

题目 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节…