根据《手把手叫你设计CPU-RISC-V处理器》17章详细介绍
或者RISCV/e200_opensource的doc中文档也有介绍)一步一步完成E203的EDA仿真:
********本篇只讨论C语言工程的编译、仿真过程,不涉及FPGA原型验证。
准备工作(这个可以参考书籍上册或者我优快云主页上也有教程):搭建ubuntu16.4虚拟机环境,用github 命令 git clone ttps://github.com/SI-RISCV/e200_opensource 到本地目录,
也可以直接下载压缩包,然后拉到虚拟机里面。
学习一下基本的makefile规则,自己可以找资料看一下,这里就不做过多介绍。
1、按照书中流程,或者e200_opensource doc中的文档,搭建编译环境,文档中有详细描述,按照描述一步一步做没问题,不要跳过步骤。
2、搭建EDA硬件仿真环境,需要RTL代码、仿真工具、波形查看工具
我选用的是VCS+Verdi,还可以用iverilog+verdi、或者vsim,看个人习惯。
测试激励选用tb.v或者字节重新例化e203_soc_top顶层模块,生成时钟、复位。
********下面的流程纯属于个人理解,若有不当之处请指出,本人还在继续理解中,欢迎一起学习、指导********
********接下来需要看懂三个基本的makefile文件,想暂时不看懂,照着3、4、5、6跑跑仿真也行。
A、risc-v-tools/risc-v-test/isa/makefile ***测试汇编指令的编译脚本,可以自己添加汇编文件
B、sirv-e-sdk/makefile ***测试C语言的编译脚本,亲测后发现不能用需要修改见下面说明
C、vsim/makefile ***EDA仿真的脚本,建议按照自己的习惯写一个
3、修改sirv-e-sdk/env/common.mk 将start.S 文件换成 risc-v-tools/risc-v-test/env/v/link.ld 连同路径一并替换
4、修改sirv-e-sdk/env/common.mk 将link.lds 文件换成 risc-v-tools/risc-v-test/debug/program/start.S 连同路径一并替换
5、用/e200_opensource_2/riscv-tools/fpga_test4sim/demo_gpio4sim/demogpio.c替换sirv-e-sdk/software/demo_gpio/demo_gpio.c
修改一些宏定义,不然编译出错,也可根据编译的错误来修改,建议根据错误修改。就是先运行后面的步骤6,然后根据步骤6的报错来修改。
在主函数里面添加一个while(1){写GPIO反转的代码},详细请看demo_gpio.c文件。
6、在sirv-e-sdk路径下运行 make software PROGRAM=demo_gpio BOARD=sirv-e203-arty 编译出来demo_gpio目标文件,
报错就修改demo_gpio.c源文件,里面有一些宏没有定义。我以后整理这些宏定义。
7、用/e200_opensource_2/riscv-tools/prebuilt_tools/prefix/bin/riscv-none-embed-objcopy -O verilog demo_gpio demo_gpio.verilog
将demo_gpio 转成 demo_gpio.erilog(二进制机器码,用于烧录到ITCM中运行),并将demo_gpio.verilog文件中的@8000xxxx都改成@0000xxxx,
可以用名命令实现,或者用编辑器实现。
可以用/e200_opensource_2/riscv-tools/prebuilt_tools/prefix/bin/riscv-none-embed-objdump -d 查看反汇编。
8、打开测试激励文件tb.v
将demo_gpio.verilog文件放到ITCM中,次操作在激励中有详细代码,使用的是verilog系统函数$readmemh()将代码放到内部itcm_mem,
然后通过一个for循环将itcm_mem加载到内部ITCM中。根据仿真器的需要自己选择保存波性文件。
9、运行EDA仿真 make run_all TESTCASE = demo_gpio
10、打开波形工具看波形 GPIO19 20 21
11、可以自己修改demo_gpio.c实现更过别的测试
********结束
12、这里本人只是测试C语言的ubutu编译环境和EDA的仿真环境,并为验证流程是否科学、严谨。
13、我认为还可以通过将代码直接放到内部QSPI FLASH中,然后BOOT选用QSPI直接运行,但是我编译出来的代码却在执行完第一个16bit指令机器码后跑飞,大家有兴趣的可以继续摸索。