干货分享:闪存主控芯片验证全流程

存储 存储软件
设计验证是芯片产业链中关系到芯片质量的重要环节,随着芯片规模扩大及片上系统(SoC)设计复杂度提升,验证目标从功能正确、性能达标向满足业务应用快速适配部署的需求发展,其难度和重要性不断提高。

 设计验证是芯片产业链中关系到芯片质量的重要环节,随着芯片规模扩大及片上系统(SoC)设计复杂度提升,验证目标从功能正确、性能达标向满足业务应用快速适配部署的需求发展,其难度和重要性不断提高。

闪存主控验证由于其业务应用的特点,需要关注前端接口协议处理、后端闪存吞吐以及针对不同业务读写均衡和异常处理的需求。其导向随着“软件定义存储”的发展,更加强调与业务系统实际应用中的配合;其复杂程度也随芯片计算存储融合的发展而不断提高。为了在有限的市场窗口周期内快速迭代,缩短整体芯片及业务方案的研发周期,需要综合应用各类验证技术和工具来有效提高闪存主控的开发效率和质量。以下是对闪存主控验证工作的业务梳理、目标概述和全流程的简要介绍。

1.闪存主控验证业务分析

1.1 特点:系统构成复杂。

闪存主控和网络通信、图像处理等芯片不同,它不是单纯的输入输出数据流业务处理的模型。其系统由定制算法、数据调度、通用计算处理、总线仲裁、内外存储、数据接口以及外采三方等多功能单元构成。对于不同类型的功能单元,其验证流程及策略各有其特点。

1.2 需求:功能性能功耗平衡

闪存主控数据流的调度效率除硬件本身的吞吐率和延迟指标外,还受片上运行的处理调度算法的性能影响。因此其验证策略上需要重视芯片在不同数据业务模式下的功能准确、性能达标和相应的功耗表现。

1.3 问题:单元与系统偏差

闪存主控的内部功能单元均有预期的质量指标。但功能单元质量满足目标与实际业务满足需求仍旧存在偏差,其契合度依赖于固件和硬件的协同处理。例如数据粒度,内外存分配管理策略等,都会对系统应用产生影响。为了达到功能、性能和功耗的有效平衡,需要固件的反复调试,甚至硬件架构的调整迭代,其开发周期较长。

2.闪存主控验证流程策略

为了满足芯片产品高效能、快产出、低风险的需求,忆芯通过架构和实践,实现了适配闪存主控设计验证的验证方法论及相关流程策略等。

2.1 ESL设计验证流程概述

ESL(电子系统层次)设计验证方法是以能够紧密配合的方式开发、优化和验证复杂的系统架构及嵌入式固件的方法学,它提供了寄存器传输级(RTL)实现的验证基础。通俗的说法,可以认为它提供了同时开展原型系统研发、软硬件划分、固件开发、硬件验证的方法,让芯片未实现之前就可以着手片上软件开发工作,缩短开发周期。

对于闪存主控设计来说,ESL方法利用事务传输的软件模型模拟硬件模块划分;利用处理器的模拟软件进行业务调度;利用数据结构+命令接口模拟闪存的模型;在设计初期通过软件原型系统了解调用其中的瓶颈或者高频访问的业务部分,分析系统吞吐带宽,重点加速突破,快速迭代,整体加速了研发的进程。关于设计方法细节本文就不加以赘述了。

而对于验证来说,基于ESL方法论的平台开发与应用方式与传统芯片验证有较大不同。

传统方法中的设计验证迭代策略如下图所示:

 

传统流程在原型系统软硬划分完成后,首先开始硬件的设计以及验证仿真工作。在发现问题时,直接做硬件结构的迭代优化,而极少反馈到原型系统改动。但是此时并发的片上软件研发仍是基于原始抽象的事务流程开展的,其控制接口定义乃至处理流程都可能与硬件系统形成差异。为了弥补该差异,通常会进行FPGA平台的软件开发调试使其适应于硬件的迭代演进。但该方法受限于硬件开发,需要单元验证稳定后才能够开展。同时,由于FPGA平台与实际芯片存储和总线的差异,关于性能及功耗的验证无法固定软件方案,需要进行耗时的芯片性能前端仿真加以确认和修改;芯片实际生产后,仍需要进行后续研发适配以及较长周期的迭代优化。可以认为片上软件方案对于FPGA/ASIC分别都是部分定制性质的。即使硬件规格不做任何改动完全符合原始设计规格需求,其实际硬件与固件的开发适配仍旧需要二次迭代,这是由软件和硬件研发平台的分立特点决定的。

而基于ESL的验证平台系统的开发是从系统层次的业务需求开始的,从最初实现就体现了软硬件协同和一致性导向。其与传统验证方法的根本区别是开发的调度软件或者功能模型可以和硬件实例配合,在混合系统里进行协同仿真验证;

同时基于标准接口开发的各组件可以几乎无缝的适配软件功能原型平台和硬件仿真系统。以下是ESL的一种典型开发方式的示意图,定制硬件设计的同时,软件实现固件、架构、集成、验证仿真、分析的多类迭代的一致性出口,使得整体的开发过程不依赖于硬件设计的完备程度,且能为反向快速迭代硬件提供有力平台保障。

 

2.2 设计验证的平台化

为了系统快速迭代,需要对软硬件接口形式进行统一管理,实现标准定义下软硬件的寄存器,接口,连接关系和基础测试模板的自动化生成。其中利用了标准化的IP-XACT定义规范。示图如下:

 

2.3 验证架构策略

对于闪存主控验证实现的方法策略分为两类情况加以阐述。

2.3.1 新架构

对于全新架构的芯片,由于大部分硬件均为***实现,需要进行自下而上的设计验证开发。其主要需求是规范的单元模块验证平台,能够提供可复用的激励和采样的接口定义和主、被动模式灵活调整的激励,检查单元组件以及与上下游单元的接口连接关系文件。而且要求参数化定义接口,来灵活适配不同项目的配置调用。

该策略配合ESL平台,可以在硬件架构出现小范围改动时***时间一致更新原型系统、软件模型及新硬件。当单元功能开发通过回归测试达到一定稳定性后,可以逐步进行部分的系统联合测试。单元集成过程通过上下游功能模块的接口定义自动连接完成。

其基本关系适配的情况如下图所示:

 

由图所示,通过功能单元的原型描述生成软件系统事务级的接口以及实际核心功能的参考模型框架,并开发实现C和Systemverilog的功能模型。对于仿真平台需要使用的激励和采样监控等功能,该流程也提供了接口、存储和寄存器访问层适配等基础组件。信号内聚的行为组件和外延的接口组件两部分统一,构成了功能单元的参考模型,最终会以IP功能单元的设计实例作为比较对象,对其进行验证。

向上集成的流程会分步骤进行行为组件+接口组件和成熟功能单元的混合连接,对于部分已完成设计的功能单元进行子系统级别的验证,最终实现全实际硬件系统的验证。开发某中间阶段闪存控制芯片系统验证示例如下:

 

由图可见,验证子系统由部分软件模型和硬件实例混合构成。硬件实例的验证借助于实例上下游的软件模型,对于数据通路的相关部分加以探测及数据采集。各个子模块的业务比较可以通过内置或者外接的记分板、断言等对采集的数据进行灵活应用。

2.3.2 迭代架构

闪存主控芯片架构成熟后的开发多考虑迭代演进,其片上系统的主体架构不变,只更新某些功能单元或调整部分架构。验证开发可以用更新模块的ESL模型并结合功能单元的参考模型进行部分系统的替代进行原型系统验证。

对新单元模块,为了保障流程上不受到多模块联合调试初始阶段异常查错难以定位的影响,可以通过其上游单元参考模型为需要验证的子模块提供接口激励,同时配合该单元的下游功能单元的数据采集进行验证,其他模块内部可以空置,以加速该模块的验证过程。而片上系统的整体验证则可以基于ESL级别的C程序控制架构及流程进行平台迁移,保证调度程序的一致性和无缝切换。其部分子模块验证示意如下:

 

灰色部分即是纯空接口的模型。为了验证新设计数据搬运的功能,使用了CPU的模型以及部分存储模型。

2.4 性能及功耗验证

对于闪存主控来说性能指标和各类工况的功耗指标是产品竞争力的关键体现。对于系统的并发度、吞吐率和响应延迟都有明确的验证要求。我们这里借用了软件工程的测试方法来阐述。例如负载测试、压力测试、沉浸测试、尖峰冲击测试、配置测试、隔离测试等。负载和尖峰冲击测试基于仿真平台进行,重点在系统的瞬时和持续极端硬件性能的验证。而压力和沉浸测试会基于FPGA平台进行,对于系统长时间运行稳定的硬件信号基础进行验证。配置测试和隔离测试则会对芯片业务不同模式下的功耗需求和模块开关定义进行验证。

2.4.1 性能的分段验证

系统整体性能满足需求的前提是确保单元模块性能达标。为此首先对各单元的数据流水延迟和吞吐速率统计分析验证。接着模拟真实业务功能模块,真实总线配合理想的内外存吞吐,通过统计计算保证总线能够有效的进行上游数据的接受和分发。该步骤可能会进行内外存尺寸,访问方式等各类优化。然后在该系统上通过功能单元仿真模型拟合的延迟和吞吐的综合测试实际内外存、存储接口。以上各部分在前端仿真平台可实现。其结构如下各图所示。

 

2.4.2 性能的综合验证

通过单元的性能验证能够保证理想工况下硬件的单元性能。而真正结合调度控制逻辑,对于闪存主控前后端通路进行调度效率和性能验证调优在芯片投片前会分两步骤进行。

一、通过FPGA进行关键业务通路性能的等效计算。

其验证关注前端接口吞吐率及延迟,系统核心与片上内存吞吐率及延迟和后端闪存接口的吞吐率及延迟。因为系统时钟频率以及FPGA的内外存都与实际芯片不同,所以全流程业务性能不作为该阶段验证目标。

 

二、采用硬件加速器进行真实操作系统连带设备驱动接口的验证。

由于实际硬件加速器对外物理接口是标准频率但仿真芯片系统运行在较低频率,需要操作系统驱动的修改以防止协议访问超时的情况。

 

2.4.3 功耗的单元验证

系统低功耗设计基于ESL软件模型代码调用统计分析,软硬件划分之后开始实施功能单元的低功耗验证工作。其验证关注低功耗控制序列在单元上执行时各功耗状态切换流程的可靠性。内容包括而不限于时钟的调节、关断;复位的控制;电压的切换;电源的隔离管理;内存工作状态调整以及整体子电源域控制等部分。

通过内部信号探针及断言,验证可有效保证功能单元确实经历过低功耗的各个定义状态(PST)以及正常恢复功能应用。例如带有动态切换频率及电压的功能设计,频率切换通过网表+时序约束文件进行多频率节点仿真,保证时序裕量;对于电压的变换则通过仿真的电源状态覆盖率(PST coverage)来确定。整体的功耗控制描述均由IEEE-1801规范确定的UPF文件来定义。不同状态功耗估值也可通过对仿真波形计算统计得到结果。

 

对于功耗控制单元(PMU)的验证,除了利用参考模型与硬件输出控制状态比较来保证各单元功耗状态切换过程灵活、准确,对于实际系统多个单元低功耗状态的衔接配合,也会以交叉的功能覆盖率加断言的形式加以验证。

 

2.4.4 功耗的整体验证

对于实际整体片上系统功耗,首先通过带有UPF的系统级前端仿真来验证,确定各个不同模式下电源域、时钟域的切换准确。UPF迭代稳定后,通过硬件加速器业务仿真来确定功耗符合预期范围。在网表综合阶段,通过形式化验证来保证插入的电源隔离、电源控制和电压控制等单元符合设计时的UPF描述定义。

 

布局布线后,通过网表仿真(PowerGating-Gatesim),保证其实际业务切换时延及相应的控制流程准确,因为仅形式化验证对某些特殊处理无法给出结论。其示意如下:

 

2.5 形式化验证

对于安全加密使用的模块,除了保证功能性能以外,其自身的安全性如何保障是通过形式化验证的方法进行的,其目标是所有的代码功能有效及失效分析均可以通过数学公式加以论证,为提高安全单元的可靠性提供保障。其抽象示意如下图。

 

关于模块、系统的异常处理部分也可以作为验证目标,基于形式化验证的方法进行失效分析和安全策略调试。

2.6 总结

ESL方法使得验证可以利用基于软件仿真器+ESL平台开发的闪存主控固件开展,和硬件设计基本同步开始,并可以通过标准协议提供控制接口移植至FPGA进行开发。同时调度程序也可无缝移植到硬件加速器进行系统验证。在实际系统开发过程中,两者的应用保证团队可以快速获得硬件以及固件验证的结果并可以相互配合分析迭代,加速整体研发进程。在开发时,各团队并发同步,且回片可即刻进行全流程的综合调试及固件的调优过程,降低时间成本。同时,分层验证组件的构架提供可互换的软硬件模型,可加快整体系统的实现和调试节奏。形式化验证则提供了安全可信的功能设计基础。

 

3.问题提示

实际闪存主控验证需要关注外部业务接口发生错误后易混淆的部分,需要着重加强可测性设计以及提供充分的业务测试,特别针对协议规定的异常处理以及避免整体系统失效的处理设计,要加以重点验证。

参考文献:

1.ESL Design and Verification——A Prescription for Electronic System-Level Methodology, Brian Bailey, Grant Martin and Andrew Piziali

2.在SoC设计中采用ESL设计和验证方法,Seyul Choe, CoWare

责任编辑:武晓燕 来源: SSDFans
相关推荐

2019-06-25 10:17:56

SSD主控芯片

2018-07-09 08:50:58

全闪存存储容量

2018-06-21 08:48:55

SSDNAND闪存

2017-08-21 15:34:18

闪存阵列厂商存储

2022-03-07 14:30:00

网络安全芯片设计

2018-09-05 14:46:06

SSD主控芯片

2017-05-25 16:33:11

华为

2015-08-15 21:18:03

惠普全闪存

2021-05-19 15:15:52

戴尔科技

2017-05-15 11:27:35

华为

2018-04-02 17:52:33

闪存

2019-03-14 14:18:49

全闪存混合闪存存储

2017-06-09 04:23:33

闪存数据中心存储

2018-04-12 08:32:24

NVMe全闪存存储

2015-09-19 20:37:59

华为

2013-11-21 15:19:12

戴尔

2018-04-11 18:06:37

华为

2011-03-14 14:18:09

日本地震芯片市场

2017-01-06 16:01:51

全闪存IBM
点赞
收藏

51CTO技术栈公众号