​仿真测试与原型测试(五)​

本文详细描述了SoC芯片的仿真测试平台设计,使用RISC-V指令集进行基础和扩展测试,包括SHA256指令加速,以及利用FPGA进行原型验证和性能评估,包括Coremark测试和分支预测器对IPC的影响。
摘要由CSDN通过智能技术生成

1.1 仿真测试平台

SoC芯片的仿真测试依赖于仿真测试平台Testbench。图5-1给出了本文SoC芯片的仿真测试平台结构。Testbench基于Verilog和交叉编译环境设计,被测试的部件叫做DUT(Design Under Test)。在对DUT施加激励之前,要设置测试平台的“timescale”来指定测试平台的时间单位和时间精度。例如,timescale为1ns/1ps,表明在该仿真测试平台中的时间单位是1ns,时间精度是1ps。

图5-1 测试平台架构图

Testbench环境产生DUT所需的时钟和复位信号,以及DUT激励信号,就组成了testbench的“最小系统”。然后,编写测试用例来测试被测试设计的。

首先使用本文前面介绍的GCC工具链编译C程序或者汇编文件,生成机器代码,在testbench初始化阶段通过“$readmemb”函数读入XQ900RV的指令存储器IMEM中。XQ900RV复位完成后,会从指令存储器中的第一条指令开始执行。

1.2 指令集仿真测试

1.2.1 基础指令集仿真测试

基础指令集测试采用RISC-V官方提供的测试用例“riscv-tests”进行测试,其包含IMAFDC指令集的全部测试用例。测试用例使用汇编语言编写,使用本文构建的GCC工具来逐个编译上述测试用例,将生成的hex文件使用Verilog中的“$readmem”函数读入指令存储器,在测试平台运行指令测试。

由于RISC-V基础指令集包含上百条指令,如果一一测试的话十分耗费时间,因此本文中编写回归测试Makefile脚本,自动批量执行基础指令测试。为方便观察仿真测试结果,本文在Makefile脚本中设计了“make regress”命令来测试全部的指令集,并将每个指令的执行结果输出于一个文件中,便于查看全部回归测试结果,如图5-2所示:

图5-2 部分基础指令集测试结果

1.2.2 K指令集仿真测试

本文在验证实现的加解密指令时,首先使用C语言编写算法的测试原型,算法原型产生“Golden Data”用于参照。在编写C算法原型的时候,预留本文扩展的加解密指令的接口。在没有使用加解密指令的C算法原型中,使用C语言描述各个加解密指令的逻辑;在进行加解密指令测试时,用本文3.4节编译器提供的内建加解密builtin函数实现。

1.3 FPGA原型验证

FPGA进行原型验证不仅进一步验证系统的功能和性能,更可以加速仿真过程,对于复杂应用程序的仿真验证效率提升更为明显。FPGA原型验证流程包括:首先将所有的RTL设计移植到FPGA中;接着将调试无误后执行FPGA开发流程,即约束、综合、布局布线并产生bitstream文件,并将生成好的bitstream文件下载到FPGA开发板中;最后将仿真测试用例使用本文3.4节提供的编译器编译好后,加载到FPGA的RAM里,编写程序使用按键控制FPGA上电运行。

本文使用测试板为AX7A200,FPGA芯片型号为Xilinx的xc7a200t-484-2,如图5-3所示。

图5-3 AX7A200 FPGA开发板

在Vivado2021.1工具中对本设计进行综合之前,需要给SoC设置约束。约束主要包括时钟约束、约束复位按键等。

1.4 性能及分支预测测试

1.4.1 Coremark性能测试

为测试处理器核心的性能指标,常使用标准测试程序(Benchmark)。标准测试程序执行一组数学运算,以测试处理器核心的整数及浮点运算能力。常见的测试程序有Drystone、SpecInt 2k6和Coremark等[56]。

EEMBC将Coremark代码托管在Github平台。用户可以修改Interations变量的值来更改Coremark迭代次数,为了更加准确地测试CPU的性能,需要迭代10次以上才能获得较为稳定的结果。本文使用两种Coremark程序运行方法,第一种是使用软件仿真平台运行不同次数的Coremark程序;第二种是使用FPGA加速Coremark仿真测试。如本文1.1节所述,使用两种测试方法都需要将应用程序编译成对应的二进制代码。另外,使用本文所述的FPGA原型测试平台还需将生成的程序文件分解为4个bank。

仿真软件采用单线程的iverilog、单线程的Verilator、单线程的VCS和FPGA。其中,iverilog是一款开源的轻量级仿真器;Verilator是一款开源的、能够将硬件描述语言转换成C或System C等高级语言描述模型的编译型仿真器;VCS是Synopsys的高性能编译型商用仿真器。实验主机CPU为Intel i7 12700H,仿真软件运行在在Centos7系统,FPGA运行频率为35MHz。在Coremark程序中设置迭代10次,对本文SoC平台进行测试。结果如表5-1所示。

表5-1 不同仿真方式的测试时间和结果

仿真工具IverilogVerilator单线程VCS单线程FPGA
测试时间10+小时8分钟5分钟~5秒
Coremark得分3.293.293.293.29

1.4.2 分支预测器性能分析

为检验分支预测器改进对CPU性能的影响,本文进一步设计了验证环境来测试静态分支预测器、Gshare分支预测器以及改善分支别名以后的Bi-Mode分支预测器。

CPU性能计量的一种方法是使用IPC,即每周期执行的指令个数。本文用1.4.1节Coremark程序作为测试的基准程序,分别测试在XQ900RV中使用静态分支预测器、Gshare分支预测器和Bi-Mode分支预测器的Coremark程序运行情况。为了计算IPC,在测试平台中检测CPU的退休指令数目,同时统计Coremark程序运行的CPU时钟周期数,就可以计算出指令的IPC,公式如下:

1.5 本章小结

本章首先搭建了测试平台,使得程序能够被正确编译并生成对应的二进制格式文件。通过将生成的文件加载到系统的指令存储器中,实现了基础指令集和扩展指令集的仿真测试,对于扩展指令集,测试了SHA256指令的加速效果。此外,本章还介绍了使用FPGA进行原型验证的相关工作,通过在FPGA上运行测试用例并使用UART观察测试结果,完成了对处理器的原型验证。最后,本章对处理器进行了Coremark测试,使用FPGA硬件加速仿真,评估其性能,并测试了不同分支预测器对处理器IPC的影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值