RISC-V MCU中文社区

【分享】 在Ubuntu 虚拟机中使用verilator对蜂鸟E203内核进行仿真

发表于 开源蜂鸟E203 2023-04-11 15:24:53
1
1228
0

队伍编号:CICC3327

在Ubuntu 虚拟机中使用verilator对蜂鸟E203内核进行仿真
蜂鸟E203是一款基于RISC-V架构的嵌入式处理器核,在开发中需要进行仿真操作来验证其功能性。本教程将介绍如何利用Verilator软件实现对蜂鸟E203内核的仿真操作。
1.安装Verilator。可以在Ubuntu虚拟机中使用以下命令进行安装:
sudo apt-get install verilator
2.下载蜂鸟E203处理器的跑分测试文件夹。
从蜂鸟E203官方github仓库获取跑分测试文件夹,具体方法为:
git clone https://github.com/Nuclei-Software/riscv-tests.git
3.编译测试程序。
进入riscv-tests的工程目录,执行以下命令进行编译:
cd riscv-tests
make clean
make RISCV_PREFIX=riscv32-unknown-elf-
4.编写第三方仿真模块代码,并将其集成到测试文件中。
在riscv-tests的工程目录下,创建一个名为”verilator”的文件夹,并在其中创建一个名为”verilator_tb.cpp”的文件。
编写”verilator_tb.cpp”代码如下:

#include 
#include 

#include "Vcore.h"

Vcore* dut;
VerilatedVcdC* trace;

int main(int argc, char** argv) {
Verilated::commandArgs(argc, argv);

dut = new Vcore;
trace = new VerilatedVcdC;

dut->trace(trace, 99);
trace->open("core.vcd");

dut->reset = 1;

while (!Verilated::gotFinish()) {
dut->clk = 0;
dut->eval();
trace->dump(dut->tick);

dut->clk = 1;
dut->eval();
trace->dump(dut->tick);

dut->tick++;
}

dut->final();
trace->close();
delete dut;
delete trace;

return 0;
}

上面的代码定义了一个名为”dut”的指针,指向蜂鸟E203内核的Verilog描述文件生成的仿真模块。它还定义了一个名为”trace”的变量,用于生成波形文件。最后,它启动了仿真器,执行了一个简单的时钟驱动循环,并在每次时钟上升沿时对仿真器进行更新和波形文件写入。
5.编写Makefile并进行仿真测试。
在”verilator”文件夹中创建一个名为”Makefile”的文件,编写以下代码:

verilator_sim: verilator_tb.cpp
    verilator --cc core.v --exe verilator_tb.cpp
    make -C obj_dir/ -f Vcore.mk
    ./obj_dir/Vcore

clean:
    rm -rf obj_dir/ core.vcd verilator/verilator_tb

上面的Makefile文件通过verilator将核心模块进行C++化,然后编译链接生成可执行文件并进行仿真测试。

6.执行以下命令进行测试:
make -C riscv-tests/ verilator_sim RISCV_PREFIX=riscv32-unknown-elf-
如果一切顺利,输出的结果将显示仿真的时钟周期、模块状态和仿真结束的消息。

喜欢0
用户评论 (1)

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板