尼德兰的喵
这个作者很懒,什么都没留下…
展开
-
【IC萌新虚拟项目】随机用例与定向用例的补充
完成sanity通包之后,我们需要进一步的补充case以完善测试场景。芯片验证本身就是通过随机去覆盖和冲击大到一颗芯片小到一个模块的使用场景,因此随机用例是我们验证case的主体。当然对于随机的程度,一般而言层级越高随机程度越低,比如对于一个小模块我们可以任意的去随机,甚至一些不会出现的场景我们也可以去测试一下;而对于芯片顶层的验证,一般就会遵循使用场景来规划用例了。原创 2023-08-10 18:03:08 · 521 阅读 · 0 评论 -
【IC萌新虚拟项目】代码覆盖率收集与反馈
实际参与过项目的同学一定对质量活动这四个字深恶痛绝,项目进入质量活动阶段时,意味着RTL的时序和面积功耗等主要指标已经基本通过验收,debug阶段也已经进行了很长事件已经覆盖了大部分的功能场景。那么这个时候就进入到前端的收尾阶段了。此时验证的同学更多的是在补充定向用例,收功能覆盖率的corner场景,而验证同学就会收集代码覆盖率,这个过程一般会持续1~2个月(当然了,领导是不会让你只收覆盖率的)。原创 2023-08-10 17:11:46 · 685 阅读 · 0 评论 -
【IC萌新虚拟项目】spt_core模块基于dc的综合环境搭建与面积时序优化
当验证的同学正在疯狂写测试点,补充测试用例各种找茬找bug时候,设计的同学也要进入到跑综合修时序优化面积的阶段了。还是老样子,关于芯片综合的知识就不在本文中赘述,项目仍以实践为导向。原创 2023-08-10 16:26:11 · 528 阅读 · 0 评论 -
【IC萌新虚拟项目】功能覆盖率文件合入与功能覆盖率收集
上一篇文章我们已经完成了测试点的相关指导,在工程目录下看到一份推荐的测试点分解文档。当然这只是一种参考,大家可以按照自己的理解进行测试点分解,并在实践中不断完善和改进测试点分解的能力。完成测试点分解后,下一步就是将测试点转化为覆盖率文件。一般而言,覆盖率的收集和测试点是呈对应关系的,当然这个东西并不绝对。在测试点文档中进行反标的一般称之为plan coverage,整体的称之为function coverage。原创 2023-08-09 20:59:23 · 695 阅读 · 0 评论 -
【IC萌新虚拟项目】测试点文档组织与完善
我个人的习惯是,把测试点文档的编写放在sanity通包的后面进行,因为环境搭起来之后每个测试点怎么去测试会有比较清晰的思路,而且搭建环境相对来说也是熟悉方案的过程,而组织测试点本身就需要对方案有比较深的了解。当然了这个看具体的项目进程和整体安排就好。原创 2023-08-06 16:56:59 · 343 阅读 · 0 评论 -
【IC萌新虚拟项目】sanity case与寄存器测试case通包
上一篇文章中千辛万苦的把验证环境搭了起来,然后寄存器访问直接就挂了,之后这一周就慢慢的调bug终于完成了sanity通包。原创 2023-08-06 11:11:12 · 676 阅读 · 0 评论 -
【IC萌新虚拟项目】ppu整体uvm验证环境搭建
本篇文章完成ppu整体uvm环境搭建的指导,在进行整体环境搭建之前,请确认spt_utils、cpu_utils和ral_model均已经生成。之后所有的filelist均使用$PPU_ROOT以适配不同的下载目录。原创 2023-07-27 00:44:32 · 1151 阅读 · 3 评论 -
【IC萌新虚拟项目】寄存器文档整理与ral_model生成
完成utils组件的搭建之后,距离组织整体的验证环境还差啥呢?观察一下可以发现还需要:ral_model和RM,那么这一章我们来完成ral_model的组织。,本章所涉及的代码均已上传gitee/ral目录。原创 2023-07-22 00:16:55 · 409 阅读 · 2 评论 -
【IC萌新虚拟项目】cpu_if的接口cpu_agent utils搭建
spt_agent utils已经完成了(虽然之后可能还会有微调),接下来完成配置通路cpu interface对应的utils。这个通路比较特殊,一是带反馈的接口,二是时序上非常的复杂,而且还是个异步接口。鉴于除非在芯片最外围的模块,我们平时极少面对这种接口,因此个人的建议是不要在这里的时序上花费太多的时间,“又不是不能用”,嗯。原创 2023-07-18 20:23:28 · 447 阅读 · 0 评论 -
【IC萌新虚拟项目】spt_if的接口spt_agent utils搭建
基于前文我们所规划的验证环境结构来一步步的搭建UVM框架,第一步呢就是spt_agent。原创 2023-07-16 18:44:56 · 491 阅读 · 1 评论 -
【IC萌新虚拟项目】验证环境结构与验证方案文档
在上一步中我们清理了rtl的lint error,从这个时间点后虚拟项目需要分两个路线:设计路线和验证路线。那么我们优先进行验证路线的文档与代码开发(因为工作量比较大),之后再回过头进行设计路线的开发。与之前一样,本文档仍以提供思路为主,不作为正式交付的验证方案文档。原创 2023-07-13 17:49:00 · 754 阅读 · 0 评论 -
【IC萌新虚拟项目】ppu模块基于spyglass的lint清理环境搭建与lint清理
RTL代码在交付给验证同时进行功能验证时,可以同步进行lint的清理工作。一般而言影响编译和仿真的问题会在vcs的error和warning中被修正,因此清理lint的过程可以与功能验证同步进行。原创 2023-06-21 20:57:54 · 1134 阅读 · 0 评论 -
【IC萌新虚拟项目】ppu模块的编译环境搭建与RTL编译
虚拟机为芯王国公众号提供的虚拟机,虚拟机内置vcs工具,大家可以关注后自行获取。关于编译环境的搭建,一些储备知识请参考之前的文章。【芯片前端】以vcs编译环境为例做一个适用于芯片前端的极简版Makefile实操教程_nc run_尼德兰的喵的博客-CSDN博客【验证小白】编译、仿真与波形 —— 基于VCS的通用superbench平台搭建_superbench 验证_尼德兰的喵的博客-CSDN博客【芯片前端】可能是定向验证的巅峰之作——auto_testbench_尼德兰的喵的博客-CSDN博客。原创 2023-06-11 22:57:40 · 713 阅读 · 0 评论 -
【IC萌新虚拟项目】Package Process Unit项目全流程目录
Package Process Unit虚拟项目是芯片设计与验证新员工的培训项目,一般会分配6~10周的时间独立开发该项目并完成验收。在整个项目中,新员工需要熟悉工作站、项目流程、公共环境与代码等,并根据方案文档独立设计ppu模块,之后进行功能验证与综合等芯片交付流程。原创 2023-06-03 23:10:55 · 3118 阅读 · 11 评论 -
【IC萌新虚拟项目】spt_core RTL代码与spt代码
【代码】【HISI IC萌新虚拟项目】spt_core RTL代码与spt代码。原创 2023-06-03 22:32:35 · 246 阅读 · 0 评论 -
【IC萌新虚拟项目】spt_core模块方案文档
spt_core为实现包转发功能的模块,为spt模块的核心部分。spt还包含test_core和spt_core访问sram的分发功能。该文档仅为参考spt_core模块概述spt_core需要实现的功能如下:1 、根据头域 (Header) 指示,开始一包的接收;2 、净荷内容进行字节序的转换,高位字节放低位,低位字节放高位;3 、对小于等于 4 个字节的“毛刺包”直接丢弃,不统计:4 、对接收包进行头域 (Header) 的检查,头域不正确的包直接丢弃;原创 2023-06-03 19:15:09 · 735 阅读 · 2 评论 -
【IC萌新虚拟项目】cpu_if模块RTL
代码仅为参考,为之后验证培训进行准备。原创 2023-05-30 14:52:50 · 353 阅读 · 0 评论 -
【IC萌新虚拟项目】cpu_if模块方案文档
cpu_if模块主要是寄存器单元以及寄存器访问通路的处理,可以看下整体结构图:对cpu寄存器访问接口进行同步时序和读写响应;根据属性维护寄存器并输出正确值;根据内部电路反馈更新寄存器状态;因此下面就根据这几个功能点简述一下模块设计思路。原创 2023-05-30 14:47:12 · 966 阅读 · 0 评论 -
【IC萌新虚拟项目】test_core模块方案文档
CPU再次向工作模式选择寄存器(MODE_SEL)写入0xXXXX_XX55后将启动第二次的自动扫描测试,在扫描过程中CPU又向工作模式选择寄存器(MODESEL)写入0xXXXX_XXAA来结束了本次扫描测试,进入到正常工作模式。当向最后一个存储单元(地址为0X3FF的单元)写完测试数据后,芯片如果立即针对第0单元读取数据并进行比较,由于写入的数据和下一次预期读出的数据相同,会对正确性的判断造成影响,须对这种情况进行特殊处理——这是通过向SRAM的数据线输出预期比较数据的“反码”来实现的。原创 2023-05-23 17:49:44 · 787 阅读 · 0 评论 -
【IC萌新虚拟项目】test_core模块初版RTL
初版代码仅为参考,之后在验证环境可能会查出很多的bug。原创 2023-05-23 17:53:05 · 362 阅读 · 0 评论 -
【IC萌新虚拟项目】项目提供代码 —— crg模块方案及RTL
有关复位信号的滤毛刺方法,中有过相关的说明,而本次由于crg模块不做为虚拟项目的培训重点,因此我们采用更加简单的方式来对复位信号进行滤波。输入的复位信号为异步信号,在此我们不考虑亚稳态的问题(实际处理中CRG有更为复杂的结构和专用电路,在此只作为仿真模拟),需要将100ns一下的复位误触进行滤除。一种简单的思路,就是数一下rst_n连续出现了多少拍,对于100M时钟rst_n需要连续出现10拍才达到100ns。由于输入的rst_n为异步信号不应直接使用,因此我们将rst_n打拍后进行统计。原创 2023-05-21 23:34:16 · 649 阅读 · 0 评论 -
【IC萌新虚拟项目】项目提供代码 —— SRAM
因为SRAM的代码不是PPU需要关心的,因此仿真模型直接由项目提供。本次使用到的SRAM为真双读写SRAM,即两组接口均可进行独立的读写操作。对于写操作,数据在使能的下一拍写入sram中;对于读操作,数据在使能的下一拍读出。原创 2023-05-21 01:02:07 · 448 阅读 · 0 评论 -
【IC萌新虚拟项目】PPU模块寄存器描述
这16个数据表项的初始值依次为:0x00_0000、0xFF_FFFF、0x0F_0F0F、0xF0_F0F0、0x55_5555、0xAA_AAAA、0x5A_5A5A、0xA5_A5A5、0x0A_0A0A、0xA0A0A0、0x050505、0x505050、0xAFAFAF、0xF5F5F5、0xFAFAFA、0x5F5F5F。测试数据表项共有16个,分别是TEST_DATA0—TEST_DATA15,当芯片处于扫描工作模式的“自动扫描测试状态”时,CPU对其进行写操作无效。原创 2023-05-20 11:12:14 · 924 阅读 · 0 评论 -
【IC萌新虚拟项目】Package Process Unit模块整体方案·PART3
在正常工作模式下,按照接口时序要求,完成接收包处理,错包丢弃、统计,以及包转发等。并在扫描工作模式下完成TEST_CORE模块对扫描端口的选择,完成两种模式下对SRAM接口信号的处理。5.3.2。原创 2023-05-20 10:25:41 · 726 阅读 · 0 评论 -
【IC萌新虚拟项目】Package Process Unit模块整体方案·PART2
4.1芯片总体结构图芯片总体结构框图如图2所示。芯片内部主要电路包括 cpu_if 接口电路、sram 检测电路 test_core 以及 spt 包转发接口电 路。以下对主要部分分别进行简要介绍:1.cpu_if 接口电路该接口是一个异步 cpu 接口,通过 cpu_if 接口电路可向测试数据表中写入数据,进行测试数据配置;并可通过向工作模式选择寄存器写入命令字来配置芯片的工作模式——启动扫描进入扫描工作模式、结束扫描进入正常工作模式;原创 2023-05-19 10:17:01 · 913 阅读 · 0 评论 -
【IC萌新虚拟项目】Package Process Unit模块整体方案·PART1
本芯片主要实现简单的包过滤包转发功能,同时还提供对外挂 SRAM 的自动检测功能。主要功能如下:通过 CPU 配置选择工作模式包括正常工作模式和扫描工作模式,通过 CPU 配置工作模式选择寄存器的 model_sel 可实现两种模式切换,芯片在上电时的缺省工作模式为正常模式。1.正常工作模式,SRAM 的读写由包转发电路控制,实现包转发功能:按照接口时序要 求完成包接收;按照字节转换的方式完成包转发,高字节放低字节,低字节放高字节;实现 分类包统计,包括头域错误包,超短包,超长包,尾域错误包以及正常包。原创 2023-05-19 09:29:06 · 1091 阅读 · 0 评论