![](https://img-blog.csdnimg.cn/20210128233047184.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
芯片验证
文章平均质量分 66
数字芯片验证相关知识
kevindas
博主已经停更跑路了- -、,感谢大家多年的点赞支持
展开
-
UVM-1.1学习(三)——`uvm_object_utils的本质
在UVM中,我们经常使用`uvm_object_utils或者`uvm_component_utils来将object或者component注册,但很多同学并不清楚注册是怎么实现的,因此本文主要分析下`uvm_object_utils的注册究竟做了什么。原创 2022-08-01 21:47:26 · 5090 阅读 · 2 评论 -
UVM-1.1学习(二)——uvm_cmdline_processor
在由systemverilog搭建的验证环境中,我们可以使用系统函数$value$plusargs来获取仿真时的命令行参数。而在基于UVM的验证环境中,我们可以使用另一种方式来获取仿真参数:uvm_cmdline_processor。uvm_cmdline_processor本质上是一个class,它的继承关系如下:在这个类中,实现了以下两大类的功能:获取仿真参数并存储获取仿真参数来设定部分UVM变量的值(比如verbosities)获取仿真参数并存储实际上,在uvm_cmdline_pr原创 2022-03-12 22:46:20 · 2300 阅读 · 0 评论 -
UVM-1.1学习(一)——uvm代码的分类
UVM基于功能将classes/utilities分为以下几大类:Globals在uvm_pkt的scope中定义了少量types、variables、functions和tasks。相关文件:base/uvm_globals.svhbase/uvm_object_globals.svhBase定义了搭建环境所需要的components、transactions、ports。其中比较特殊的是uvm_root,它作为所有uvm_components的顶层,对所有uvm_components原创 2022-03-06 11:08:25 · 1612 阅读 · 0 评论 -
RNG与Random stability
在芯片验证中有一个很重要的思想:CDV(覆盖率驱动验证),通过分析覆盖率的达标情况来驱动验证活动的进行。为了实现CDV,我们就需要有一个能够随机的激励源。systemverilog为我们提供了很多随机的手段,比如:提供随机值的函数$random,$urandom,$urandom_range;对对象的随机obj.randomize等等,理解这些随机背后的机制有助于我们创建出更稳定的验证环境以及更快地解决环境中的随机问题。原创 2022-02-27 16:36:14 · 1434 阅读 · 0 评论 -
systemverilog中的Name spaces
在systemverilog中,有时我们难免会给不同的单元(module、package、interface等等)起相同的名字(identifier),为了让这些相同的名字不冲突,systemverilog给它们定义了不同的Name spaces(命名空间)。在谈及Name spaces前,我们先了解compilation unit(中文即编译空间),指的是我们将一个或者多个systemverilog源代码编译时的集合。在vcsmx中,如果你采用的是Two-step Flow,那么你看到的是一个整体的c原创 2022-02-11 22:33:29 · 605 阅读 · 0 评论 -
systemverilog编程陷阱——自加与赋值冲突
一、现象在sv的行为描述中,有时候我们希望将自加操作(++)与赋值操作(=)写在同一行中,以便减少一行代码,但有时候效果不符合预期。代码如下:`timescale 1ns/1psmodule harness; initial begin int a=0; repeat(20) begin a=a++%10; $display("a=%0d", a); end endendmod原创 2022-02-06 16:25:48 · 1360 阅读 · 0 评论 -
原来你的`uvm_info从没用对过
一、现象与解释`timescale 1ns/1ps`include "uvm_macros.svh"import uvm_pkg::*;program testcase();int a=1;initial begin $display("*************************************************************"); if(a == 1) `uvm_info("ID1", "Test message1",原创 2022-02-06 10:28:27 · 3249 阅读 · 0 评论 -
在验证环境中产生带缺口的时钟
一、背景在验证环境中已经有了一个不带缺口的时钟,现在需要将这个不带缺口的时钟每隔10拍扣去1拍,然后在这个带缺口的时钟下发送激励给DUT。二、错误示例int cnt_10;logic vld;logic gap_clk;initial begin cnt_10 = 0; forever begin @(posedge clk); cnt_10++; cnt_10 = cnt_10 % 10;原创 2022-01-29 22:48:09 · 969 阅读 · 0 评论 -
加深对Verilog中x态和z态的认知
一、什么是x态和z态x态:表示Unknown,仿真发生了不能解决的逻辑冲突。z态:表示HiZ、High Impedance、Tri-State、Disabled Driver。——《Verilog编程艺术第7章》二、仿真时为什么会产生x态和z态产生x态原因之一:四态逻辑的默认初始值为x态,如果未对逻辑复位(reg或者ram),那么为x态;产生x态原因之二:后仿真,时序违例后使用notifier将输出端口置为x态;产生x态原因之三:线网信号存在多个驱动,多个驱动之间相互冲突;.原创 2022-01-18 22:58:12 · 27164 阅读 · 3 评论 -
vcs仿真器在0时刻的行为
我们在使用vcs仿真器进行仿真时,有时会遇到在0时刻某些always块被触发的情况,分析这些always块是怎么被触发的有助于我们理解仿真器的行为,以及如何避免这些触发。原创 2022-01-13 22:14:37 · 1584 阅读 · 3 评论 -
systemverilog随机的越界错误
一、代码`timescale 1ns/1psprogram testcase(); bit [31:0] a; bit [31:0] b; initial begin $display("-------------------------------------------------------------"); std::randomize(a, b) with {a+b == 5;}; $displ原创 2022-01-03 22:50:15 · 1310 阅读 · 0 评论 -
理解UVM中的virtual sequencer和virtual sequence
这周看了Cliff的文章《Using UVM Virtual Sequencers & Virtual Sequences》。本文相当于是一个阅读记录。一、什么时候需要virtual sequencer?原创 2021-10-29 23:02:06 · 6880 阅读 · 1 评论 -
uvm中的clone是怎么一回事
在uvm中,我们经常使用clone()来拷贝对象,clone()会将对象完整地赋值一份,并返回这个复制版本的句柄。uvm中关于clone()的原始代码如下:原创 2021-03-17 21:04:42 · 4962 阅读 · 0 评论 -
怎么在fsdb波形中构造一个0ps的毛刺
写在前面:1、按照大家通常的思维,其实题目应该取“怎么分析一个0ps的毛刺”,即从结果分析原因。但是0ps的毛刺产生的原因实在太多了,我们不如反其道行之,自己尝试去构造一个0ps的毛刺,以一种正向的思维去理解,当你能够自己构造出一个0ps的毛刺时,基本上也能够分析其它0ps毛刺产生的原因了。2、看本文之前需要先去了解verilog/systemverilog的调度机制,可以参考我以前写的一篇文章SystemVerilog调度机制与一些现象的思考。3、我发现大家都喜欢白嫖啊,看完如果觉得文章对自己原创 2021-02-28 21:43:34 · 4847 阅读 · 3 评论 -
systemverilog编译指令之`__FILE__和`__LINE__
写在前面:- -,其实一开始是没有写这篇文章的打算的。就在几分钟前正在看Qt的培训视频,讲到C++里面的__FILE__和__LINE__,突然发现这个东西和我们的`uvm_info不是很像吗,然后打开`uvm_info的源代码,卧槽,好家伙,底层实现连名字都取的一模一样。我不禁陷入了深深的沉思,作为一名经验还算丰富的验证人员,为什么到这个阶段才发现这些细节?为什么平时都没看见大家使用过`__FILE__和`__LINE__?联想到今天看到的一篇自媒体的文章,内容大意就是在中国做软件的厉害人都去互联网金原创 2020-11-27 23:21:03 · 1395 阅读 · 3 评论 -
为什么我的SystemVerilog仿真还是很慢?
↵ 最近看下了Cliff Cummings的几篇Paper,大佬就是大佬,思考问题的角度果然和我等不一样。不过也发现这位大佬明显有一定的强迫症,居然还专门写了一篇文章来纠正单词拼写的错误。。。他的Paper中有一篇专门介绍SystemVerilog仿真变慢的原因,这里就简单记录一下。文章名是“Yikes! Why is My SystemVerilog Still So Slooooow?”,感兴趣的同学下来可以详细阅读下。//------------------------...原创 2020-08-02 23:14:25 · 1489 阅读 · 0 评论 -
SystemVerilog中的类型向下转换
写在前面:1、一直以来对这块理解都不是那么清楚,只知道个大概,比如只知道$cast做类型向下转换。今天好好看了下相关的内容,发现自己之前的理解确实有很大的偏差,今天就好好总结下了。2、难得的六一儿童节,祝各位大龄儿童节日快乐。//==========================================START==========================================//一、对象与句柄1、对象:对象是类的一个实例。2、句柄:指向对象的指针。要原创 2020-05-31 15:23:19 · 1536 阅读 · 3 评论 -
SystemVerilog中变量生命周期(lifetime)
变量的生命周期指的是该变量在整个仿真过程中存在的时间,生命周期的长短对仿真最直观的影响就是内存的占用,了解变量生命周期也有利于加深对仿真环境的认知。一、lifetime的基本原则变量在module、program、interface、checker、task、function外定义:static lifetime(在整个仿真时间内存在) 变量在module、program、interface、checker内,且在task、function、process外定义:static lifetime原创 2020-05-17 11:33:56 · 1492 阅读 · 1 评论 -
SystemVerilog调度机制与一些现象的思考
文章内容主要来自于以下文档,然后对自己平时遇到的一些现象作出了思考。1、IEEE systemverilog.std.1800-20122、SystemVerilog Event Regions & Race Avoidance & Guidelines===================================悲伤的分割线==================...原创 2019-12-08 21:27:51 · 10362 阅读 · 15 评论 -
SystemVerilog中package import和`include方式的差异
翻译一篇文章,介绍了systemverilog中,package和`include在使用上的区别。原文地址:SystemVerilog Coding Guidelines: Package import versus `include//=============================华丽的分割线=============================//另一个我们经...原创 2019-10-27 15:15:19 · 5671 阅读 · 0 评论 -
SystemVerilog中interface时钟块的时序控制
标题起的有点绕,没办法,将就一下了。。。systemverilog引入了interface的概念将接口进行简化,interface中可以定义时钟块(clocking block)来控制同步信号的时序。那么,同步信号在什么时候采样,又在什么时候驱动输出呢?一、默认的情况。如果不指定时钟块的时序,那么效果如上面指定的那样。 1step延迟规定了信号在前一个时间片的Postponed区域,在设...原创 2019-05-26 15:58:20 · 11158 阅读 · 5 评论 -
verilog中仿真延迟为负数会怎么样
背景://----------------------------------------------------------------------------------------------------------------------------------------一般我们习惯于在非阻塞赋值前加入一个延迟值,如下:假设这个延迟值为负数会怎么样?验证://-------...原创 2019-04-26 22:52:34 · 2026 阅读 · 0 评论 -
SystemVerilog Include File(.svh)文件说明
.svh后缀的文件即systemverilog include文件,如其名,是为了include到其它文件里面去的文件。应用之一1、package内的类应该用include分隔为单独的文件。2、按照编译顺序排列。3、`include中不应该还包含`include。以uvm的package为例:...原创 2019-04-20 22:18:27 · 10238 阅读 · 0 评论 -
verilog中仿真延迟的添加
电路的延迟特性分为惯性延迟和传输延迟,分别具有不同的物理意义。参考:从仿真语义的角度看Verilog中延时、阻塞与非阻塞赋值----------------------------------------------------------------------------------------------------------------------------------------...原创 2019-02-09 21:11:29 · 15740 阅读 · 7 评论 -
vcs中debug选项、波形dump对仿真时间的影响
一、现象 最近跑一个比较复杂的模块的仿真,仿真时间大约在30min,跑完之后使用simprofile二、分析三、结论原创 2020-07-14 22:15:55 · 5013 阅读 · 0 评论 -
vcs initreg选项的使用
在vcs中,我们可以添加initreg选项来将reg、bit、integer、int、logic变量的初值设置成我们需要的值(0、1、random)。initreg相关选项包括了编译选项和仿真选项。相关的组合比较灵活,下面介绍两种常用组合。1、仿真选项为+vcs+initreg+random,运行选项为+vcs+initreg+0|1|random|seed_value。这样整个仿真的初值...原创 2019-10-07 21:28:06 · 13750 阅读 · 6 评论 -
vcs中-f -file -F的区别
其实说明参考vcs的ug(UserGuide)就好了,写的很清楚了,这里只是做一个简单的翻译来着。顺便表明自己还活着。。1、-f用来指定source files和compile-time options。使用限制:compile-time options只能是以‘+’号开头的那些,'-'号开头的只支持以下部分。2、-file和-f基本一致,不过没有对于'-'号开头的选项的限...原创 2019-09-06 21:55:02 · 4401 阅读 · 0 评论 -
vcs之urg脚本详解
vcs中,可以使用urg命令生成覆盖率报告,其实urg命令本身是一个sh脚本,本文对该脚本进行分析。vcs版本:2016.06################################################ env check & setting about VCS_HOME############################################...原创 2018-08-07 22:38:00 · 11687 阅读 · 0 评论 -
认识系统函数$test$plusargs与$value$plusargs
说明:系统函数的介绍我参考的是VCS User Guide和IEEE Verilog-2005标准,不同编译器可能不太一样。1、$test$plusargs(string) 在对verilog代码进行编译时,我们会在代码中引入`ifdef, `elsif, `endif等条件编译指令,然后在编译时指定宏来对编译代码范围进行控制。系统函数$test$plusargs的目的就是用来替换这些条件编...原创 2018-05-20 11:14:26 · 11501 阅读 · 3 评论 -
简单认识下vcs编译后生成的文件
在vcs提供的例程的makefile文件中,我们可以看到伪目标clean是这样定义的:那么,这里面删除的这些文件都是些什么文件呢?simv*编译(compile)和链接(link)后生成的二进制可执行文件*.vpd synopsys公司VCS DVE支持的波形文件,可以使用$vcdpluson产生*.dump 在tc中如...原创 2018-05-13 17:44:38 · 9455 阅读 · 0 评论 -
Verdi到底是哪个公司的?
相信做IC设计的朋友或多或少使用过VCS和Verdi这两个工具,这两个工具目前都属于synopsys公司,但是Verdi的来源可谓一路坎坷。看图:Verdi最开始是由novas公司设计的,在2008年,被台湾的EDA厂家spring soft收购了。在维基对synopsys公司的介绍中,我们可以看到:在2012年,synopsys花了406million收购了spring soft公司,所以此时V...原创 2018-04-15 11:58:59 · 14039 阅读 · 0 评论 -
怎么利用VCS产生fsdb文件
fsdb即Fast Signal DataBase,是Spring Soft公司(原Novas)的Verdi(原Debussy)所支持的波形文件,相对比VCD波形文件,fsdb只对仿真过程中有用的信号进行存储,除去了VCD中的冗余信息,自然所占存储空间较小。VCD是IEEE1364所定义的标准波形存储文件,所以可以使用verilog的系统函数dumpVCD来dump VCD的波形文件,但是fsdb...原创 2018-01-08 22:45:54 · 20304 阅读 · 1 评论 -
ucli命令记录
VCS有命令行模式和图形模式,图形模式使用的是DVE,命令交互模式使用的是ucli。需要在编译时加入参数以开启ucli,否则ucli交互时只能使用简单的'run'、'dump'、'quit'命令。推荐编译时添加参数如下:'-debug_access' for post-process debug 显然,应该有很多参数可选'-debug_access+classdbg'原创 2018-01-06 21:35:38 · 22450 阅读 · 0 评论 -
sdf反标之RETAIN信息
RETAIN TIME指的是从输入变化后开始计算,输出保持的时间。过了RETAIN TIME后,输出会出现一段X态,直到最终稳定。网表的sdf文件里面会标注路径的RETAIN信息,比如一个两输入的与门:and u(qout, d1, d2);specify (d1 => qout) = (10); (d2 => qout) = (10);endspecify...原创 2019-10-21 22:32:24 · 7724 阅读 · 3 评论 -
generate块对仿真速度的影响
//先有标题,文章等我明天再来补上原创 2021-01-28 23:18:30 · 513 阅读 · 0 评论 -
vcs中systemverilog和c/c++联合仿真
前言 systemverilog中,可以通过DPI、PLI来与外部其它语言的程序进行交互。PLI又分为三类,TF、ACC和VPI,可以认为是PLI技术的三代演进:其中VPI(PLI3.0)是TF/ACC的一个超集,目前使用的PLI基本上都是VPI。与PLI技术相独立的另一个技术就是DPI,DPI技术简化了systemverilog与foreign language的交互步骤,对于开发者相对友好,所以使用相对广泛一些。本文不对DPI中程序调用/数据交互展开讨论(这部分可以参考绿皮书..原创 2020-12-20 23:11:12 · 9713 阅读 · 3 评论 -
vcs中一个simv的诞生过程
叨叨 1、本来有打算写一篇长文来介绍的,但是无奈自身水平不足,再加上实在懒得写那么多字,所以本文相当于是一个缩减版,意思到了就行。2、发现做验证如果想继续深入,可以去补充下编译原理的相关知识。 正文 先抛开vcs、systemverilog不谈。我们所编写的程序代码,需要经过编译和链接后才能得到可执行文件。有关编译、链接的知识可以参考C语言中相关内容:编译和链接的过程当我们在用vcs进行仿真时,一般都会使用Makefile来控制编译仿真流程。当我们敲下make comp..原创 2020-12-19 23:04:31 · 8647 阅读 · 6 评论