TURBO51嵌入式微处理器功能验证
1. 1 背景
TURBO51的工程背景是TURBO51嵌入式微处理器结构设计上采取经时间考验过的32位机主流系统结构, 在严格保证对8051 指令集兼容的前提下,通过重新定义其处理器核的系统结构来挖掘处理器结构上的并行性实现。在传统8051软件开发环境下实现本要由更高位宽的32位处理器来完成的工作并完全重用所有现有软件资源。在 8051指令级多种寻址方式混合且指令不定长的现实下实现了高性能的体系结构, 乱序发射, 分支预测, 精确例外处理, 基于猜测的先行预取,片上一级指令高速缓存。处理器系统结构的复杂给验证提出了很高的要求。而且, 由于TURBO51 是作为SoC 的嵌入式处理器核, 是整个大规模SOC 的控制核心和用户接口, 如果嵌入式处理器设计中验证不完善或性能达不到设计要求,都会导致整个SoC 项目的开发致命失败, 因此对嵌入式处理器的验证在SoC 设计中是最重要的部分之一。
一切对高性能体系结构的追求都必须首先建立在以设计的正确性为前题才是有意义的。TURBO51的验证面临三个主要挑战:
( 1)正确性, 所采用的高性能体系结构也是复杂和高风险的, 只有设计正确才会带给SoC 性能上的提升。
( 2)兼容性: 相对于传统8051, 在程序的执行过程中,中断和异常常会打断程序的执行, 动态流水线的处理器由于指令的动态乱序执行, 但又必须对外部程序来说是和完全顺序执行只存在速度的差别而非结果的差别, 所以它必须能精确地与顺序执行条件下的例外结果保持一致。
( 3)指令和操作数空间巨大, 寻址方式复杂:
8051指令集共有111条指令, 有多种寻址方式和不定的指令长度。另外, 8051指令集还将输入输出设备寄存器与体系结构寄存器作为同种寄存器访问。
这些都成为了结构设计和验证中的难点问题。
( 4)验证充分性的衡量: 在验证过程中根据发现错误的性质、原因和数量分布, 评估正确性程度和调整下面的验证计划,使验证更深入, 实现设计错误的快速收敛。
1. 2 微处理器验证现状
目前世界各处理器公司用于功能验证的方式主要是模拟验证, 形式验证, 硬件仿真加速。但总的看来,由于指令集庞大, 比如, 它的完全无错的测试向量的数量是指令条数阶乘及每个操作数, 地址数阶乘。在有限的时间很难实现。除非指令和操作数的所有两两组合都已测试过,否则, 即便经过了这些验证, 也只能证明在测试已覆盖地方正确而不能证明设计在任何情况下都正确。
形式验证是指通过数学方法证明设计的完备性, 即这种方法下的样本空间是测试对象所有可能的状态。A rithSMV, * PHDD。由于状态样本空间巨大, 它只用设计属性检查工具, 目前仅用于局部逻缉验证。
模拟验证: 包括RTL仿真和门级仿真。这一阶段验证的效果很大程度上由测试激励和判定模拟结果的方法决定。在微处理器验证中, 采用汇编语言编写测试激励,运行操作系统, 应用程序和随机生成测试向量。
硬件加速仿真: 为克服模拟仿真验证速度慢的缺点,采用FPGA 的物理原型验证可以在流片前运行操作系统和应用程序, 进一步在系统级验证正确性。
2 TURBO51的验证方法
TURBO51在设计中用到了形式验证、模拟仿真和硬件加速仿真。采用自底向上的子模块级验证再自顶向下的宏模块及系统级验证的方法。在整个设计过程中,验证与设计是一个整体, TURBO51在进行文档时序设计时就同时开始针对正在进行的设计编写验证计划, 设计和验证的工作在设计文档和验证计划中进行精确到每个时钟周期的行为描述和变量定义开始,是整个设计和验证最重要的部分。由于TURBO51的设计要保证对传统8051指令集的后向兼容, TURBO51采用两台可进行单步调试的8051硬件仿真器,两片传统8051, 两片采用了简单流水结构的改进版8051 作为正确标尺。测试激励在此先逐一运行,并将其运行结果作为界定执行正确和兼容正确的标准。每个模块在每个时钟周期的每个寄存器读写和各个设计阶段的验证方法, 验证结果,问题分布, 验证策略在此规定, 并手工编写测试程序进行仿真。在验证文档中记录如何判定设计正确的与严重设计漏洞及原因,并在设计文档中记录哪些临界态已考虑过了, 为以后怀疑某种情况下有没有可能是此出错提供重要依据。在TURBO51的设计中覆盖率指标在文档阶段已经引入,每个设计了的逻辑一定要用测试来证明有必要这样设计和功能正确。功能设计中每个条件判断总能在测试文档中找到测这个条件的方法及判对标准。很多时候在写测试方法时发现了很多设计中没有考虑过的情况。功能设计文档和以覆盖率为指导的验证文档相互作用,使TURBO51在开始RTL之前就己
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)