摘要: 1.芯片开发流程 数字开发过程中主要可以分为数字前端和数字后端,每个项目首先都是从客户那里拿到需求,架构人员根据需求指定整个芯片的设计方案,在进入到数字前端进行设计和验证,对fix的代码我们需要综合成门级网表,在对网表做PR,那么综合和PR都属于数字后端范围内了,和芯片的具体实现功能是相关比较小的。 阅读全文
posted @ 2022-12-21 16:00 验证cc 阅读(3231) 评论(2) 推荐(0) 编辑
摘要: 功耗主要分为动态功耗和静态功耗。静态功耗是芯片中的部分或全部电路在通电但不工作的状态下的功耗;动态功耗是芯片在正常工作时因信号翻转引起的功耗。 静态功耗=leakage power(漏电功耗); 动态功耗=internal power(短路功耗) + switching power(开关功耗)。 l 阅读全文
posted @ 2022-12-07 17:29 验证cc 阅读(2260) 评论(0) 推荐(0) 编辑
摘要: 巧妙的使用DPI函数能够给你的验证环境搭建提供很多便利,相当于sv中直接调用c函数,简直不要太爽,节省很多时间。 1.DPI -- sv调用c系统库函数 下面以一个验证环境的class中使用DPI的math库中的函数为例:首先定义一个package,在package中将使用到的DPI函数导入进来,m 阅读全文
posted @ 2022-06-07 10:34 验证cc 阅读(2351) 评论(0) 推荐(1) 编辑
摘要: 约束的使用 1.逻辑关系<,<=,==, >=,> 逻辑关系约束,比较直接的指定随机数产生的范围,<,<=,==, >=,> rand byte data;constraint data_cons{ data > 0; data <5; } //约束data的值大于0,小于5 2.inside in 阅读全文
posted @ 2021-12-31 15:23 验证cc 阅读(13513) 评论(0) 推荐(0) 编辑
摘要: 在实际项目中,由于项目经历了较多的版本更迭或者设计人员的技术水平限制,有些时候难免有使用到verilog的代码和VHDL代码共同存在一个项目中的情况,那这个时候我们要怎样进行混合编译仿真验证呢?这里以使用vcs工具编译verdi查看波形为例: 如果我们设计代码是vhdl版本的,但是还想使用更高级的代 阅读全文
posted @ 2021-12-21 10:38 验证cc 阅读(3746) 评论(0) 推荐(0) 编辑
摘要: 芯片在后仿中会由于异步设计导致某些寄存器存在X态的问题,影响后仿进程,如果在后端的PT中已经很明确了该寄存器不存在异步问题,则可通过编译器设定的指令不进行该寄存器的检查 1.构建一个notiming_check.list的文件列表,列表的内容如下: instance {tb_top.design_t 阅读全文
posted @ 2021-12-15 15:04 验证cc 阅读(1020) 评论(0) 推荐(0) 编辑
摘要: 动态数组 动态数组,和名字的字面解释一样,可以动态调整空间大小的数组,动态数组在编译时不指定空间的大小,只有在程序运行是才分配空间,这也就要求在代码中需要 new[ ] 来设定动态数组的空间大小。 1.1 动态数组的声明方法: data_type array_name []; 1.2 动态数组的三种 阅读全文
posted @ 2021-06-23 10:15 验证cc 阅读(6528) 评论(0) 推荐(1) 编辑
摘要: AMBA总线概述 AMBA(Advanced Microcontroller Bus Architecture)是由ARM公司推出的片上总线协议。主要包含下面四种高级总线: AHB(the Advanced High-performance Bus) ASB(the Advanced System 阅读全文
posted @ 2021-06-10 16:48 验证cc 阅读(5165) 评论(0) 推荐(0) 编辑
摘要: DUT中寄存器的值可能是实时变更的, 寄存器模型并不能实时地知道这种变更, 因此, 寄存器模型中的寄存器的值有时与DUT中相关寄存器的值并不一致。 对于任意一个寄存器, 寄存器模型中都会有一个专门的变量用于最大可能地与DUT保持同步, 这个变量在寄存器模型中称为DUT的镜像值( mirrored v 阅读全文
posted @ 2021-05-28 18:12 验证cc 阅读(4955) 评论(0) 推荐(0) 编辑
摘要: 断言是什么? 断言是对设计违例的一种严查,能够在违例时立刻报出错误。 为什么使用断言,断言的优势又有那些呢? 1.断言能够缩短你的开发时间,断言的代码是比较简单的,相比systemverilog能够很好的处理信号的电平和边沿变化的检测。如systemverilog要想实现时钟上升沿时如果FRAME_ 阅读全文
posted @ 2021-05-15 18:09 验证cc 阅读(5763) 评论(0) 推荐(1) 编辑
摘要: 概述 sequence可通过sequencer向drive发送你的待测case,如果一个sequencer只发送一个sequence是不需要仲裁的,但在实际使用中,如果一个sequencer接收了两个sequence或者更多的时候,会怎样发送各自sequence的case呢?如果你要发送的case需 阅读全文
posted @ 2021-04-27 17:15 验证cc 阅读(595) 评论(0) 推荐(0) 编辑
摘要: 概述 测试点实际上是把设计的功能按层级分解成一个个最简单、最底层的功能点,化繁为简,方便测试用例的实现。测试点主要从功能规格(FS)与架构规格(AS)中提取。测试点分解需要保证的几点原则: 完备性,即不能遗漏任何功能点,特别是异常处理,边界处理,容错处理这些往往容易被忽视; 低耦合,不同测试点之间的 阅读全文
posted @ 2021-04-26 21:23 验证cc 阅读(1857) 评论(0) 推荐(0) 编辑
摘要: vim编译器常用的配置方式 将下面代码拷贝到_vimrc中,放在vim的安装目录下,这里修改的只是我们用户的配置文件。 source $VIMRUNTIME/vimrc_example.vim set nocompatible "不使用兼容模式 set nu "显示行号 syntax on "语法高 阅读全文
posted @ 2021-04-23 11:25 验证cc 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 概述 virtual 是OOP中的一种关键字,主要体现的是多态。虚函数是指一个类中你希望重载的成员函数 ,当你用一个基类指针或引用指向一个继承类对象的时候,调用一个虚函数时, 实际调用的是继承类的版本。整理了uvm中使用virtual常用的四种情况: virtual interface;virtua 阅读全文
posted @ 2021-04-13 10:27 验证cc 阅读(926) 评论(0) 推荐(0) 编辑
摘要: 概述 从概念上来说,数字验证包含两方面的内容,一个是验证功能,另一个是验证时序。对应的仿真模型(不论是model,standard cell等)也不外乎这两个部分,功能部分由逻辑,udp元件或gate构成,时序部分则包括了时序反标和时序检查两小块。 平时我们所说的功能验证,也就是前仿真,实现了对功能 阅读全文
posted @ 2021-04-06 16:07 验证cc 阅读(4613) 评论(0) 推荐(0) 编辑
摘要: 简介 可通过 -cm_hier 配置文件来控制覆盖率收集范围 Coverage Metrics覆盖指标: -cm vcs使用编译选项 -cm (line+cond+tgl)生成simv.vdb文件夹,仿真选项中使用-cm (line+cond+tgl),会在simv.vdb/snps/coverag 阅读全文
posted @ 2021-04-05 14:51 验证cc 阅读(2996) 评论(0) 推荐(0) 编辑
摘要: 概述 TLM:Transaction Level Modeling(事务级建模),它是一个独立于语言的一个标准,常用于系统建模,加速软硬件协同开发。在芯片开发中,常配合system C使用来进行系统设计。最新的标准是OCSI TLM 2.0。 TLM的端口整理 端口的按照类型可以划分为三种: por 阅读全文
posted @ 2021-04-05 14:12 验证cc 阅读(855) 评论(0) 推荐(0) 编辑
摘要: 概述 功能覆盖率指你对设计所实现功能特性的收集,验证的目的就是确保设计在实际环境中的行为正确。设计规范里详细说明了设备应该如何运行,而验证计划里则列出了相应的功能应该如何激励、验证和测量。 功能覆盖率是和设计意图紧密相连的,有时也称为”规范覆盖率“,而代码覆盖率则是衡量设计的实现情况。 覆盖率完备性 阅读全文
posted @ 2021-04-02 10:31 验证cc 阅读(2141) 评论(0) 推荐(0) 编辑
摘要: 概述 在进行芯片验证时,最重要的一个环节就是完成对dut的覆盖率收集工作,覆盖率主要分为下面三类: 1.代码覆盖率 2.功能覆盖率 3.断言覆盖率 如何完成覆盖率收集? 代码覆盖率:是衡量验证进展的最简易的方式。它的作用是检查代码是否冗余,设计要点是否遍历,被检测的对象是RTL代码,而代码覆盖率的检 阅读全文
posted @ 2021-04-01 17:56 验证cc 阅读(7337) 评论(0) 推荐(1) 编辑