SoC的功能验证

随着设计的进行,越接近最后的产品,修正一个设计缺陷的成本就会越高。
不同设计阶段修正一个设计缺陷所需费用示意图
1.功能验证概述
在ic设计与制造领域,通常所说的验证(verification)和测试(test)是两种不同的事
验证
在设计过程中确认所设计的正确性
通过软件仿真、硬件模拟和形式验证等方法进行
在流片之前要做的。
测试
检测芯片是否存在制造或封装过程中产生的缺陷。
采用测试设备进行检查
功能验证
功能验证一般是指设计者通过各种方法比较设计完成的电路和设计文档规定的功能是否一致,保证逻辑设计的正确性。
通常不包括面积、功耗等硬件实现的性能检测。
soc功能验证的挑战
系统复杂性提高增加验证难度
设计层次提高增加了验证工作量
发展趋势
2.功能验证方法与验证规划
仿真为基本出发点的功能验证方法
功能验证开发流程制订验证计划
功能验证需求
激励产生策略
结果检测策略
验证开发
提高验证的效率
功能验证开发流程
3.系统级功能验证
行为级功能验证
测试数据控制流,包括初始化和关闭i/o设备、验证软件功能、与外界的通信,等等
性能验证
通过性能验证可以使设计者清楚地知道整个系统的工作速度、功耗等性能方面的指标。
协议验证
根据总线协议对各个模块的接口部分进行验证
系统级的测试平台
边界条件
设计的不连续处
出错的条件
极限情况
系统级的测试平台标准
性能指标
覆盖率指标
4.仿真验证自动化
激励的生成
直接测试激励:检测到测试者所希望检测到的系统缺陷
可以快速、准确地产生大量的与实际应用一致的输入向量
随机测试激励:
检测到测试者没有想到的一些系统缺陷带约束的随机测试激励是指在产生随机测试向量时施加一定的约束,使所产生的随机测试向量满足一定的设计规则。
带约束的随机激励生成的例子
x1和x2为系统的两个输入,它们经过独热码编码器编码之后产生与被验证设计(duv)直接相连的输入
输入约束:in[0] + in[1] + in[2] <= 1
这样产生的随机向量就可以保证它们的合法性。
用systemverilog语言写的带约束随机激励生成例子
输入data的数量限制在1~1000
program automatic test;    // define constraint class transaction;   rand  bit [31:0] src, dst, data[];  // dynamic array    randc bit [2:0] kind;     // cycle through all kinds    constraint c_len      { data.size inside {[1:1000]}; } // limit array size  endclass // instantiation  transaction tr;      // start random vector generation initial begin   tr = new();   if(!tr.randomize()) $finish;   transmit(tr);   end endprogram
响应的检查
可视化的波形检查:直观,但不适用于复杂系统设计
自动比对检查:通过相应的检测模型或验证模型来自动完成输出结果的比对
覆盖率的检测
覆盖率数据通常是在多个仿真中收集的.
覆盖率的模型由针对结构覆盖率(structural coverage)和功能覆盖率(functional coverage)两种目标而定义的模型所组成。
可细化为:
限状态机覆盖率(fsm coverage)
表达式覆盖率(expression coverage)
交叉覆盖率(cross coverage)
断言覆盖率(assertion coverage)
用systemverilog语言写的覆盖率检测的例子
program automatic test(busifc.tb ifc);   class transaction;           rand bit [31:0] src, dst, data;           rand enum {memrd, memwr, csrrd, csrwr,                 i      ord, iowr, intr, nop} kind;      endclass        covergroup covkind;         coverpoint tr.kind;       // measure coverage     endgroup    transaction tr = new();     // instantiate transaction     covkind ck = new();         // instantiate group     initial begin         repeat (32) begin              // run a few cycles              if(!tr.randomize()) $finish;              ifc.cb.kind <= tr.kind;   // transmit transaction               ifc.cb.data ##[1:2]b);
基于断言的验证
在属性检查中使用断言
在属性检查中,最重要的就是属性描述。
在仿真中使用断言


年轻人买热水器还要看数据?这个年轻品牌,线上增幅37%!
dfrobotALIGN(亚拓)六角螺丝刀套装介绍
荣耀V9怎么样?华为荣耀V9和VIVOX9对比评测:配置、性能、续航荣耀V9和VIVOX9谁最有色?
iPhone屏幕发明人从苹果离职 或者说是退休
电动机改接发电机电路图
SoC的功能验证
3D打印技术帮助耳朵先天发育不良的女孩重获新生
Ⅱ类超晶格红外探测器多层膜背增透研究
全尺寸汽车天线测量的多探头测量系统SG 3000M
台湾技嘉科技推出了GA-H57M—USB3.0主板 高调称占
乌干达公司表示将通过区块链技术来追溯咖啡产品的来源
动圈式耳机
万木新材料扛起LED封装胶国产“大旗”
罗技即将推出一款分体式键盘Ergo K860采用了独特的波浪形设计
E分析:2599元的Redmi K30 5G,分析后售价成本比约为1.7
AIMB-582QG2
便携式设备动态电源管理的嵌入式Linux技术
无线水位指示器电路的制作教程
特斯拉国产续航缩水 显得有点膨胀了
最强苹果分析师:苹果 iPad、Mac 与显示器将采用 Mini LED