本文记录的相关源工程和文件为:
core-v RISCV核功能验证工程:https://github.com/openhwgroup/core-v-verif
core-v 验证策略:https://core-v-docs-verif-strat.readthedocs.io/en/latest/#
core-v系列核cva6工程:https://github.com/openhwgroup/cva6
core-v系列核cv32e40p工程:https://github.com/openhwgroup/cv32e40p
LowRISCV Ibex核工程:https://github.com/lowRISC/ibex
core-v RISCV核相关说明文档:https://github.com/openhwgroup/core-v-docs
RISCV ISA指令流(instruction stream)生成器:https://github.com/openhwgroup/force-riscv
core-v系列指令流(instruction stream)生成器:https://github.com/openhwgroup/core-v-isg
sail语言介绍:https://www.cl.cam.ac.uk/~pes20/sail/
REMS的sail RISCV开源项目:https://github.com/rems-project/sail-riscv

openHW全称为open-source hardware,是一个支持开源软件和硬件的非盈利组织。该组织开源的内容包括开源CPU核、相关IP、工具和软件等。下文中部分图片取自OPENHW。

1. cv32e40p

CV32E40P(原先PULP开发的RI5CY)是一个32bit的4级流水线核,支持整数运算指令、乘法除法指令、单浮点运算指令、压缩指令以及DSP扩展指令(包括硬件循环、SIMD扩展、位操作和增量指令)

该核的验证环境有两套,一套是原来基础上改进的的testbench;一套是UVM环境搭建的testbench,该环境下testcase的产生是可以基于UVM环境的(这种方式类似于Ibex核验证环境)。两套环境均由systemverilog编写。均包含了指令集验证、中断验证、CSR寄存器验证、异常验证、debug验证等。

1 目录概况

cv32e40p的验证环境在cv32文件夹中,该文件夹下又分为bsp,env,regress,sim,tb,tests六个文件夹。

  • bsp

板级支持包,包含crt,syscall等初始化文件、链接脚本、一些简单的定向test

  • env

包含uvm验证环境所需的一些环境文件,比如定义了一些类的文件,包含了一些宏的文件,以及一些参数的定义

  • regress

包含了用yaml编写的配置文件,包含了工程makefile中用到的命令,以及每个testcase的配置信息

  • sim

包含了两个验证环境的makefile脚本文件,分别为core文件夹和uvmt_cv32文件夹,同时还包含tools(仿真工具文件夹)、mcy和common.mk文件

  1. common.mk
    该文件包含了两个验证环境的通用变量,通用操作(比如git clone、riscv-toolchain对执行对象的编译和反汇编等)
  2. uvmt_cv32/Makefile
    该文件是所有makefile的根文件,一切命令都需要在该文件的绝对下执行
  3. uvmt_cv32/xrun.mk
    C家的xcelium运行脚本文件
  • tb

包含了两个验证环境的testbench文件

  • tests

包含了testcase源文件

  1. 自定义的测试程序
    命令:make test TEST=...
  2. corev-dv指令压力测试
    类似于google的riscv-dv
    命令:make corev-dv 
               make gen_corev-dv test TEST=...
  3. 指令兼容性测试
    包括riscv-tests、riscv-compilance和cv32扩展指令的定向测试文件
    make compliance RISCV_ISA=<ISA> COMPLIANCE_PROG=...

2 验证环境

(一) core testbench

该工程是PULP遗留下的产物,OpenHW做了一定修改并持续维护。验证环境中已集成了指令集模拟器。

该工程的测试集激励包含指令兼容性测试(偏定向测试,如riscv-tests和riscv-compilance-tests)和随机约束(google riscv-dv),和其他的一些fireware测试用例。

测试环境结构如下:

该testbench简单,运行较快,通过verilator运行,但是有额外的开销且不能获取覆盖率。

(二) UVM 验证环境(uvmt_cv32)

cv32核的UVM验证环境已搭建完成,在DSIM(Metrics)运行也很稳定。验证环境中可以集成了指令集模拟器参考模型,整个环境功能齐全且可复用性较高,可以经过简单修改应用到其他CPU上

uvm验证环境的testcase均是由uvm相关类生成,同时该环境还集成了riscv-dv,但具体的激励生成还需要再分析。

  • 脚本中相关变量

(1)进行仿真命令的变量
         即 make test 等

  1. GUI
    GUI=1允许打开图形界面进行调试

  2. ADV_DEBUG
    ADV_DEBUG=YES允许EDA公司先进的调试工具运行,例如cadence,即运行indago而非simvision

  3. USER_RUN_FLAGS
    与UVM_MAX_QUIT_COUNT搭配,表示中止test允许的error数量

  4. WAVES
    WAVES=YES即sim的同时就产生波形

  5. COV
    COV=1,即进行覆盖率分析

(2)仿真后的命令

  1. make cov TEST=...
    进行某项测试的覆盖率分析并打印报告。
  2. 变量MERGE
    将所有测试的覆盖率分析融合到一个report中
  • 验证环境架构

(1)验证环境概况

该testbench有两种工作模式,一种是只有DUT的情况,测试激励为自检测测试,测试是否成功会设置一个寄存器中的某位,testbench会在测试结束后读取该位的值,从而确定测试是或否成功;第二种是step compare,比较DUT和ISS的输出trace。
对于第二种工作模式,ISS是可以通过设置脚本命令变量(ISS)选择是否参与仿真。如果命令中设置了ISS=1,则会通过uvmt_cv32_step_compare模块进行trace的比较

验证环境的顶层文件是uvmt_cv32_tb.sv,DUT的顶层文件是uvmt_cv32_dut_wrap.sv,参考模型的顶层文件是uvmt_cv32_iss_wrap.sv。

  1. DUT
    DUT的顶层文件中又包含cv32e40p_wrapper和指令/数据存储器,其中cv32e40p_wrapper包含core的顶层文件和其他一些可选APU、exception的tracer模块。
    tracer模块保存已执行指令的CPU的寄存器值,保存对应状态位,同时该模块会提供pc值和GPR值给step_compare模块
  2. reference module
    参考模型也是有systemverilog编写,而不是现成的可执行文件。其顶层文件中包含core的参考模型CPU.sv、RAM(模拟指令/数据存储器)和自定义的总线BUS。
  3. step_compare
    单步比较模块存在的前提是参考模型加入(即ISS=1),用于验证DUT和参考模型的运行结果
    当指令执行完成会和DUT和参考模型的Tracer模块进行握手
  4. assertion
    TB中的assertion包括interrupt相关、debug相关、指令数据OBI接口相关
  5. coverage组件
    包括core、interrupt、debug等的coverage module和covergroup。coverage module在对应agent种,covergroup在env中

    uvme_rv32isa_covg模块用于统计ISA的功能覆盖率,从而确保每条指令运行都能覆盖到所有的源寄存器和目的寄存器,计算指令的混合度

(2)UVM内部组件关系

上图为UVM testbench中的DUT部分,即uvmt_cv32_dut_wrap模块,DUT有包含CV32的RTL代码和mm_ram。


        mm_ram包含了virtual peripheral(VP)和双端口的RAM(dp_ram,包含指令/数据存储器)。dp_ram模型有两个OBI接口,不同功能的虚拟外设用做CPU的定向测试的外设,包括中断产生,随机数,定时器等


        debug、interrupt、OBI、时钟/reset均通过UVM_agent组件产生,且通过uvm_sequence组件输入激励。

同时每种agent都包含对应的functional coverage module组件,方便了收集覆盖率

下图为UVM验证环境运行的流程

(3)uvmt_cv32中的测试激励

该环境包含自定义测试激励和随机测试激励。

自定义测试激励一般为定向测试的C代码和汇编代码。C代码可以通过man函数返回值确定该case的pass/fail

随机测试激励通过corev-dv自动生成汇编代码。

2. CVA6

CVA6(ariane)是一个6级流水线、单发射、顺序执行的RV32GC或RV64GC核,支持M/U/S三种模式,支持linux操作系统。

该核现存的验证环境尚未成熟,但同样可以构建UVM的验证环境。

该工程的指令集测试激励包括riscv官方测试套件(即riscv-tests)。

CPU系统级验证——验证环境——OpenHW core-v验证环境及文件分析相关推荐

  1. CPU系统级验证——测试激励——imperas公司riscvOVPsimPlus文件分析

    本分析重点关注该repo向量扩展部分. 1. repo简介 该repo是指令集验证的仿真环境包括,大部分是指令集的测试用例,也包含了一些模拟器,如riscvOVPsimPlus. 主要介绍的是risc ...

  2. CPU系统级验证——概览索引

    1. RISC-V CPU核指令集验证分析 1 wujian100 (1)SoC核分析 无剑100实际上是一款低功耗SoC,采用的CPU核是E902. core通过AHB总线与Icache相连 (2) ...

  3. [技术漫谈]400G时代来临,针对系统级的高速网络系统测试需要准备哪些环境

    关键词:误码率(Symbol Error Rate),误比特率(Bit Error Ratio),误帧率(Frame Error Ratio),底层链路质量评估,数据报文转发性能评估,业务流数据处理能 ...

  4. 软硬件协同设计的系统级开发环境~BPS软件介绍

    软硬件协同设计的系统级开发环境~BPS软件介绍 0 赞 发表于 2010/7/19 14:38:11 阅读(32881) 评论(0) 1)BPS简介: BEEcube Platform Studio( ...

  5. .nwt+core+2.0+mysql_Centos7 系统下搭建.NET Core2.0+Nginx+Supervisor+Mysql环境

    一.简介 一直以来,微软只对自家平台提供.NET支持,这样等于让这个"理论上"可以跨平台的框架在Linux和macOS上的支持只能由第三方项目提供(比如Mono .NET).直到微 ...

  6. 第一百五十二期:白话Entity Framework Core数据验证

    数据验证是每个项目必须存在的,可以防止不符合系统规范的数据进入系统进而导致系统不稳定甚至崩溃.我们可以自己编写代码进行验证,但是这样一方面代码量较大,另一方面有可能验证代码覆盖不完全.但是在 Enti ...

  7. jssdk信息验证失败_阿里云环境中TLS/SSL握手失败的场景分析

    TLS/SSL握手是一个相对复杂的过程,在阿里云环境中结合产品,安全等特性,可能会让TLS/SSL握手过程的不定性更多.本文来总结下各种握手失败的场景. 一次TLS/SSL握手的过程 本文不详细介绍T ...

  8. 无法从计算机验证正在安装驱动,intel CPU集显驱动失败,无法为此计算机验证正在安装的驱动程序...

    intel CPU集显驱动失败,无法为此计算机验证正在安装的驱动程序 2021-04-19 08:21:00 来源:转载 0 intel CPU集显驱动失败,无法为此计算机验证正在安装的驱动程序 用户 ...

  9. 验证docker容器相当轻量级Linux运行环境,每个容器内有属于自己的文件系统,容器之间相互隔离

    一.docker的三个重要概念 1.镜像:打包项目带上环境,即镜像 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的配置参数.镜像 ...

最新文章

  1. uboot中变量env(收集)
  2. python3导入_Python3导入相对还是绝对的正确方法?
  3. 钓鱼(信息学奥赛一本通-T1431)
  4. android 悬浮组件,Android 悬浮组件
  5. C++ 类的成员函数指针 ( function/bind )
  6. Cannot connect to the database. –Error connecting to database.
  7. [科技部与你共成长] 几道语言题
  8. 基于微信公众号的图书借阅平台设计与实现
  9. xmapp 终端数据库问题记录 已解决
  10. 分布式CAP是什么?
  11. strut-控制器ActionServlet类详解
  12. 对比阿里云服务器和腾讯云服务器的不同之处
  13. Python -- 大作业 — 使用turtle库画皮卡丘
  14. 电脑无法正常开机时如何解除BitLocker硬盘锁
  15. Spring/SpringBoot系列之Spring中涉及的9种设计模式【七】
  16. Linux C网络编程基础
  17. cc 和 bcc 的区别 邮件
  18. 企业邮箱如何申请?如何用手机号注册邮箱?
  19. vmware12中安装winxp
  20. ERR_SPDY_PROTOCOL_ERROR错误解决

热门文章

  1. python中判断生肖和星座哪个准_生肖与星座哪个更准确:星座和属相哪个更准一些?...
  2. 科里奥利力简单清晰的推导
  3. Excel PERCENTRANK() 计算逻辑
  4. 《追风筝的人》读后感
  5. Windows10登录用户密码忘记了怎么办
  6. socket网络编程(2):socket操作相关函数
  7. 写一首关于不想工作的7律诗,需要押韵
  8. 解决“无法停止‘通用卷’设备,请稍候再停止该设备问题
  9. 苏玲老师Git课程学习笔记
  10. ElasticSearch 2 (36) - 信息聚合系列之显著项