FPGA的EDA工具的测试方法

一:概述

        都说EDA工具很难(芯片设计不可缺少的工具),目前我国正在举国之力来发展它(因为之前我国一直没在这个领域做基础研究,一直是使用者,所以,被美国拉开了很大的差距)。那它到底难在哪里?大家经常能看到的和理解的是芯片的工艺很难,大规模的集成电路很难,实际上,芯片最终要使用,是需要EDA工具来辅助的,大规模集成电路的设计,不可能是手工绘制电路,包括一些测试工作,也依赖于EDA工具。

        对于一款手机,我们验证它的好坏,首先是它的CPU,GPU,无非是跑分,拆机,测试。我们要探寻EDA软件的难点,自然也可以通过它的测试过程来一探究竟。并且,作为一个曾经的外行,通过测试来了解一款产品,是最佳路径。今天,我们尝试从测试的角度,来看看一款EDA软件到底是如何组成的。

        对于一款FPGA的EDA工具,它的核心功能是辅助完成 电路编程,编译,优化,映射,布局,布线,生成位流,烧录到芯片,在线调试,最终得到用户需要的电路设计。

要测试一款EDA工具,和传统软件的测试有所不同,一般包括三个方面:

  • 普通的软件测试: 面向软件的功能,性能,兼容性,用户体验,这和普通电脑软件测试基本一致。测试逻辑综合,布局布线,时序分析,生成位流等软件的核心功能是否正常。测试运行期的大规模设计上的运行效率,测试对于RTL语言,操作系统上的兼容性。测试界面是否友好,提示是否明确,操作流程是否清晰……
  • 位流验证:这个对于普通软件,基本上是不存在的。它实际上验证芯片的硬件设计是否合理,我们理解就是芯片的各个组件需要有预期的功能,可以在没有得到实际芯片前,通过位流的方式来验证。我们不可能在芯片完全生产后,才来测试所有的功能。
  • 上板测试:EDA软件有一部分功能是支撑烧录程序到芯片,并且支持用户的联调/测试的,必须要实际使用芯片和Demo板进行测试。这也是软修的的基础功能,但它依赖于实际的芯片,在存在样片或批量片,有Demo板,DV版的时候,使用软件进行测试。

软件测试:相应的方法是

        单元测试:对每个功能模块进行测试。

        集成测试:按测试的功能点不同,又分为 GUI测试,集成功能测试,性能测试,压力测试,这些和普通软件相同。

        形式化验证:对于EDA还多了一个形式化验证,后面我们再详细解释它的作用和必要性。

位流验证:实际上就是仿真验证,它不依赖硬件,采用仿真工具来验证硬件的基础设计的准确性。仿真非常重要,对于硬件产品它是必须的,因为不可能实际使用硬件来完成大规模的测试。

上板测试:我们需要实际的下载器,Demo板,芯片,完成真实的应用场景的测试。它作为软件发布的最后一道防线。

接下来,我们就围绕这三方面的测试来展开详细讲解。

二:软件测试

2.1 单元测试(白盒冒烟)

单元测试,大家都知道是什么,也就是白盒测试。这主要是通过编程对模块级的代码进行测试。在EDA工具厂家,大多是由开发人员自行完成。因为涉及复杂的算法,性能,这些工作,合适由开发人员在开发过程中完成。这不是今天要讲的重点,略过不谈了。单元测试非常重要,需要有良好习惯和较强能力的人来把控哪些地方需要单元测试。这是代码的第一关。

EDA工具,我们按模块,一般会分为 架构,建模,综合,布局,布线,时序,功耗,位流,下载,GUI等……。这些模块首先会在各自的领域和内部完成自有的模块测试。一般会有一个集成模块(通过是GUI)进行一些集成单元测试(主要针对flow进行完整的测试)。

单元测试采用的框架,因为EDA软件大多采用C++编写,所以,一般会使用GoogleTest,这个不用多说。

对于冒烟测试的时机,我们希望是相关模块在提交代码前完成自测。但是,这不一定能得到保证。为了整体的工程质量有一定保证。我们会选择一些关键的主流程的单元测试用例,在提交代码的门禁处,做一个整体的冒烟。如果有问题,不允许代码提交。注意:这是针对所有代码提交都要冒烟。当然,我们也欢迎各模块将合理的自测加入门禁,可以不断补充本模块需要冒烟的用例,这样,在指定模块进行提交时,我们会进行指定模块的冒烟用例的检查。

以上的测试,并不是EDA软件的特有的,所有软件都通用。

2.2 GUI测试

对于GUI测试,我们必须要单独拿出来说,因为它相对比较简单,但又有一定的特殊性。

我们先来看看GUI测试一般会涉及到哪些功能

  • IDE——整个IDE的界面。这里主要关注编程界面,各种输出视图。一般我们会采用 checksum方式,通过比较图像来查看是否有异常。也就是采用 自动化测试,工具有很多,比如 QT的自动化测试工具。当然,这需要软件相对稳定,并且需要人工录制脚本。
  • Flow——指整个EDA的关键Flow的验证。从综合,优化,映射,布局,布线,时序报告,生成位流的整个过程。
  • Project Manager——工程管理,这是非常重要的功能。这包括了和工程管理相关的一些高级功能,比如 Hierachy parser,property order,grouping support……这可能更多需要手工测试,当然,也可以录制一些脚本来自动化的完成。
  • Time constraint——对于时序约束生成和报告的验证。
  • Pythsical constraint——对于各种物理约束的设置和验证,比如:fence, io package等的使用和验证。
  • Configuation —— 就是烧录的过程,这里主要是需要对加密,RSA,CRC算法等进行必要的测试。
  • Debug——这个主要是要对 探针,在线分析工具等调试工具进行测试和验证,这要看EDA工具具体提供了哪些debug工具,这个也非常关键,因为客户是必须要使用的。
  • Simulation——如果EDA自带仿真工具,需要对仿真功能进行完成测试,如果只是集成三方工具,那就对集成部分进行测试。
  • Chip 查看工具——这里一般指的是chip view,floorplan 工具,这个很难自动化测试,一般需要手工进行验证,因为相应的设计和效果与器件强相关,当然,也可以针对每种器件做一些checksum的校验。
  • IP Catelog —— 这里主要针对 IP的 导入,参数定义,生成过程进行测试验证。这个很容易做成自动化测试,来保证生成过程和相关界面的正确性。
  • 电路图显示——这个一般有几种视图,一种是原始RTL的原理图,一种是综合没有map的原理图,还有就是map后的原理图。原理图一般是只支持查看的,还有一些场景还支持修改,那就更加复杂。
  • 安装包——对于最终的安装包,也需要进行不同环境的测试,看是否预期的步骤和效果。
  • License——一般EDA工具会提供License控制,会有单机版和浮动版之分,并且会控制有效期,并发数量。这些需要进行相应的测试和验证。
  • 消息,日志——不同情况下的不同类型的消息输出,以及不同级别的日志输出。

这里肯定没有列全,但比较核心的功能就是这些了,每款EDA工具必然有自已特有的功能,上述是比较常见的功能。

对于GUI测试,我们必须要做到自动化,自动化工具。有很多标准工具可以用,比如:QT的自动化工具(这个比较贵Squish),也可以采用国内的产品,比如:CukeTest。

EDA工具一般是桌面程序,会在Windows,Linux上运行(一般不用去支持MacOS),也可能会跑在国产的操作系统上。所以,如果使用cuke test,在国内的某些操作系统(信创)的项目上,还会有一些优势。

当然,前提是软件的界面已经相对稳定,

  • 我们可以录制脚本,添加检查点,断言,或者比较图像来完成测试。
  • 对于经常可能位置有变更的程序,可以根据使用的语言进行元素获取,增强脚本的适应性。
  • 提供机器人随机测试,这个需要抓取界面上的按纽什么的,模拟一些操作。随机测试程序的健状性。

GUI自动化,往往会做为交付客户版本前的版本出口测试。

注意:GUI 测试本来也包括外观设计的测试,但一般是在开发早期,由美工设计人员来完成。

2.3:Flow集成测试

        集成测试,我们一般需要定义一个小小的框架,方便快速配置不同的EDA集成和功能测试。

2.3.1:测试框架

主要是将测试时用到的参数全部抽象出来,用shell脚本或者python来解析,完成测试的框架定义。通过这个测试框架,来进行不同的参数配置,通过输入不同的测试用例,形成不同的功能测试。

下面,看看需要建立如何的参数:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值