开源RISC-V 项目Freedom在Arty-7-100T开发板上的实现
1、获取Freedom项目源码
Freedom项目开源的地址为https://github.com/sifive/freedom
可以使用以下命令来clone该项目
git clone --recursive https://github.com/sifive/freedom.git
其中–recursive选项是将该项目递归克隆下来。
注意:1、务必使用上述命令一次性clone,切记不可单独clone其子模块,否则可能会因为版本问题出现错误。
2、Freedom的子模块包括了riscv-gnu-toolchain项目,里面的qemu有一部分代码挂在google上面,所以需要一些科学上网方法
2、安装编译Freedom项目的环境
本人所用的虚拟机版本是ubuntu16.04
1. 提前安装各种依赖
sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev libusb-1.0-0-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev device-tree-compiler pkg-config libexpat-dev python wget
sudo apt-get install default-jre
2、安装sbt
echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 642AC823
sudo apt-get update
sudo apt-get install sbt
因为Freedom使用的内核时Rocket chip,Rocket是使用chisel语言实现的,chisel又是内嵌与scala的,而scala是基于sbt构建的,所以说我们需要安装sbt。
3、安装scala
sudo apt install scala
安装好上述环境以后我们可以测试以下我们是否安装成功了。
我们可以在Freedom文件夹下输入sbt命令,可以从下图看出sbt成功启动了,说明我们的sbt安装成功了。
注意:这一步非常重要,务必测试成功,第一次启动可能有些慢,需要从外网下一些包,耐心等待即可。
4、安装RISC-V工具链
这里安装RISC-V工具链的方式有两种:
- 源码安装
https://github.com/riscv/riscv-gnu-toolchain
按照该页面指示安装就可以了 - 从sifive官网下载编译好的工具链
https://www.sifive.com/software
其中GNU Embedded Toolchain和OpenOCD都要下载。后面需要用到
接下来需要配置环境变量:
export RISCV=your toolchain path
例如我的环境变量的配置:
export RISCV=/opt/riscv-newlib-multilib/
这里注意只需要配置到工具链的根目录就可以了,不需要配置到bin目录
在编译生成verilog时,我们只需要配置我们的编译工具链的环境变量就可以了,主要是用于编译verilog的过程中启动代码ROM的编译。
3、编译生成Freedom verilog
在我们clone下来的Freedom文件夹下,我们看到有很多Makefile,如下图所示:
这个Freedom项目其实是可以生成两种SoC的:
- E300
- U500
以及支持四种FPGA平台:
- Arty-35T
- Arty-100T
- VC707
- VC118
我们此次实验用的生成的E300平台并且跑在Arty-100T FPGA平台上的。
1、先编译生成verilog
make -f Makefile.e300artydevkit verilog
注意:Makefile.e300artydevkit默认指定的Board是Arty(也就是35T),我们需要将它改成100T
2、查看生成的verilog
默认生成的verilog目录为 /freedom/builds/e300artydevkit/
4、用vivado生成flash配置文件mcs
本来是准备在ubuntu环境下跑vivado,但是试了几次后发现内存会溢出,所以不得已将生成的verilog文件转移到windows环境下运行。
Freedom项目提供了完整的运行vivado所需的脚本,
我们只需运行如下命令即可:
make -f Makefile.e300artydevkit mcs
最终生成的mcs文件在**builds/obj/**目录下:
最后我们将该mcs文件烧录至我们FPGA的flash上:
5、在E300 SoC上运行程序
首先,我们需要连接调试器,可以参考:
https://sifive.cdn.prismic.io/sifive%2Fed96de35-065f-474c-a432-9f6a364af9c8_sifive-e310-arty-gettingstarted-v1.0.6.pdf
进行调试器的组装。
1、下载软件框架freedom-e-sdk
git clone --recursive https://github.com/sifive/freedom-e-sdk.git
2、配置软件编译和调试环境变量
然后需要配置工具链的环境变量:
export RISCV_PATH=your toolchain path
export RISCV_OPENOCD_PATH=your toolchain path
3、编译、调试、下载程序
在此我们拿hello程序举例:
- 编译hello程序
make PROGRAM=hello TARGET=freedom-e310-arty software
编译成功生成hello.elf和hello.hex
- debug hello程序
make PROGRAM=hello TARGET=freedom-e310-arty debug
可以看到成功打开gdb调试窗口
输入gdb调试命令
成功加载hello程序
运行hello程序
串口成功打印hello world