1.验证流程

拿到一个项目之后首先要做的就是读spec,spec会告诉我们:
架构:描述模块的整体架构及内部微架构。
寄存器:详细说明每个寄存器的作用、每个域(Field)的含义、读写属性(如只读或可写)以及具体的配置方法。
功能特性(Feature):列出模块支持的所有功能特性,这些是后续提取验证点(Feature List)的基础。
工作模式:说明模块如何工作,并提供具体的配置实例(Example),指导如何通过配置寄存器来实现不同的工作模式(如A模式或B模式)
接口定义:明确模块的输入输出接口,如时钟、复位、数据总线等。
2.验证点提取来自哪里(按顺序写),建议刚入行的通读全文
1)spec的introduction里的about of *,实现功能。
2)spec的Programmer‘s Models里的Register Description。
3)通读全文提取验证点。
3.在读完spec之后还会做什么工作?
将提取Feature list罗列出来(粗提取)---进一步提取后制定验证策略方法---搭建平台--执行验证---检查覆盖率。制定验证方法和策略详细见:https://www.cnblogs.com/tuck0603/p/22514535
验证策略方法绝大多数是定性测试,只有10%左右的是随机测试。
面试会问哪些(如果做了实际项目),就将spec中的好好研读,例如一个uart支持的波特率有几种,数据位有几种,奇偶校验支持几种等等。
4.验证平台testcase结构
首先testcase包含sequence和environment,environment包含agent输入代理、reference model组件和agent输出代理,agent的输入代理中包含sequencer、driver、monitor,agent输出代理就一个monitor。
1) Sequence(产生数据)= 仓库打包员
职责:负责“生产”和“填充”数据。比如它 new 一个事务包(Transaction),然后随机化出具体的地址 0x100 和数据 0x55。
产出物:它是一个“散装的货物”(抽象的事务对象)。
2)Sequencer(调度转发)= 传送带/调度中心
职责:绝对不做“打包”!它收到Sequence塞过来的“散装货物”后,只会做两件事:
转发(Routing):它把货物原封不动地从Sequence手里传递(Push/Pull)给Driver。
仲裁(Arbiter):如果好几个Sequence同时塞货过来,它决定先放行哪一个。
关键点:数据经过Sequencer时,不改变任何格式,它就是个“管道”和“交通警察”。
3) Driver(真正打包)= 装车发货员
职责:Sequencer递过来的还是抽象的数据(0x100 和 0x55)。Driver要做的,就是按照芯片的时序协议(比如AHB、AXI协议),把这些数据“打包”成物理的电平信号(比如拉高写使能信号、在时钟上升沿把数据放到数据总线上)。
关键点:只有Driver才懂物理引脚怎么翻转,Sequencer根本不懂引脚,它只懂传递对象。
https://blog.csdn.net/qq_41034231/article/details/108130501

单个模块agent 中包含了driver,monitor和sequencer,其中driver ,monitor中也包含了与dut进行通信的interface。
多个模块的测试可以参考:https://zhuanlan.zhihu.com/p/345966284
5.执行验证smokecase(执行验证初期工作)
Smoke Case(冒烟测试用例)是芯片验证中最基础、最优先执行的测试。它的核心目的可以用一句话概括:不是为了找Bug,而是为了确认“DUT(待测设计)活着且验证环境没搭错”。
1)验证“环境连通性”(Environment Sanity)
在跑复杂的随机用例之前,Smoke Case必须先跑通,用来证明整个UVM验证平台的“地基是稳的”:
寄存器读写(Reg RW):验证环境能否通过APB/AXI总线,成功对DUT的控制寄存器写入值并读回正确的值。
复位确认(Reset):DUT的复位引脚能否被正常拉高/拉低,内部状态机是否回到默认状态。
时钟是否正常:DUT的时钟输入能否正常翻转,并驱动内部逻辑。
2)验证“最基本的数据通路”(Data Path Check)
Smoke Case会执行最简单、最短的一条传输路径,证明“数据能进,数据能出”:
单笔传输:比如只发1个最简单的数据包(不配置任何随机约束)。
不做随机:地址、数据、长度都是固定的、最简单的值(如写地址0x0,写数据0xDEADBEEF,再读回来比对)。
不测异常:绝对不测边界溢出、错误断连、超时等异常情况。
3)验证“计分板和比对机制”(Checkers' Health)
Smoke Case也需要通过计分板(Scoreboard)的比对,但它不是为了发现DUT的逻辑错误,而是为了证明Scoreboard自己没写错:
如果Reference Model(参考模型)和DUT都基于同一份最简单的逻辑设计,Smoke Case必定是通过的。
如果Smoke Case报错,说明你的验证环境代码(比如Driver驱动时序、Monitor采样边沿、Scoreboard连接)有Bug,而不是DUT有Bug。
smokecase正常跑起来之后开始写正常的case,然后就可以写覆盖率
注意梳理一下上面的流程,问到时要能说出来。
6.划分
按照芯片功能可以分为四种类型,分别是内存芯片(DDR)/微处理器芯片(MCU)/标准芯片/片上系统。
按照集成电路类型可以分成数字芯片/模拟芯片/混合芯片。
浙公网安备 33010602011771号