1.简述
之前分享过蜂鸟V1版本的移植教程,主要实现VCS仿真、移植到自己FPGA板卡上、最后使用芯来windows下IDE成功运行hello world;但是作为ICer,怎么不在Linux下开发,同时实现编译C语言进行仿真;后面芯来更新了V2版本,对比一下V1,发现V2环境更合理干净,所以这次直接上V2版本;
说明 :本文章参考芯来的说明教程,详情请看:蜂鸟v2 E203 核心和 SoC
先虚拟机联网,我的所有IC工程都放在"ic_projs"目录下,进入该目录下,使用以下命令取下V2的工程;
git clone https://gitee.com/riscv-mcu/e203_hbirdv2
直接进入到vsim目录下,这里体现V2版本的优势,不用修改仿真脚本,使用命令参数化选择仿真工具,使用以下命令进行vcs仿真;
make clean
make install
make compile SIM=vcs
make run_test SIM=vcs
这部分方法和V1的一致,修改FPGA型号、管脚约束、注释不用引脚相关的信号,其中需要注意的是32K时钟,由于我板子没有这个晶振,所以在system.v中编写分频器代码;具体的修改可以参考我gitee的工程;
我的gitee传送门
可以在虚拟机用火狐浏览器下载,但我是在windows中下载,通过共享文件的方式拷贝到虚拟机中。强调一下:将windows文件考入虚拟机,最好通过共享文件夹方式,因为直接将文件拖入(copy)都会出现文件损坏的情况;这里不知道怎们设置共享文件夹的朋友可以看我 EDA系列安装教程的第三部分。
还有我一般在home目录下建一个文件夹,集中仿真一些文件和安装包,如 12文件夹;
使用以下命令解压,分别得到 gcc和Nuclei两个文件;
tar -xf nuclei-openocd-0.10.0-15-linux-x64.tgz
tar -xf nuclei_riscv_newlibc_prebuilt_linux64_2020.08\ .tar.bz2
回到home下新建一个 Nuclei_Tools 的文件夹,分别将上面解压的两个文件拷贝进来;
mkdir Nuclei_Tools
cp -rf ../12/gcc/ ./
cp -rf ../12/Nuclei/openocd/ ./
进入到Hbirdv2的工程目录下,使用git取下SDK;
git clone https://gitee.com/riscv-mcu/hbird-sdk.git
进入到hbird-sdk目录下,新建setup_config.sh文件,并加入第三个命令;第三个是上面解压两个文件,和我不一样的路径,自己灵活修改;
touch setup_config.sh
g setup_config.sh
NUCLEI_TOOL_ROOT=/home/ICer/Nuclei_Tools
最后还需要运行以下命令构建环境;
source setup.sh
echo $PATH
which riscv-nuclei-elf-gcc openocd make rm
make help
进入到 helloword目录,使用ilm模式编译;最后编译成功;
cd application/baremetal/helloworld/
make dasm SOC=hbirdv2 BOARD=ddr200t CORE=e203 DOWNLOAD=ilm
(1) 先将调试器插入电脑USB,在虚拟机中设置,如图所示,选择连接;
(2) 依次使用以下命令
lsusb
sudo gvim /etc/udev/rules.d/99-openocd.rules
文件中加入以下内容,我的调试器是sipeed的,与芯来199的一致;
SUBSYSTEM=="usb", ATTR{idVendor}=="0403",
ATTR{idProduct}=="6010", MODE="664", GROUP="plugdev"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403",
ATTRS{idProduct}=="6010", MODE="664", GROUP="plugdev"
最后将当前用户加入plugdev时提示,该组不存在,因此还需要继续设置;
(3) 新建plugdev
使用以下命令新建;
再次使用该命令将所在用户添加到 plugdev 组中;
sudo usermod -a -G plugdev ICer
重启一下,就可以查询ICer已经在 plugdev 组中;
(4) 修改openocd_hbirdv2.cfg
在 hbird-sdk 目录下,直接使用下面命令打开openocd配置文件;将Flash相关全部注释掉,具体如下图;
我的板子没有额外的Flash,很多人板子也没有Flash,因此只能将程序烧写到Ram中,所以使用 ilm模式,并Flash相关的配置注释掉,不然影响烧写;
g SoC/hbirdv2/Board/ddr200t/openocd_hbirdv2.cfg
(5) 烧写
进入到 helloworld目录下,使用下面命令进行烧写;
但是出现 “openocd:未找到命令”,
make upload SOC=hbirdv2 BOARD=ddr200t CORE=e203 DOWNLOAD=ilm
(6) 修改脚本
发现 hbird-sdk 目录中的 setup.sh脚本有问题;如图修改为正确的路径;然后重新走一遍流程(下面的命令);
source setup.sh
echo $PATH
which riscv-nuclei-elf-gcc openocd make rm
make help
sudo yum install screen
sudo screen /dev/ttyUSB1 115200
进入到vsim目录下,打开Makefile,修改如下;将我们前面编译的helloworld程序修改进来;其他也是如此操作
使用以下命令,重置环境进行仿真,最后打印 hello world字样,完美 祝贺成功!!!
make clean
make install
make compile SIM=vcs
make run_test SIM=vcs
这次内容其实在五一前实现了,只是后面各种事情耽误,没来得及分享,希望现在还来得及;
蜂鸟e203的环境和代码有很多值得学习的地方,为我后面的造U计划提供很大的帮助,非常具有参考价值,希望大家多多交流,交流中获取更多的灵感;