- 博客(819)
- 资源 (4)
- 收藏
- 关注
原创 core-v-verif系列之cv32e40p UVM环境介绍<7>
/表明类继承自,并会对函数进行重写,用于定制 CV32E40P 处理器的特权模式序列。该函数用于设置机器模式(M-Mode)的寄存器,避免在mret调用前设置MIE以防止无限循环。该文件定义了一个用于 CV32E40P 处理器特权模式的 UVM 序列类,通过重写函数,对机器模式寄存器的设置进行了定制,以避免mret调用前的无限循环问题。该类在 UVM 验证环境中可用于生成和控制与特权模式相关的测试序列。定义了类,它继承自,意味着它将拥有的所有特性,并可以在此基础上进行扩展。
2025-04-07 12:45:40
617
原创 core-v-verif系列之cv32e40p UVM环境介绍<6>
类继承继承自,表明它是一个特定的虚拟序列类。局部参数NUM_WORDS被定义为1,该参数用于指定与该序列相关的操作涉及的字数。成员变量是一个类型的对象,用于存储与 CV32E40P 相关的上下文信息。UVM 对象注册:使用和宏将该类注册到 UVM 工厂,方便在 UVM 环境中创建和管理该类的对象。该文件定义的类实现了一个虚拟序列,用于在虚拟外设中返回一个随机数。在vp_body。
2025-04-07 00:30:00
739
原创 core-v-verif系列之cv32e40p UVM环境介绍<5>
定义了一个名为的类,它继承自,表明这是一个基于 CV32E40P 基础虚拟序列的派生类。该文件定义了一个 UVM 虚拟序列类,用于产生随机的调试启动设置激励。通过body任务,在调试序列器上启动一个调试请求序列项,并约束其激活周期为 1 个时钟周期,以验证 CV32E40P 处理器在调试模式下的启动行为。此序列可作为更大验证环境的一部分,用于全面测试处理器的调试功能。
2025-04-06 00:30:00
1229
原创 core-v-verif系列之cv32e40p UVM环境介绍<4>
**/类继承自,意味着它是 UVM 环境中的一个组件。cntxt是类型的成员变量,用于存储上下文信息。宏将该类注册到 UVM 工厂,方便在 UVM 环境中创建和管理该类的实例。文件中定义了多个覆盖率组(covergroup),用于收集不同场景下的调试覆盖率信息。文件实现了一个用于调试覆盖率收集的 UVM 组件。通过定义多个覆盖率组,对不同的调试场景进行覆盖率收集。在运行阶段,通过并行任务对时钟信号和调试请求信号进行采样,并触发覆盖率组的采样操作,从而实现调试覆盖率的收集。
2025-04-06 00:15:00
633
原创 core-v-verif系列之cv32e40p UVM环境介绍<3>
定义了一个名为的类,它继承自,表明这是一个 UVM 计分板组件。文件定义了一个 UVM 计分板组件,它负责管理和配置子计分板。目前文件中部分功能还未实现,需要根据具体需求完成assign_cfg和create_sbs函数,以实现子计分板的创建和配置。通过这个计分板,可以在验证环境中对 CV32E40P 设计的输出进行比较和验证。是一个 SystemVerilog 文件,主要用于定义与 CV32E40P 处理器验证环境相关的类型。
2025-04-05 00:15:00
751
原创 core-v-verif系列之cv32e40p UVM环境介绍<2>
定义了一个继承自uvm_env的类,它是整个测试环境的顶级组件。该文件定义了一个完整的 UVM 测试环境类,通过和run_phase等函数和任务完成环境的构建、连接和运行,同时包含了覆盖率模型、预测器、计分板等组件,以及多个代理和虚拟序列器,用于对 CV32E40P 处理器进行验证。定义了一个名为的包,该包将封装所有与 CV32E40P 验证环境相关的类型和组件。文件通过定义一个包,将所有与 CV32E40P 验证环境相关的类型、组件和序列封装在一起。
2025-04-05 00:00:00
899
原创 core-v-verif系列之cva6 ariane_tb.sv
包导入:导入了ariane_pkg和uvm_pkg包,分别用于 Ariane 处理器相关定义和通用验证方法学(UVM)相关功能。宏定义MAIN_MEM和USER_MEM宏用于访问 DUT 中不同内存区域的初始化值。定义了READ_ELF_T相关的 DPI-C 函数,用于读取 ELF 文件并获取其节信息。定义了ariane_tb配置参数:定义了CVA6Cfg参数,用于配置 CVA6 处理器。bit FpgaEn;bit RVF;bit RVD;
2025-04-04 00:30:00
1344
原创 core-v-verif系列之cva6 verilator Model之ariane_tb.cpp 函数read_elf
代码链接文件:fesvr_dpi.cc这段代码定义了一个外部可调用的 C 风格函数 ,其主要功能是读取 ELF(Executable and Linkable Format)文件,并对相关的全局变量进行初始化,同时加载 ELF 文件中的符号信息。:表示该函数使用 C 语言的调用约定,这样可以避免 C++ 的名称修饰,使得该函数可以在 C 语言代码中被调用。:函数返回值类型为 ,即不返回任何值。:函数名,用于读取 ELF 文件。:函数的参数,指向要读取的 ELF 文件的文件名。函数体1.
2025-04-04 00:15:00
853
原创 RISC-V ISA Simulator系列之fesvr<6>
目录FESVR 概述FESVR 代码结构分析ELF 加载机制在RISC-V ISA Simulator系列之fesvr<1-5>中我们已经完成了内容的,下面我们继续完成下列内容。 的代码主要位于 目录,主要文件及作用如下: 目录下的源码文件清单,涉及 ELF 加载、设备仿真、HTIF 交互、系统调用 等多个模块。下面是各文件的简要介绍: 文件定义了一个抽象的调试传输模块(Debug Transport Module, DTM)类 ,该类继承自 ,用于处理与调试相关的通信和操作。使用预处理
2025-04-03 00:15:00
769
原创 RISC-V ISA Simulator系列之fesvr<4>
该代码实现了一个基于 VNC 协议的 RFB 服务器,用于远程访问 RISC-V 处理器的图形帧缓冲区 (memif创建 TCP 服务器并监听端口。初始化 RFB 连接并管理像素数据。周期性读取帧缓冲区并发送给 VNC 客户端。下一篇:RISC-V ISA Simulator系列之fesvr<5>
2025-04-02 00:30:00
865
原创 RISC-V ISA Simulator系列之fesvr<5>
目录FESVR 概述FESVR 代码结构分析ELF 加载机制在RISC-V ISA Simulator系列之fesvr<1-4>中我们已经完成了内容的,下面我们继续完成下列内容。 的代码主要位于 目录,主要文件及作用如下: 目录下的源码文件清单,涉及 ELF 加载、设备仿真、HTIF 交互、系统调用 等多个模块。下面是各文件的简要介绍: 是一个抽象基类,定义了对内存块进行操作的接口。它的成员函数包括:这些虚函数提供了操作内存的通用接口,而具体的实现由派生类提供。 是一个更高级的内存接口类
2025-04-02 00:15:00
968
原创 RISC-V ISA Simulator系列之fesvr<8>
=5000000->->m_storage->->m_storage#else->->这是一个条件编译块,根据 Verilator 的版本(通过宏判断)来定义不同的内存访问宏MEM和MEM_USER。Verilator 是一个用于 Verilog 硬件描述语言的仿真工具,不同版本可能对内部结构的访问方式有所不同。这里定义的宏用于方便后续对特定内存区域的访问。->->这行代码使用了C++的预处理器指令#define来定义一个宏MEM。宏的作用是将MEM替换为。top。
2025-03-31 14:22:18
726
原创 core-v-verif系列之cva6 verilator Model之Variane_testharness.sv相关模块sram
(endendendendend该sram模块实现了一个可配置的同步 SRAM(静态随机存取存储器),适用于 FPGA 或 ASIC 设计。该模块封装了一层SRAM 访问逻辑,并对输入/输出数据进行64 位对齐,以便推断出可综合(synthesizable)的存储器结构。1. 模块参数parameter DATA_WIDTH = 64, // 数据宽度,默认 64 位。
2025-03-31 00:30:00
1084
原创 RISC-V ISA Simulator系列之fesvr<1>
代码链接(Front-End Server)是 (Spike 模拟器)中的一个核心组件,它负责 模拟器与外部环境之间的交互。主要功能包括:在 RISC-V 仿真环境中, 扮演 仿真程序的桥梁,确保 Spike 能够正确模拟 RISC-V 目标程序的执行。 的代码主要位于 目录,主要文件及作用如下: 目录下的源码文件清单,涉及 ELF 加载、设备仿真、HTIF 交互、系统调用 等多个模块。下面是各文件的简要介绍:上述代码定义了一系列用于处理 ELF(Executable and Linkable Form
2025-03-31 00:15:00
1266
原创 core-v-verif系列之cva6 verilator Model之tc_sram.sv
tc_sram模块模拟了一个可配置的 SRAM 设备,具备多个读写端口,可通过参数化配置其存储容量、数据宽度、字节宽度、端口数量、读取延迟等特性。该模块还支持不同的仿真初始化模式,能在仿真开始时输出配置信息,并对参数和地址访问进行验证。NumWords:SRAM 中的字数,地址宽度可根据该参数计算得出。DataWidth:读写数据端口的宽度。ByteWidth:字节的宽度,用于计算字节使能信号的宽度。NumPorts:读写端口的数量,每个端口都是完整的读写端口。Latency。
2025-03-30 00:30:00
658
原创 core-v-verif系列之cva6 dpi函数read_elf
zeros:用于存储零填充的数据。symbols:用于存储符号表信息,键为符号名,值为符号的地址。LOAD_ELFdowhile0该宏用于解析 ELF 文件的程序头和节表信息,根据传入的 ELF 头、程序头、节表和符号表类型进行处理。read_elf函数通过内存映射的方式读取 ELF 文件,并解析其程序头、节表和符号表信息,将有用的信息存储到全局变量中。使用宏LOAD_ELF可以处理 32 位和 64 位的 ELF 文件。
2025-03-30 00:15:00
596
原创 RISC_V GPU skybox 系列之rtlsim运行测试(1)
定义了测试文件所在的目录,该目录依赖于环境变量。wildcard函数用于匹配指定目录下的所有符合模式的文件。filter-out函数用于从匹配的文件列表中排除指定的文件。这些变量分别定义了 32 位和 64 位不同 RISC-V 扩展的测试文件列表。all这段代码定义了一个名为的make目标,其主要功能是对 32 位的 RISC-V 指令集测试用例(涵盖IMF扩展)执行 RTL(寄存器传输级)仿真。这里定义了一个make目标。当在命令行中执行时,make工具会执行该目标下的命令。
2025-03-28 00:45:00
861
原创 RISC_V GPU skybox 系列之rtlsim运行测试(2)
此构造函数接收一个参数,用于配置 DRAM 内存系统的时钟比率。通过YAML::Node对象构建配置信息,然后使用创建前端和内存系统实例,并将它们相互连接。该构造函数的主要目的是初始化仿真环境,包括随机信号生成、断言控制、RTL 模块实例化、VCD 跟踪设置、设备配置信息输出和设备重置。通过这些步骤,确保仿真环境的正确性和可重复性。
2025-03-28 00:30:00
1725
原创 RISC_V GPU skybox 系列之rtlsim编译(1)
目标,这里DESTDIR默认为当前目录(CURDIR),PROJECT被定义为rtlsim,所以最终目标是在指定目录下生成rtlsim可执行文件。依赖项$(SRCS):包含多个源文件,如等,这些源文件路径通过之前的变量定义确定。:主源文件,路径由SRC_DIR变量和文件名main.cpp组成,SRC_DIR被定义为。命令使用verilator工具进行构建。--build选项表示进行构建操作。:包含一系列 Verilator 的编译选项,如语言标准、警告选项、跟踪选项等。
2025-03-27 00:45:00
658
原创 RISC_V GPU skybox 系列之rtlsim: mem.h/cpp
文件里的类通过继承和调用关系构建了一个完整的内存管理系统。MemDevice作为抽象基类,定义了内存设备的基本接口;和RAM作为具体的内存设备实现了这些接口;MemoryUnit类负责内存的管理和映射,ADecoder类用于地址解码和内存设备查找;ACLManager类用于管理访问控制列表。各个类相互协作,共同完成内存的读写、映射和访问控制等功能。
2025-03-27 00:30:00
926
原创 RISC_V GPU skybox 系列之rtlsim 主程序相关
rtlsim文件夹下的代码主要实现了一个仿真程序,该程序能够加载二进制或十六进制格式的程序文件,然后模拟处理器执行该程序,并最终从特定地址读取退出码。这段 C++ 代码是一个模拟处理器运行程序的主程序,主要功能是解析命令行参数,创建内存模块和处理器实例,将内存模块与处理器关联,设置处理器的一些基本控制寄存器(DCR),加载指定的程序文件(支持.bin和.hex格式),然后运行模拟并从特定内存地址读取程序的退出码。4096定义了内存页的大小为 4096 字节。
2025-03-27 00:15:00
763
原创 core-v-verif系列之cva6 verilator Model之ariane和sram-rvfi_tracer
将结构体中的信号赋值给slave[0]接口。:将slave[0]接口中的信号赋值给结构体。这些宏的作用是简化 AXI 总线信号在模块之间的连接,确保请求和响应信号正确传递。根据下图所示,ariane通过slave[0] -> axi_bar这个序列来发送请求和接受反馈,从而来访问sramariane通过rvfi来写rvfi_tracer) (endend) i_xbar (.clk_i,.rst_ni,.test_i,endmodule。
2025-03-26 00:45:00
983
原创 core-v-verif系列之cva6 verilator Model之Variane_testharness.sv相关模块
这段代码实例化了一个模块,用于处理 RISC-V 原子操作的 AXI 总线接口。通过参数化配置和信号连接,该模块能够灵活地集成到系统中,并确保 RISC-V 原子操作的正确性和独占性。这段代码定义了一个 AXI_BUS 接口实例,通过参数化配置使其能够适应不同的系统需求。它是系统中主设备和从设备之间通信的关键组件,遵循 AMBA AXI 协议标准。这段代码实例化了一个模块,用于在 AXI 总线接口中引入延迟。
2025-03-26 00:30:00
753
原创 core-v-verif系列之cva6 verilator Model编译命令详解
变量定义了一个非常复杂的 Verilator 命令,用于仿真和编译 RISC-V CPU 项目。
2025-03-25 00:45:00
854
原创 core-v-verif系列之cva6 cva6.py (7)
")函数用于检查当前使用的 Verilator 版本是否满足要求。函数通过获取 Verilator 模拟器的版本信息,并检查其是否满足所需的版本要求。如果不满足要求,函数将调用函数退出程序并提示错误信息。Args:Returns:"""else:else:函数通过处理回归测试列表,递归处理导入的子列表,并根据给定的测试名称和迭代次数获取匹配的测试。匹配的测试将被记录并添加到中。try:main函数是程序的主要入口点。使用global关键字声明全局变量。获取当前工作目录cwd。
2025-03-24 01:00:00
660
原创 core-v-verif系列之cva6 cva6.py执行示例(1)
执行输出日志执行python3 cva6.py调用顺序以下是执行该脚本时的主要函数调用顺序::(如果指定了 、 或 参数): (如果没有指定定向测试且未设置 参数):(如果 参数包含 或 ):(如果 参数包含 或 ):(如果 参数包含 或 ):(如果 参数包含 或 )::主要函数调用顺序从 函数开始,根据输入参数和配置文件逐步调用其他函数以完成编译、仿真和结果比较等任务。下面我们将从 函数开始,逐步分析在指定输入参数情况下 脚本中各个函数的调用顺序。main 函数当你
2025-03-24 00:45:00
1866
原创 core-v-verif系列之cva6 verilator Model之elfloader.cc
DPI(Direct Programming Interface,直接编程接口)是。
2025-03-24 00:30:00
940
原创 RISC_V GPU skybox 系列之rtlsim编译(2)
在在 skybox 系列之rtlsim编译时–exe 和–cc $(TOP)包含了两个步骤,第一步 将rtl code 编译成C++代码,通过–cc Vortex --top-module Vortex来完成第二步 将src + 编译完成的rtl 对应的c++代码编译成可执行的exe程序,通过参数–exe来完成本文章我们来分别说明第一个部分的内容。
2025-03-24 00:30:00
540
原创 core-v-verif系列之cva6 cva6.py (3)
Args:"""函数用于使用 RISC-V GCC 工具链编译汇编程序。参数:test_list: 要编译的汇编程序列表。output_dir: ELF 文件的输出目录。isa: 传递给 GCC 的 ISA 变体。mabi: 传递给 GCC 的 ABI 变体。debug_cmd: 生成调试命令日志而不运行。linker: 链接器的路径。函数通过调用 RISC-V GCC 工具链,将汇编程序编译为 ELF 文件,并转换为二进制文件。函数构建编译命令并执行,以生成指定的输出文件。
2025-03-23 03:00:00
742
原创 core-v-verif系列之cva6 cva6.py (4)
Args:"""try:函数用于分析 Tandem 报告中的信息。参数:yaml_path: YAML 报告文件的路径。函数通过解析 YAML 报告文件,提取并记录 TANDEM 模拟的结果信息。如果报告文件不完整,函数会记录相关错误信息。Args:"""try:Args:error } ")Args:error } ")Args:error } ")\n")Args:error } ")Args:error } ")函数用于将 UVM 种子记录到文件中。
2025-03-23 01:00:00
882
原创 core-v-verif系列之cv32e40p UVM环境介绍<1>
定义了防止重复包含的宏。定义了一个类,扩展自uvm_object。这是一个UVM(Universal Verification Methodology)对象,提供了验证环境的配置参数。...使用UVM宏定义了类的字段,用于自动生成一些UVM方法。这些宏使得UVM能够识别和处理这些字段。这个文件主要定义了一个用于CV32E40P验证环境的配置类。通过随机化的成员变量和约束条件,可以灵活地控制验证环境的行为。UVM宏和方法使得该配置类能够轻松集成到更大的验证环境中。定义了防止重复包含的宏。定义了一个。
2025-03-22 03:30:00
1478
原创 core-v-verif系列之cva6 cva6.py (2)
"""函数用于运行 CSR 测试。参数:cmd_list: 命令列表。cwd: 当前工作目录。csr_file: CSR 文件的路径。isa: 指令集架构(ISA)。iterations: 迭代次数。lsf_cmd: 用于运行指令生成器的 LSF 命令。: 结束签名地址。timeout_s: 超时时间(秒)。output_dir: 输出目录。debug_cmd: 生成调试命令日志而不运行。函数通过构建并运行一个命令来生成定向的 CSR 测试代码。
2025-03-22 03:00:00
917
machine-learning-yearning
2018-09-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人