(1)SoC核分析
无剑100实际上是一款低功耗SoC,采用的CPU核是E902。
core通过AHB总线与Icache相连
(2)验证环境分析
通过 $readmemh("test.pat", temp_mem)将二进制文件读进工程。
通过Srec2vmem.py将某文件转化为某文件,为何转化尚未搞清。(判断S[1-9]是否跟某线程或某核有关?即某核只处理某类型的指令。)初步判断测试集为riscv-tests测试集。
通过$readmemh({image,".hex"}, imem.mem)和$readmemh({image,".hex"}, dmem.mem)将bin文件读进工程
测试用例为riscv-tests中RV32ui和RV32mi测试集
通过axi总线接入TEXT和DATA ram,但axi数据来源未知。
测试激励为src文件夹中的汇编文件,为指明测试激励集。
在dual_port_bram模块中通过$readmemh(INIT_FILE, memory)将mem.hex读进工程。
测试用例为riscv-tests中RV32ui和RV32mi测试集
苏黎世联邦理工大学和波罗尼亚大学联合设计的一款小巧的4级流水线开源处理器,实现了RV32IC,以及RV32M中乘法指令mul,其目标是作为并行超低功耗处理器项目PULP(Parallel Ultra Low Power)的处理器核,所以RI5CY在RISC-V的基础上增加了许多扩展,包括硬件循环、乘累加、高级算术指令等。采用UMC的65nm工艺进行流片,RI5CY主频可以达到654MHz,动态功耗是17.5uW/MHz。采用SystemVerilog编写。
测试集有三种:
cv32e40p核分析:CPU设计——CPU核解析——cv32e40p_KGback的博客-CSDN博客
验证环境分析具体参见:CPU系统级验证——验证环境——OpenHW core-v验证环境及文件分析_riscv el2验证环境_KGback的博客-CSDN博客
参考链接:
指令集验证主要是验证CPU对指令集的兼容性,即该CPU是否能准确无误的执行每条目标指令。
目前指令集验证均是编写测试激励对DUT和参考模型进行simulation,后对比结果。
指令集的验证需要验证工程师思考该指令需要测试的特征是什么,为了确保指令的正确执行需要检查的内容是什么,为了确保该特征被测试需要进行哪些激励和配置等。验证的充不充分取决于验证人员对CPU微架构的理解和风险应对能力。
(1)RISCV基本指令定向测试
设计出来的CPU首先需要兼容RISCV基本指令,即需要满足RISCV基本整数指令及相关标准指令集。
即risc-v兼容性测试,riscv-compliance工程主要由imperas公司维护,详细介绍见:RISC-V及RISC-V core compliance test简析 - 知乎
主要测试的内容有:
(2)自定义扩展指令定向测试
对于自定义扩展指令集的验证,该验证需要修改相关的工具链并通过相关测试验证工具链的修改成功,再进行(1)中的测试。
(3)随机约束测试
对进行大量的随机指令测试
指令集验证testcase基本分为以下几种:
代码执行模式主要有以下两种:
测试的pass/fail与上述激励的种类有关
系统级验证中的形式化验证是近期较流行的一种验证方式,它是可以在simulation之前做的验证,在芯片设计流程通常处于CPU的RTL代码尚未设计好的阶段,此外,在simulation进行的同时,同样可以采用形式化验证并行工作,两种验证方法的feature做互补。
sail是REMS构建的一种描述指令集的语言,可以认为是一种机器可读的形式化ISA模型。REMS是英国的一家学术组织,该组织已构建出RV32IMAC和RV64IMAC指令集的sail model,链接见上。
riscv基金会有意用其来描述RISCV指令集。
初步来看,sail可以用来形式化testbench断言的参考模型,这些assertion可以根据sail spec来验证基于RISCV ISA的某微架构。目前该领域OneSpin GapFree已经在sail model和RTL代码间做了可比性的check,该公司仍在探索如何充分使用sail model
SAIL模型的优点在于它可以与RISC-V ISA相同的方式进行扩展。然后对core执行formal验证,以创建一组SystemVerilog断言,然后将其用于对RTL进行formal验证。通过比较RTL的断言进行formal验证的工具是专有工具,并且用于执行此操作的技术将是每个供应商专有的。
该语言将持续关注。
很明显,单单的compliance测试是远远不够的,compliance测试只是在验证指令执行的正确性,但是CPU中的debug功能,interrupt功能,异常检测等却没有验证。
此时应该做的是:
该解决方案的核心是使用OneSpin的断言设置方法将risc-v指令集形式化位一种systemverilog断言,该方法可以产生一种高性能、非重叠的断言,从而以一种纯粹优雅的方式来捕捉端到端的转换和需求,具体是:
Benchmark测试——fio_KGback的博客-CSDN博客
Benchmark测试——IOzone_iozone测试结果分析_KGback的博客-CSDN博客
Benchmark测试——Unixbench 2D测试和x11perf_KGback的博客-CSDN博客
网卡netperf测试:https://www.cnblogs.com/xieshengsen/p/6493277.html
https://www.cnblogs.com/davidesun/p/12726006.html
常见CPU benchmark的测试报告:实测一些CPU得到的原始测试报告