随着微电子产业日新月异的发展,ic设计的规模越来越大,集成度越来越高,已经足以将一套完整的系统集成到一块小小的芯片中。在这种形势下,soc技术应运而生。随着ip核复用技术的出现,soc芯片的设计已经不再是很大的难题,soc芯片的验证已逐渐取代芯片设计成为芯片开发阶段的瓶颈。现阶段soc芯片设计的正确性要经过前仿真、后仿真以及fpga验证来保证。前仿真包括单元验证、集成验证和系统验证,后仿真包括带反标时序sdf的网表仿真,其中系统验证和后仿真都需要关注soc芯片的全局功能,这就涉及soc的软件仿真和硬件仿真的协同问题。本文以dsm模型替代arm核,以vmm验证方法学和vcs仿真器为基础,搭建一个可重用性高、调试和定位问题方便、仿真真实性高、软件和硬件能够很好配合的协同验证平台。
软硬件协同仿真架构如图1所示,协同验证分软件验证环境和硬件验证环境两部分。软件代码通常由c/c++和汇编语言混合编写而成,然后由软件编译器转换成二进制格式,最后将该二进制文件加载到soc芯片的存储器中去,芯片boot启动时由arm核调用软件代码并执行;硬件环境基于vmm验证方法学进行搭建,下文中会有详细介绍。协同仿真就是通过事件和命令,使用一些机制,在这两个环境间进行控制。
2 dsm模型的使用
soc芯片的cpu一般选用arm,协同验证平台中arm可以用seamless cve模型替代,或者直接选用arm网表。采用seamless cve模型进行仿真,虽然速度比较快,但需要替换设计中的memory模型,且必须使用cve自己的模型,这样与芯片真实情况有出入;采用arm网表进行仿真,速度比较慢,调试也不方便,但是更接近实际情况。相比于这两者,本文采用的dsm(design simulation model)模型由arm公司提供,能完全模拟arm的接口和时序行为,具有更高的真实性,而且dsm无需更换存储器模型和外挂仿真工具,使验证dut与实际芯片完全一致,即不必为了满足仿真需求修改部分rtl代码。此外,dsm环境仿真过程中输出的log文件log.eis真实记录每个周期执行的cpu代码和操作。根据该文件能快速定位软件问题。cve环境通过调用xray软件调试工具,虽然可以进行单步调试、没置断点等操作,但出现软件问题时定位没有dsm环境那么直观、方便。
dsm是arm公司提供的设计仿真模型,该模型直接从arm公司的rtl代码经过加密处理转化而来,具有同真实rtl代码完全一致的功能和特性。在时序仿真过程中,还能直接对该模型反标时序。在仿真过程中,将模型wrapper——也就是模型的最顶层——例化到rtl代码中,仿真器在仿真过程中触发wrapper,请求model manager动态调用模型库进行仿真。model manager响应请求动态调用模型库文件,达到功能仿真的目的。由此可以看出,model manager在仿真过程中充当中介角色,将模型和仿真器动态连接在一起。dsm模型的工作原理如图2所示。
3 软件仿真
arm汇编器工具armasm、arm的c/c++编译工具armcc和armcpp,以及arm的链接工具armlink,利用arm工具对软件代码进行编译链接生成的文件格式为elf格式(executable link file),原始代码在文件中的位置通过scatter文件指定,arm提供了fromelf工具,该工具将elf格式的文件根据运行时域转化为二进制文件,以便在仿真起始阶段将代码放到指定的memory中。在makefile中将elf格式转化为bin文件的具体实例如下:
fromelf-bin output./software.elf
上述语句表示将software.elf文件转化为二进制文件放到当前目录。
在软硬件协同仿真的初始阶段,需要将生成的二进制文件导入相应的存储器中,这通过verilog提供的系统函数fread实现。下面是一个将二进制文件导入存储器的实例,先通过$fopen函数读出文件地址,然后通过$fread函数将指定地址的文件数据传给变量inst_fik_word,最后将变量inst_file_world中的值传给存储器中的相应地址单元。在dsm仿真中都需要一个这样的“桥梁”文件,将软件和逻辑链接起来。
软硬件协同仿真的软件结构如图3所示,系统boot起来后直接跳转到main()函数进行单进程任务,如果出现中断异常,则boot代码中根据中断向量表地址跳转到中断处理函数。中断处理函数中包含对各中断的处理,main()函数中调用各个模块的tc(test case)函数,tc调用底层的驱动代码。驱动代码的编写则基于各个模块的寄存器定义文件和全局变量。该软件结构清晰可控,便于各测试用例tc的并行提交和管理。
4 构建基于vmm的软硬件协同仿真平台
在软硬件协同仿真环境中,完全可以采用基于vmm的验证架构,但软硬件协同仿真环境较一般的纯逻辑集成验证环境难度大,主要体现在软硬件协同仿真环境冈为仿真过程中有软件代码在执行,同时验证环境也在执行,因此如何将软件代码和硬件环境协调起来是关键。在仿真过程中,软件和验证环境之间需要建立一种通信机制,如可以通过中断通信,也可以通过某一特殊信号线通信。软硬件协同仿真环境中,某一项功能点的测试常常需要软硬件两条测试用例tc,软件tc需要驱动代码,而一般的集成测试用例不需要软件tc和驱动。典型的vmm的验证架构如图4所示。
验证的总体架构是分层次的,层次化的验证环境具有很好的扩展性和重用性,各个层次完成自己特定的功能。test层又叫tc层,主要完成数据激励的定义、环境的控制工作。generator层定义的数据“模板”,产生各种数据激励。function layer层完成输入和输出数据激励的收集,进行自动比对。command layer层主要按接口时序收发数据,同时将一些底层方法(如数据读写等)进行封装。signal layer层主要是完成接口信号连接工作。不同的人关注不同层次,一般的验证人员只需要在test层工作,编写测试向量。只有搭建环境的验证人员才需了解各个层次。验证架构的层次化降低了验证环境复杂度和环境维护成本,提升了验证效率。
本文基本采用图4的验证环境架构的思路,并在其基础上进行修改,添加相应组件。vmm验证环境架构如图5所示,环境数据流从测试用例test case开始,经过数据包产生器generator和数据处理器transactor送给bfm处理,bfm把验证环境的抽象层次从信号级抽象到transaction级,在实现上只做时序转换功能,利于重用。从发送方向看,bfm只负责将接收到的数据发送给dut;从接收方向看,bfm只负责将接收到的数据发给transactor,实现任何数据的解析。monitor抓取接口上的信号,并分析各组控制信号之间的逻辑时序关系,检查其是否满足协议所规定的逻辑时序关系,同时把监测到的数据信号转化为数组送到rm解析。与bfm一样,monitor只实现时序转换功能,不做数据解析。从monitor上采样数据再送入rm,是基于重用的角度考虑。参考模型(rm)用于预测数据响应,check组件将rm的输出数据与被观测响应进行比较。
该验证环境架构还添加断言(assertion)来提高观察和定位设计问题的能力。断言是检查dut中信号行为是否正确的观察器,用来描述被预期的特定性质。本文采用的断言为sva断言语言,可以应用到设计过程的各个阶段,还可以统计功能覆盖率。
5 基于dsm的软硬件协同仿真调试
由于dsm模型在仿真过程中,会将arm执行的每一步动作打印出来,生成一个log.eis文件,由该文件给出的信息定位问题非常方便,如图6所示。
图中第1列表示程序执行到arm的第几个时钟周期。第2列是arm执行的指令类型。第3列的ccfail表示条件执行时是否执行,如果条件执行了,则不打印ccfail,反之则打印出ccfail。第4列是arm执行的机器码。最后几列是详细的arm执行的动作,从图中可以看出arm执行哪一步指令,将哪些数据读写到哪些地址。对应的仿真波形图如图7所示。可以看出,log.eis完整无误地将arm执行的动作打印了出来。
结语
设计验证是soc设计的关键技术之一,贯穿整个soc设计过程。随着soc技术的发展,软硬件协同验证的效率和正确性对整个soc设计的影响也越来越大。相比传统的软硬件协同环境,本文介绍的环境速度快,更真实,调试也更加容易。该环境可继承性好,能够为各种soc项目开发验证所用。
安防不仅仅是保护人们的安全 同时也要确保个人信息的安全
如何应对高分辨率转换器器件的噪声挑战?
浅谈预测性维护在智能工厂的应用与优势
揭秘!智能网联汽车必备总线测试方案
现如今的人工神经网络能有多好的表现?
嵌入式系统芯片的软硬件协同仿真环境设计
具有超强真实感的,VR《赛罗奥特曼》电影,将上线小米vr一体机
TBY-753A型快速充电稳压电源原理
华为荣耀8 Lite亮相工信部 传国行的两个版本本月正式登场
研究发现金属氧化物具有超强的物理储能能力,可提升电池续航3倍
信号发生器E8251A unlevel报错维修案例
3D人脸识别研究探索
高通2012年创收191亿 搭苹果顺风车登顶
新能源汽车新福利:纯电SUV续航里程可达330公里
法国AXON CABLE推出超微D型定位连接器
跨界乱象:地产网络企业做芯片,跨界而来为何谋?
基于HT66F系列BLDC无线吸尘器
QD-Mini LED是什么,它有什么特点
BGA封装内存
AR如何赋能红米提升双11销量表现