RISC-V MCU中文社区

【分享】 开源RISC-V处理器(蜂鸟E203)学习(四)移植蜂鸟Hbirdv2版本工程,实现Centos下调试器USB识别以及程序编译烧写,并进行C语言仿真

发表于 开源蜂鸟E203 2021-09-05 09:16:03
0
2708
18

1.简述

之前分享过蜂鸟V1版本的移植教程,主要实现VCS仿真、移植到自己FPGA板卡上、最后使用芯来windows下IDE成功运行hello world;但是作为ICer,怎么不在Linux下开发,同时实现编译C语言进行仿真;后面芯来更新了V2版本,对比一下V1,发现V2环境更合理干净,所以这次直接上V2版本;
说明 :本文章参考芯来的说明教程,详情请看:蜂鸟v2 E203 核心和 SoC

2.获取原工程

先虚拟机联网,我的所有IC工程都放在"ic_projs"目录下,进入该目录下,使用以下命令取下V2的工程;

git clone https://gitee.com/riscv-mcu/e203_hbirdv2

在这里插入图片描述

3.VCS+Verdi仿真

直接进入到vsim目录下,这里体现V2版本的优势,不用修改仿真脚本,使用命令参数化选择仿真工具,使用以下命令进行vcs仿真;

make clean
make install
make compile SIM=vcs
make run_test SIM=vcs

在这里插入图片描述

使用以下命令,启动Verdi查看波形;

make run_test SIM=vcs

在这里插入图片描述

4.FPGA移植

这部分方法和V1的一致,修改FPGA型号、管脚约束、注释不用引脚相关的信号,其中需要注意的是32K时钟,由于我板子没有这个晶振,所以在system.v中编写分频器代码;具体的修改可以参考我gitee的工程;
我的gitee传送门
在这里插入图片描述

5.安装linux工具安装与环境设置

1)下载

下载图中的两个工具:芯来linux工具下载传送门
在这里插入图片描述

2)拷贝

可以在虚拟机用火狐浏览器下载,但我是在windows中下载,通过共享文件的方式拷贝到虚拟机中。强调一下:将windows文件考入虚拟机,最好通过共享文件夹方式,因为直接将文件拖入(copy)都会出现文件损坏的情况;这里不知道怎们设置共享文件夹的朋友可以看我 EDA系列安装教程的第三部分。
还有我一般在home目录下建一个文件夹,集中仿真一些文件和安装包,如 12文件夹;
在这里插入图片描述

3)解压

使用以下命令解压,分别得到 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/ ./

在这里插入图片描述

4)获取HBird SDK

进入到Hbirdv2的工程目录下,使用git取下SDK;

git clone https://gitee.com/riscv-mcu/hbird-sdk.git

在这里插入图片描述

5)设置 SDK环境

进入到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

在这里插入图片描述

6)编译hello world demo

进入到 helloword目录,使用ilm模式编译;最后编译成功;

cd application/baremetal/helloworld/
make dasm SOC=hbirdv2 BOARD=ddr200t CORE=e203 DOWNLOAD=ilm

在这里插入图片描述

7)调试器驱动安装

(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
使用以下命令新建;

sudo groupadd plugdev

再次使用该命令将所在用户添加到 plugdev 组中;

sudo usermod -a -G plugdev ICer

重启一下,就可以查询ICer已经在 plugdev 组中;

groups

在这里插入图片描述
(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

在这里插入图片描述
在这里插入图片描述
(7) 再次烧写
如图所示,应该是成功了;
如果还是不行,就需要确认前面设置路径是否问题,setup_config.sh脚本中路径是否正确;
在这里插入图片描述
(8) 安装串口
另开一个terminal,使用第一个命令安装;使用第二个命令启动串口窗口;重新烧写以下程序,就可以看到打印的helloworld信息,说明成功了;

sudo yum install screen
sudo screen /dev/ttyUSB1 115200

在这里插入图片描述

6.c仿真

1)修改Makefile

进入到vsim目录下,打开Makefile,修改如下;将我们前面编译的helloworld程序修改进来;其他也是如此操作
在这里插入图片描述

2)make

使用以下命令,重置环境进行仿真,最后打印 hello world字样,完美 祝贺成功!!!

make clean
make install
make compile SIM=vcs
make run_test SIM=vcs

在这里插入图片描述

7.总结

这次内容其实在五一前实现了,只是后面各种事情耽误,没来得及分享,希望现在还来得及;
蜂鸟e203的环境和代码有很多值得学习的地方,为我后面的造U计划提供很大的帮助,非常具有参考价值,希望大家多多交流,交流中获取更多的灵感;

喜欢18
用户评论
LANxg

LANxg 实名认证

懒的都不写签名

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