![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SV
黄昏时分
西电本硕,ic验证学习中
展开
-
axi接口注错
对于wdata,它看的是response,这个response是对端给的。所以如果DUT0接受到的指令是少收一个数,那么对于DUT1来说,即使它最后有一个数还没发,但是DUT0接收到的数已经够了,因此就会返回足够的response给DUT1,DUT1就可以正常清零。而DUT0也确实收到了该收的数,因此两边的cnt都可以清零。而如果DUT0收到的指令是多收一个数,那么这最后一个数是等不到的,因为DUT1已经发了所有该发的数,所以DUT0收不到最后一个数,DUT0会少收到一个response,cnt无法清零。原创 2022-05-30 14:53:09 · 271 阅读 · 0 评论 -
忙完这一段,三月中下旬恢复更新
研一上跟着路桑学了SV,自己在学习之余也会翻翻红宝书。本想着期末考试考完从寒假开始就可以全身心投入SV和UVM的学习,但是疫情的缘故导致期末考试推迟到2月末甚至三月中旬。因此寒假除了看红宝书和白皮书去学UVM,还得抽出时间去复习期末考试。等期末考试结束,就可以恢复更新了。...原创 2022-02-13 11:21:28 · 191 阅读 · 0 评论 -
好久没更新了,最近在看红皮书
SV好难....太软件了,OOP好难原创 2021-08-25 16:23:08 · 166 阅读 · 2 评论 -
笔记:路科V0第27节——实现检测器和检查器
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=28检测接口数据的组件-monitorchnl_monitor依靠其对应的chnl_interface从接口上面获取写入每个通道从端的数据,并且将其打包整理,写入到监测数据中monitor_data用来存放监测到的数据,这里的data是个单数据,不是数组。这个变量被chnl_monitor和MCDT_monitor同时使用。在接下来的cheaker数据比较中,由于不需要做数据类型的转换,数据比原创 2021-07-21 13:17:02 · 235 阅读 · 0 评论 -
笔记:路科V0第26节——实现激励发生器
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=27如何实现产生数据transcation激励的组件channel generator以及将这些数据解析并且驱动到channel interface上的驱动组件channel initiator首先,实现channel stimulator:先定义类channel_transcation,表明一个抽象概念的数据包内容。可以看到它的数据成员有若干个用rand修饰的成员变量,表明这些变量都是随机的。原创 2021-07-20 22:17:25 · 250 阅读 · 1 评论 -
笔记:路科V0第25节——MCDT测试结构
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=26SV的核心特性是面向对象和随机约束,分别对应绿皮书第五第六章。MCDT是MCDF的迷你版本。从这一节课开始,下面的内容都是关于最后实验的了。他讲的异常跳…完全不懂,这部分绿皮书上没有,要百度其他人学习他那些实验的经验贴学习。...原创 2021-07-14 21:30:56 · 1745 阅读 · 3 评论 -
笔记:路科V0第24节——线程的通信
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=25信箱的语法,和旗语有些像。从这里也可以更好理解阻塞非阻塞:put()是阻塞,表明任务会被一直挂起,在仿真过程中会一直占用仿真资源。而try_put是非阻塞,成功就是成功失败就是失败,不会一直占用仿真资源。队列的存取方法是非阻塞的。...原创 2021-07-14 20:35:47 · 110 阅读 · 0 评论 -
笔记:路科V0第23节——线程的同步
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=24利用event语句可以实现各个事件之间相互配合:首先声明两个新事件,接着把事件done赋值给done_too,这样done和done_too指向同一个事件,如果其中一个事件被触发,相当于同时触发了这两个事件。然后定义了一个trigger任务,作用是对事件event进行触发。接着看下面的第一个fork…join语句,语句里的@done_too表明这个线程会持续检测done_too信号是否被触发,直到原创 2021-07-14 14:25:22 · 124 阅读 · 0 评论 -
笔记:路科V0第22节——线程控制
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=23在Verilog中,initial和always都可以看做独立的线程,always线程会一直占用仿真的资源,因为它们并不会结束。而验证环境中的线程都为initial线程,在仿真过程中,这些线程可以销毁,因此验证过程中的资源分布是动态的。在initial语句中,有两种分组方式。一种是begin…end,一种是fork…join。前者是顺序执行,后者是并行执行。SV新引入的fork…join_non原创 2021-07-14 13:15:57 · 135 阅读 · 0 评论 -
笔记:路科V0第21节——任务和函数
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=22主要在讲任务和函数的区别,讲的过程看绿皮书第六章,在这里摘抄一下他的总结部分:①函数不会消耗仿真时间,而任务则可能会消耗仿真时间。②函数可以调用函数,无法调用任务,而任务可以调用任务和函数。这是因为函数需要立即返回,无法内置阻塞操作,而任务可能会带有阻塞行为。③一个函数只能返回一个数值,而任务不会返回数值。关于默认值,图里写的很清楚。...原创 2021-07-14 11:22:40 · 132 阅读 · 0 评论 -
笔记:路科V0第19节——随机约束
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=20unique可以用来约束一组变量,使得其在随机后变量之间不会有相同的数值。这一节课举例了许多程序,这些程序都包含了约束条件,约束条件非常容易看懂。上下两个约束冲突了,这时硬约束会覆盖软约束,length最终等于1512。...原创 2021-07-13 19:47:58 · 100 阅读 · 0 评论 -
笔记:路科V0第18节——随机变量
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=19这部分对应的是绿皮书第六章的内容。随着设计变得越来越大,要产生一个完整的激励来测试设计的功能变得越来越困难。定向激励的测试方式早已无法满足检查功能完整性的要求。面对这样庞大的系统,验证工程师无法预测用户会遇到什么样的问题,因此引入了随机测试。利用系统函数randomize产生随机数的方法。函数有返回值,如果随机化成功则返回1,否则返回0。生成随机数的函数有很多,在程序中每次调用这些函数生成的原创 2021-07-13 19:06:29 · 126 阅读 · 0 评论 -
笔记:路科V0第15节——对象拷贝
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=16第五章OOP真是够难的,如果有面向对象编程的基础学起来应该很轻松把,反正我是晕了。在OOP中,对象指存储空间,句柄指C中的指针。如果两个句柄指向同一个对象,其中一个句柄在改变了该对象的成员后,另一个句柄也将受影响,因为它俩指的是同一个对象。这个,在绿皮书P123~P124例5.26和5.27,二者意思相近,绿皮书写的更详细一些。浅拷贝:从(a)(b)中也可以看出,浅拷贝在拷贝时,遇到类中原创 2021-07-09 17:33:30 · 151 阅读 · 0 评论 -
笔记:路科V0第14节——类的封装
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=15从这节课开始,讲的就是绿皮书上第五章——面向对象编程基础的内容了。Class是定义类的关键词,面向对象编程简称OPP(Object-Oriented Programming)。说实话,路桑讲课本来就够跳了,不知道是心理作用还是什么,直接开始讲第五章以后发现更听不懂了…还是老老实实看绿皮书。...原创 2021-07-08 14:30:24 · 125 阅读 · 0 评论 -
笔记:路科V0第12节——数组操作
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=13非组合型数组名字在左边,维度在右边。缺点:消耗更多的存储空间。优点:更易于查找元素。这里能够进行赋值是因为a1和a2的维度和元素数目相同。都是二维、1024个元素。·组合型数组是SV特有的,在定义时它的维度在中间,数组名称在右边。二维的data数组,第一维有8位,第二维有4位。组合型数组是连续的,赋值的时候可以直接赋值。非组合型数组是不连续的,需要对每个维度分别进行赋值,下图展现了这个过程。对原创 2021-07-07 15:17:04 · 292 阅读 · 0 评论 -
笔记:路科V0第13节——数组类型
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=12在验证时,应该让激励尽可能的丰富,这样会使得模块的验证更加充分。这节课讲的东西感觉以后结合实验再来听会比较好,第一次听很多东西都是云里雾里,没什么参考意义。...原创 2021-06-14 14:41:46 · 158 阅读 · 0 评论 -
笔记:路科V0第10节——硬件设计描述
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=11V0的课程以及红皮书都是围绕一个名为多通道数据整型器MCDF(multi-channel data formatter)的模块来展开,这个模块的功能是将上行(uplink)多个通道数据经过内部的FIFO,最终以数据包(data packet)的形式送出。该模块又由四个模块构成,分别是——通道模块(slave,FIFO),寄存器模块,仲裁模块(Arbiter)和整型器(formatter)模块。原创 2021-06-14 14:16:40 · 260 阅读 · 0 评论 -
笔记:路科V0第9节——验证环境结构
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=10测试平台(Testbench)是整个验证系统的总称。验证平台可以产生设计所需要的各种输入,也会在此基础上进行设计功能的检查。模块的验证难度要小于系统,模块越小越容易验证,因为它们有着更好的可控性和可观察性,对于它们,很容易设置验证条件来观察其反应是否符合预期。每个子系统和模块都应该有自己的硬件描述文档。待验证目标应该有较稳定的接口和预期功能,因为这两项一旦发生变化,整个Testbench也要跟着原创 2021-06-02 20:19:17 · 247 阅读 · 0 评论 -
笔记:路科V0第8节——自定义类型
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=9对于大型设计,通过端口进行连接将会让硬件集成变得乏味和容易出错。SV在Verilog的基础上扩展出了接口(interface),接口提供了一种新型的抽象级建模方式,接口的使用可以简化对大型复杂设计的建模和验证。在使用Verilog时,因为使用的是端口。在子模块很多的情况下,除了要对每一个子模块进行端口声明,在上层环境还需要声明非常多的线网用来在各个模块之间进行连接。(刚刚写完毕设的我深有体会,才才四原创 2021-06-02 19:52:14 · 109 阅读 · 0 评论 -
笔记:路科V0第7节——字符串类型
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=8Verilog处理字符串很麻烦,SV中引入了string类型来容纳b原创 2021-06-02 18:40:57 · 125 阅读 · 0 评论 -
笔记:路科V0第6节——自定义类型
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=7SV支持用户自定义类型,相比Verilog可以在简化代码的同时实现更多功能,还可以增加用户的可读性。SV相比Verilog的一个优势。foo是整型,state和next_state是枚举型,整型不可以赋值给枚举型(如第1、2个非法情况),枚举型+1后变成整型,所以可以赋值给整型。这门课主要是在讲枚举和结构体,这部分内容在绿皮书的P39~47。说实话V0的内容…整节课只有一条弹幕也是吐槽讲的一般原创 2021-05-14 19:01:52 · 166 阅读 · 0 评论 -
盲审结束,更新恢复
材料上传完成,16号出结果,有点紧张,明天逼迫自己继续学习!原创 2021-05-11 21:34:41 · 110 阅读 · 0 评论 -
笔记:路科V0第5节——数据类型
Verilog语言提供两种基本的数据类型,即变量类型(variables)和线网类型(nets),这两种类型都是四值逻辑,即可表示0、1、X和Z值。例如reg,integer和time等变量类型可以用来存储组合逻辑或者时序逻辑的值。例如wire,wor,wand和其它线网类型用来连接硬件模块,以及提供特殊的线网驱动解决方案。在表达式中integer 的值作为有符号数处理,而reg或time的值作为无符号数处理。Verilog中的变量和线网类型均是四值逻辑。SV添加了新的数据类型来帮助设计和验证工程师。S原创 2021-05-06 14:57:51 · 272 阅读 · 1 评论 -
CSDN Markdown——改变CSDN文章字体大小颜色等
转载自:https://blog.csdn.net/whqet/article/details/44274999转载 2021-05-03 19:53:18 · 175 阅读 · 0 评论 -
笔记:路科V0第4节——SV及UVM概述
SystemVerilog是IEEE 1364-2005 Verilog标准的扩展。此扩展既包含了用来实现可综合设计的设计语言特性,也包含了用来对大型设计做验证的验证语言特性。硬件描述验证语言(HDVL,Hardware Description and VerificationLanguage) 。·接口(interface),面向对象特性(class & package),约束随机(constrained random,线程控制和通信(process control and communica原创 2021-05-03 20:51:52 · 1122 阅读 · 0 评论 -
笔记:路科V0第2、3节——验证的任务和目标
看到这两节课的题目就感觉这节课讲的内容应该还是第0节课的内容,果然。大家看的时候可以放心跳过了。原创 2021-05-03 20:50:08 · 286 阅读 · 0 评论 -
笔记:路科V0第1节——什么是验证
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=2这门课刘斌老师用的居然还是西电的PPT模板,再一次因为SV验证这门课不再安排在本部而是被安排在了广研院而哭晕。验证是用来证明设计功能正确,并且符合设计功能描述的流程。工作量主要集中在设计流片以前,而且在前端设计中占据大约70%的工作量。是需要在流片之前确认产品的功能和系统是否符合规则和要求。什么是测试平台:这图本小白看不懂。。直接搬过来从前验证不被重视的时候验证工作基本是由设计人员一同完成,但是原创 2021-05-03 20:47:53 · 975 阅读 · 0 评论 -
笔记:路科V0第0节——跟着路桑学SV
课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=1开始就是和红宝书一样介绍芯片设计的流程设计和验证不会外包,因为会涉及到公司的核心机密。后端可以外包。验证相比设计更“软”,软件思维同样很重要。在路科后台发送“薪资”会出现最新的薪资表。验证技术分为三个方面:1)最重要的动态验证技术,通俗而言就是利用仿真器(simulator)来对数字电路进行激励发送和结果检查。以前针对FPGA的验证手段已经不够用了,即便是把上百块的FPGA板子连在一起也难以..原创 2021-05-03 20:16:35 · 2202 阅读 · 1 评论