自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 RNG与Random stability

在芯片验证中有一个很重要的思想:CDV(覆盖率驱动验证),通过分析覆盖率的达标情况来驱动验证活动的进行。为了实现CDV,我们就需要有一个能够随机的激励源。systemverilog为我们提供了很多随机的手段,比如:提供随机值的函数$random,$urandom,$urandom_range;对对象的随机obj.randomize等等,理解这些随机背后的机制有助于我们创建出更稳定的验证环境以及更快地解决环境中的随机问题。

2022-02-27 16:36:14 1488

原创 PrimeTime中的DMSA

第一次尝试使用PT的DMSA,步骤存在太多的弯弯绕绕了,这里记录一下。一、什么是DMSA在PT中,我们将一种operating mode(如FUNC、DFT等)和一种operating condition(如WC、WCZ、AVS等)的组合称成为scenario,显然【scenarios = modes * conditions】。PT为了节省时间,支持并行地对这些scenarios进行分析。这些scenarios通过ssh、lsf等工具被提交到不同的host上进行计算(支持多种通信工具同时工作)

2021-08-07 15:42:09 10735 2

原创 SystemVerilog中的类型向下转换

写在前面:1、一直以来对这块理解都不是那么清楚,只知道个大概,比如只知道$cast做类型向下转换。今天好好看了下相关的内容,发现自己之前的理解确实有很大的偏差,今天就好好总结下了。2、难得的六一儿童节,祝各位大龄儿童节日快乐。//==========================================START==========================================//一、对象与句柄1、对象:对象是类的一个实例。2、句柄:指向对象的指针。要

2020-05-31 15:23:19 1564 3

原创 SystemVerilog调度机制与一些现象的思考

文章内容主要来自于以下文档,然后对自己平时遇到的一些现象作出了思考。1、IEEE systemverilog.std.1800-20122、SystemVerilog Event Regions & Race Avoidance & Guidelines===================================悲伤的分割线==================...

2019-12-08 21:27:51 10845 15

原创 UVM-1.1学习(三)——`uvm_object_utils的本质

在UVM中,我们经常使用`uvm_object_utils或者`uvm_component_utils来将object或者component注册,但很多同学并不清楚注册是怎么实现的,因此本文主要分析下`uvm_object_utils的注册究竟做了什么。

2022-08-01 21:47:26 5563 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 2469

原创 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 1640

原创 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 632

原创 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 1405

原创 原来你的`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 3437

原创 在验证环境中产生带缺口的时钟

一、背景在验证环境中已经有了一个不带缺口的时钟,现在需要将这个不带缺口的时钟每隔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 995

原创 Design Compiler Labs学习笔记(一)

本文对应Design Compiler 2017.09Lab1的学习

2022-01-26 21:58:34 885

原创 加深对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 28193 3

原创 vcs仿真器在0时刻的行为

我们在使用vcs仿真器进行仿真时,有时会遇到在0时刻某些always块被触发的情况,分析这些always块是怎么被触发的有助于我们理解仿真器的行为,以及如何避免这些触发。

2022-01-13 22:14:37 1755 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 1412

原创 理解UVM中的virtual sequencer和virtual sequence

这周看了Cliff的文章《Using UVM Virtual Sequencers & Virtual Sequences》。本文相当于是一个阅读记录。一、什么时候需要virtual sequencer?

2021-10-29 23:02:06 7395 1

原创 PrimeTime Labs学习笔记(三)

// 本文对应PrimeTime2018.06Lab3的学习PT中可以使用命令aa(always ask)来根据关键字查询变量或者命令,匹配方式为*keywod*。set_app_var可以通过-default参数将PT内部变量的值设置为默认值。可以使用report_analysis_coverage来快速地判断下哪些地方存在时序违例,表中的Constrained Pin即约束的endpoint。使用report_constraint -all_violators命令将设计中...

2021-08-23 22:22:44 4148 2

原创 在innovus中通过ecoAddRepeater插入buffer/inverter

在innovus中,我们可以通过ecoAddRepeater命令来在net上添加单个buffer或者成对的inverters。ecoAddRepeater命令的行为由命令setEcoMode控制。选项说明-cell <list of cells>指定插入的buffer或者inverter的类型。-net <netName> | -term <inst1/term1 inst2/term2 ...>-net指定需要插入buffer/inverters的

2021-08-15 22:30:41 8341

原创 PrimeTime Labs学习笔记(二)

// 本文对应PrimeTime2018.06Lab2的学习使用report_analysis_coverage命令来显示timing check覆盖率的summary报告,加上其它选项后显示对应详细的报告。使用report_port命令来显示端口的信息。注意input_delay/output_delay都是相对时钟设定的。report_timing时可以通过-from/-to选项指定startpoint和endpoint。通过report_timing -path fu...

2021-08-07 23:08:46 2080

原创 PrimeTime Labs学习笔记(一)

// 本文对应PrimeTime Workshop Lab1的学习记录使用list_key_bindings命令来显示快捷键设置。使用page_on/page_off命令来切换屏幕显示的效果。可以使用view命令将报告作为一个独立的窗口弹出,方便查看。获取帮助的几种方式help restore* 查询以restore作为开头的相关命令man resto...

2021-08-06 22:41:29 2975 1

原创 DC中的path_group

一、DC的默认行为默认情况下,DC会根据path的capture clock来将path进行分组(没有clock的被分到default组)。然后DC会基于每个group来进行优化,优化始终对最差的path进行,直到满足以下任一条件时终止优化:group内的所有path均满足时序要求; group内最差的那条path已经优化不动了。从上面的描述我们可以看到,虽然最差的path已经无力回天了,但是同一个group内次差的path仍然有优化的空间,但是DC却不去优化了。因此,我们有时需要通过设置p

2021-08-01 16:46:51 5368 1

原创 理解DC中的link_library与target_library

下图是DC的工作流程示意图: Translate 当DC把我们的rtl代码读入后,会自动地将代码Translate成GTECH的网表,GTECH是synopsys自家开发的一种通用的,独立于工艺的标准库,里面有与门、非门、寄存器等各种基本单元。下图即为代码读入后由DC产生的GTECH网表,此时GTECH网表仍然保持和rtl代码的相同的层次结构。查看单个逻辑单元的属性,可以看到确实使用的是GTECH的库。 Link 第一张图中省略了link的步骤,link是介于Tr...

2021-07-26 22:05:55 11067

原创 家庭服务器安装流水账

1、外网访问服务器放在家里,为了能外部访问,采用了公网IP+DDNS的解决方案。公网IP可以找运营商申请(微笑脸)。 DDNS使用了3322的免费DDNS(http://www.pubyun.com)。 家里的光猫不支持DDNS,花了100去咸鱼淘了个破解版的HS8145X6光猫,买回来需要自己设置DDNS和端口映射两项。2、服务器购买 咸鱼上淘的戴尔T140(E2124)。 3、centos7的安装在官网下载镜像(The CentOS Project)。 使用U盘安装,U盘安

2021-07-14 22:11:11 264 1

原创 OCV (on-chip-variation)

Chip上类型完全相同的cell,由于它们所处的位置不同,会受到工艺(掩模、光校准、刻蚀等)、电压、温度等因素的影响不同,导致cell对外呈现出的delay也是不一样的。由于影响的因素较多,delay大体呈现高斯分布的特性。如果我们单纯地只使用best case或worst case去分析时序,就会遗漏如下一些问题。Setup问题对于一条critical的path,只在worst case下分析可能是没有问题的:但是如果CLKBUF2的情况要比实际好一点的话(delay),那么就会导致

2021-07-10 23:03:20 1830

原创 Innovus RAK学习笔记(一)-Introduction to Innovus and Block Implementation Flow

1、innovus.cmd / innovus.log / innovus.logv的区别?innovus.cmd:记录innovus执行的命令,来帮助后续创建脚本;innovus.log:记录innovus执行的命令和log,命令会以<CMD>的前缀标识;innovus.logv:相对于innovus.log,记录了更多的信息,v即verbose的意思。2、使用空格键可以在多个重叠的目标之间快速切换。3、使用Auto Query功能(左下角的Q是开关)查询目标信息时

2021-07-04 15:22:50 3626

原创 Placement blockage types

Placement blockage的作用和Placement constraint (Guide/Fence/Region)比较类似。不过一个是作用于module,用于限制module

2021-05-29 22:40:29 1109 1

原创 Placement constraint types(Guide/Fence/Region)

一、Placement constraint types

2021-05-28 22:30:56 2699

原创 设计的多实例引用(Multiple Instances of a Design Reference)

一、什么是“设计的多实例引用”在层次化的设计中,我们经常会将一个module例化多份,这些例化的instance就是设计的module的多实例引用。二、为什么要解决多实例引用三、怎么解决多实例引用...

2021-05-02 16:55:52 2260

原创 二进制多项式乘法和除法的电路实现

一、多项式乘法对于每个组成分量,有如下的实现电路:综合来看:二、多项式除法更为一般性的推导,p(X)为被除式,q(X)为商式,r(X)为余式。不妨假设gn-k=1。若被除式p(X)中Xn-k的系数为1,此时q(X)=1;r(X)=p(X)-g(X)=p(X)+g(X)若被除式p(X)中Xn-k的系数为0,此时q(X)=0;r(X)=p(X)经过一次迭代后,可以将除法结果改写为:经过若k次迭代后,可以将除法结果改写为:迭代的过程参

2021-03-21 12:56:54 4190 2

原创 uvm中的clone是怎么一回事

在uvm中,我们经常使用clone()来拷贝对象,clone()会将对象完整地赋值一份,并返回这个复制版本的句柄。uvm中关于clone()的原始代码如下:

2021-03-17 21:04:42 5163

原创 怎么在fsdb波形中构造一个0ps的毛刺

写在前面:1、按照大家通常的思维,其实题目应该取“怎么分析一个0ps的毛刺”,即从结果分析原因。但是0ps的毛刺产生的原因实在太多了,我们不如反其道行之,自己尝试去构造一个0ps的毛刺,以一种正向的思维去理解,当你能够自己构造出一个0ps的毛刺时,基本上也能够分析其它0ps毛刺产生的原因了。2、看本文之前需要先去了解verilog/systemverilog的调度机制,可以参考我以前写的一篇文章SystemVerilog调度机制与一些现象的思考。3、我发现大家都喜欢白嫖啊,看完如果觉得文章对自己

2021-02-28 21:43:34 5051 3

原创 generate块对仿真速度的影响

//先有标题,文章等我明天再来补上

2021-01-28 23:18:30 532

原创 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 10134 3

原创 vcs中一个simv的诞生过程

叨叨 1、本来有打算写一篇长文来介绍的,但是无奈自身水平不足,再加上实在懒得写那么多字,所以本文相当于是一个缩减版,意思到了就行。2、发现做验证如果想继续深入,可以去补充下编译原理的相关知识。 正文 先抛开vcs、systemverilog不谈。我们所编写的程序代码,需要经过编译和链接后才能得到可执行文件。有关编译、链接的知识可以参考C语言中相关内容:编译和链接的过程当我们在用vcs进行仿真时,一般都会使用Makefile来控制编译仿真流程。当我们敲下make comp..

2020-12-19 23:04:31 8933 6

原创 随路vld vs. 时钟gating

数字芯片设计人员在对数据流的处理中,免不了会遇到存在无效数据的情况,此时通常有两种处理方式: 一是采用随路vld的方式。vld_in跟随数据,数据每做一拍的处理,vld对应打一拍;数据在vld有效时进行处理,无效时保持。二是采用时钟gating的方式。直接在时钟上产生缺口(ICG),数据流在缺口时钟下进行处理。可以看到:1、随路vld的处理方式下,输入到输出的处理延迟是确定的,取决于数据的处理拍数。2、时钟gating的处理方式下,输入到输出的处理延迟是不确定的,最大延迟为数据的处理拍数

2020-12-16 22:18:13 2411

原创 systemverilog编译指令之`__FILE__和`__LINE__

写在前面:- -,其实一开始是没有写这篇文章的打算的。就在几分钟前正在看Qt的培训视频,讲到C++里面的__FILE__和__LINE__,突然发现这个东西和我们的`uvm_info不是很像吗,然后打开`uvm_info的源代码,卧槽,好家伙,底层实现连名字都取的一模一样。我不禁陷入了深深的沉思,作为一名经验还算丰富的验证人员,为什么到这个阶段才发现这些细节?为什么平时都没看见大家使用过`__FILE__和`__LINE__?联想到今天看到的一篇自媒体的文章,内容大意就是在中国做软件的厉害人都去互联网金

2020-11-27 23:21:03 1445 3

原创 Integrated Clock Gating (ICG)

什么是ICG? 在时序级的设计中,我们经常遇到这样的情况:电路存在一个使能信号E,当使能信号无效时,输出保持。我们通常的做法是使用一个Mux来对输入进行选择(下图左侧)。在综合阶段,可以通过选项将该类型的电路综合成带ICG的电路结构(下图右侧)。ICG单元一般由foundry厂家的库提供,比如TSMC 28nm库该类器件名称为CKLNQDxxx。 为什么要使用ICG? 在数字IC设计中,时钟树的功耗占比可能高达30%,而使用ICG电路后,可以从两个方面节省功耗: 减少了时钟端的翻..

2020-11-21 17:42:01 12292

原创 barrel_shifer的设计思路

背景设计电路时,经常会遇到从一个大位宽数据M中选择连续的数据N,此时对每bit都使用Mx显然浪费了资源,而barrel_shifter是一种不错的选择。example设计思路设计思路(以Example2为例):step1:根据输入输出数据位宽确定最大移位值,7-2=5bit。step2:将最大移位值依次减去1、2、4、……2^N(N=0,1,2...),直到为非正数,减数的个数即为barrel_shifer的层数。这里5-1-2-4=-2,需要设计3层Mx。step3:3层Mx,第1层移

2020-09-03 23:42:15 3598

原创 为什么我的SystemVerilog仿真还是很慢?

↵ 最近看下了Cliff Cummings的几篇Paper,大佬就是大佬,思考问题的角度果然和我等不一样。不过也发现这位大佬明显有一定的强迫症,居然还专门写了一篇文章来纠正单词拼写的错误。。。他的Paper中有一篇专门介绍SystemVerilog仿真变慢的原因,这里就简单记录一下。文章名是“Yikes! Why is My SystemVerilog Still So Slooooow?”,感兴趣的同学下来可以详细阅读下。//------------------------...

2020-08-02 23:14:25 1554

原创 vcs中debug选项、波形dump对仿真时间的影响

一、现象 最近跑一个比较复杂的模块的仿真,仿真时间大约在30min,跑完之后使用simprofile二、分析三、结论

2020-07-14 22:15:55 5215

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除