cuttlefish的个人空间 https://blog.eetop.cn/verification [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

几种主流SoC(片上系统)验证技术zz

热度 1已有 4429 次阅读| 2008-10-14 14:28 |个人分类:SOC验证

技术分类: EDA工具与服务  | 2008-08-25

  SoC验证技术已经落后于设计和制造能力,如何构建更快更好的设计验证方法是当前最大的问题。

  SoC经过近十年的发展,有了广阔的市场。SoC验证研究领域在验证技术、验证方法学、测试码提取、验证描述语言、IP核重用验证、验证流程及验证评估方面取得了长足进步。但总体而言,验证、模拟和验证工作成为整个SoC学科发展的制约瓶颈,是提高设计生产率的障碍。

  目前芯片一次投片成功率在35%左右,造成重复投片的主要原因就是验证不够充分。1999年当VSIA举行验证专题会时,许多世界级验证专家得出结论: 验证是件困难的事(hard),几周后又把结论更正为“Verification is not hard,it is very hard”。现在愈来愈达成共识: 单一的设计工具难以解决验证问题,而需要一系列复杂的工具和技术,来减少设计错误数,使之达到可接受的程度。

  SoC验证工作比较繁杂。Janick Bergeron给“验证”下的定义是“证明一个设计的功能是否正确的过程”。SoC的验证工作贯穿整个设计流程,从行为级HDL设计,一直到芯片设计定案之前都需要做足够多的验证工作,当前验证工作量已经占整个设计工作量70%左右。

  SoC验证研究内容很多,如: IP核/模块级验证、系统级验证、仿真验证、软硬件协同验证、等价性检查、静态时序分析和时序验证、版图验证等。随着验证技术的逐步发展,验证方法由最初的直接测试向量生成(Directed Test Vector Generation),到约束随机测试(Constrainted Random Test),再到覆盖驱动验证(Coverage driven Verification),一直到最新的基于断言的验证方法(Assertion-based Verification),各种验证方法在不断创新发展。

  模块/IP核级验证

  任何SoC设计均由一系列模块组成。模块可能是自己开发,也可能是重用第三方的IP核。不论哪种情况,在系统集成前做IP核验证工作是必需的。模块/IP核级软性检查(Link Checking)主要检查代码语法、可综合性、变量未初始化、结构化可支持性和端口失配性等; 规范模型检查主要做设计特征遗漏性检查,以在早期发现错误状况。对控制流设计验证效果明显,通过设计文档非正式说明、与设计者非正式沟通等途径抽取特征疑问,逐一验证,消除缺陷。

  功能验证主要利用基准测试向量基于事件或基于时钟进行功能验证,如黑盒测试、白盒测试和灰盒测试等; 协议检查主要验证是否违犯总线协议或模块互连约定,按照协议逐一检查并比较结果; 直接随机测试通过随机产生数据、地址、控制等信号检查功能正确性,减少模拟仿真工作量; 代码覆盖率分析主要根据模拟仿真时统计代码被执行数,可以按陈述句、信号拴(Toggle)、状态机、可达状态、可触态、条件分支、通路和信号等进行统计分析,以提高设计可信度。

  系统级验证

  系统级验证主要确认芯片体系结构满足所赋予的功能/性能要求。系统级设计阶段将用户需求转换成功能/性能要求,并实现行为/功能设计,然后映射到相应的体系结构上(设计输入、硬IP核、软IP核、软/硬件划分、性能分析、总体优化、性价比评估等反复叠代),最后进行系统级验证。

  在系统级验证中,往往要构建虚拟目标系统,如中科SoC芯片在实施验证时,将其所有对外接口挂接许多虚拟 IP核,同时编制了BIOS、RTOS及应用测试程序(包括驱动程序)。首先做功能验证,验证是否满足要求; 其次做软硬件性能验证; 第三做系统级基准测试(自顶向下验证策略),抽取特定功能,编制测试向量/程序,定义对错条件,覆盖所有功能,形成基准测试程序(反复迭代),用于模拟仿真。

  在复杂SoC设计开发中,模拟仿真占整个验证工程师团队工作量的40%~70%,由于成本和市场压力,寻找灵巧的仿真技术十分迫切。

  功能仿真: 主要关注模块-模块(IP核-IP核)间互连验证、系统总线协调性验证和标准规范兼容性验证等,由于复杂度高,可通过事件驱动和加速技术,如硬件加速器、模拟发生器和快速建模试验等来加速和简化仿真工作。

  SoC的软硬件接口

  SoC的软件平台

  基准测试包: 首先搭建SoC整体架构,然后将每一模块(IP核)经基准测试包挂接到系统总线上。这些基准测试包有利于识别缺陷,但它们不是设计工作的一部分,而是为了验证而引入的。基准测试包测试向量来自于IP核供应商、直接随机产生、手工编制,或由系统级测试捕获。

  事件驱动仿真: 使用比较普遍,像NC_Verilog、VCS等均支持,但受芯片规模和性能限制。首先设计代码被仿真工具所接受,其次编制基准测试向量(波形或RTL),第三运行仿真,第四通过单步调试,错误定位 、改正后可再次仿真。

FPGA验证

  随着半导体制造技术的不断前进和相应的设计规模以及复杂度增加,使得传统的软件仿真工具已不可能完全解决功能验证的问题。而且一些需要处理大量实时数据的应用(如视频)也越来越多,因此要求能够在接近实时的条件下进行功能验证。

  FPGA验证成为SoC设计流程中重要的一个环节,一方面作为硬件验证工具,可以将所设计的RTL级代码综合实现后写入FPGA芯片进行调试检错; 另一方面可以进行软件部分的并行开发,在验证板上检测驱动程序、启动操作系统。FPGA验证的流程相当于一个FPGA设计的主要流程,它主要分为设计输入、综合、功能仿真(前仿真)、实现、时序仿真(后仿真)、配置下载、下载后板级调试检错这几个步骤。总的来说,FPGA验证是整个SoC设计中一个重要而且有效的验证步骤,用来改进RTL级设计代码,验证功能的正确和完整性,提高SoC流片成功率。

  一个高质量的验证计划使得验证工程师可以更早地开发标准测试程序环境。这种并行的开发验证环境,能尽早给验证团队一个明确的目标,也是保证验证可重用(re-used)的关键。为了得到一个高质量的验证计划,验证工程师要正确和充分地理解设计需求和规范,要与设计工程师及时地交互,这样才能保证验证计划的易读、易用和可重用。因此可以说,一个好的验证计划可以有效提高验证效率,缩短开发周期,在SoC开发中有着重要的意义。

  新的测试流程

  目前,人们开发测试程序通常沿着设计、测试程序开发、芯片原型验证的思路进行,各部分孤立地进行任务分配、需求分析,然后分别执行,测试的过程还要不断完善测试软件。测试程序开发完成之后,还要对测试程序本身进行调试,通常需要多次反复修改测试程序,时间上也需要几个月的时间。这对于“6个月赢得90%利润”的市场法则来说是难以接受的,解决测试程序本身调试需要较长时间这个问题,迫使人们进一步改进设计和测试的流程。

  为了解决上述问题,新的测试流程将工程设计验证测试流程与生产测试流程并行处理。其核心思想是利用虚拟原型对测试工程和IC设计过程所需要的测试程序(本身)进行查错和调试,同时,也将虚拟原型应用到生产测试流程之中,完成面向生产的测试程序的查错和调试。

  FPGA和PLD在搭建虚拟原型,完成对测试程序调试的过程中扮演着重要作用。通过利用虚拟环境,可以极大地降低对测试程序进行调试所花费的时间,减少掩膜次数,节省大量、昂贵的掩膜费用,提高成品率,并在加快产品上市时间的同时,达到芯片利润的最大化。

1

点赞

刚表态过的朋友 (1 人)

发表评论 评论 (1 个评论)

回复 cmmjava 2023-12-21 13:30
感谢分享

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 2

    获赞
  • 7

    评论
  • 326

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-22 18:25 , Processed in 0.017096 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部