目录
1 前言
1.1 计划目标与定位
1.2 架构特性
1.3 开发与调试支持
1.4 配套SoC与扩展性
2 开发环境
3 移植思绪
4 准备工作
4.1 E203工程获取
4.2 具体安装步调
4.3 E203项目标目录结构
5 vcs+verdi仿真
5.1 编译测试
5.2 运行仿真
5.3 显示波形
6 SDK测试
6.1 环境搭建
6.2 获取SDK工程
6.3 编译SDK工程
6.4 SDK联合仿真
6.5 修改ITCM和DTCM容量
7 FPGA工程与上板调试
7.1 vivado综合
7.2 上板调试
8 参考链接
1 前言
蜂鸟E203是一款由中国本土团队开发的开源RISC-V处理器内核,专为超低功耗与极小面积场景计划,适用于IoT设备、嵌入式系统及教诲研究领域。
以下是其焦点特点与架构的扼要介绍:
1.1 计划目标与定位
- 能效比优化:通过两级流水线精简架构,实现了比同级ARM Cortex-M系列更优的功耗与面积表现。
- 开源属性:完整开放RTL代码(Verilog编写)及配套SoC,适合学术研究与爱好者学习,但未答应商用质量。
1.2 架构特性
- 指令集支持:兼容RISC-V RV32I/E/A/M/C/F/D等子集,支持呆板模式(Machine Mode Only)。
- 存储结构:
- 指令与数据分离的紧耦合存储(ITCM/DTCM),基于单周期SRAM实现,ITCM宽度64位以低落功耗。
- 支持系统总线、私有外设接口及快速IO接口,机动设置地点空间。
1.3 开发与调试支持
- 工具链:提供成熟的GCC编译工具链和OpenOCD调试环境,支持Windows/Linux平台。
- 调试接口:集成标准JTAG接口,支持GDB交互调试(但暂不支持硬件断点与监督点)。
- 仿真验证:支持VCS+Verdi等工业级仿真工具,提供回归测试脚本与波形调试流程。
1.4 配套SoC与扩展性
- 系统集成:包含停止控制器、计时器、UART、QSPI、PWM等外设模块,形成“即用型”SoC平台。
- 扩展本领:支持协处理器接口(如NICE扩展),可连接AI加快器等自界说硬件模块。
2 开发环境
- 软件工具:Vmware Workstation 16pro、Vivado 2019.1、VCS、Verdi
- 操作系统:Centos(基于Linux)
- 工程源码:E203_ZYNQ_FPGA
3 移植思绪
通过对比原Nuclei开发板(Artix-7)与ZYNQ7020的硬件差别,重点解决以下关键问题:
- 时钟架构重构:利用ZYNQ PS端PLL生成系统时钟
- 管脚约束设置:须要根据自己的开发板管脚界说重新设置约束文件
- JTAG调试:须要自行连接riscv调试器举行调试
- 脚本文件:重新设置脚本文件以支持新的开发板以及VCS+Verdi验证环境
4 准备工作
4.1 E203工程获取
E203官方项目地点:e203_hbirdv2,在Github下载官方项目文件,其中,我们只须要用到的是rtl/e203下的RTL源码,FPGA工程中的干系脚本文件以及tb下的仿真文件。
- git clone https://github.com/riscv-mcu/e203_hbirdv2.git
复制代码 当热,也可以直接进入E203_ZYNQ_FPGA ,其中已经上传了这个移植项目标所有RTL代码、约束文件、仿真文件以及vivado工程文件。
- git clone https://github.com/ddd-yy/E203_ZYNQ_FPGA.git
复制代码 然后,设置好该项目须要用到的环境,即Centos系统、Vivado等。其中,关于Centos系统和干系编译工具链的环境具体教程如下:搭建IC_EDA虚拟机教程,其中已经安装好了我们须要的 Centos、Vivado 2019.1、VCS、Verdi以及E203工程所需的编译工具链环境。
关于E203工程的准备步调也可以参考Nuclei官方的手册举行:Hummingbirdv2 E203
4.2 具体安装步调
起首,在Linux系统中下载须要的工具:
- sudo apt-get install autoconf automake autotools-dev curl device-tree-compiler libmpc-dev libmpfr-dev libgmp-dev
- gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev git
复制代码 然后在Nuclei官网:芯来工具链 下载riscv工具链:
然后解压文件,设置riscv-tools:
- # 根据下载的文件名自行进行解压
- cp rv_linux_bare_9.21_centos64.tgz.bz2 ~/
- cd ~/
- tar -xjvf rv_linux_bare_9.21_centos64.tgz.bz2
- cd <your_e203_dir>/
- mkdir -p ./riscv-tools/prebuilt_tools/prefix/bin
- cd ./riscv-tools/prebuilt_tools/prefix/bin/
- ln -s ~/rv_linux_bare_19-12-11-07-12/bin/* .
复制代码 4.3 E203项目标目录结构
5 vcs+verdi仿真
5.1 编译测试
在上一节中已经完成了工程的克隆以及工具链的设置,现在举行仿真,运行E203自带的测试用例。由于在现实工程上一般使用vcs+verdi仿真,而不是iverilog,因此,我们使用vcs+verdi,具体的EDA摆设教程可以参考:Centos7安装EDA(vcs2018、verdi2018等
环境准备好之后,在对应目录下举行编译测试:
- cd <your_e203_dir>/riscv-tools/riscv-tests/isa
- source regen.sh
复制代码 在 <your_e203_dir>/riscv-tools/riscv-tests/isa/generated 目录中,有预先生成的可执行文件。 假如测试代码有修改,须要使用上述下令可以重新生成可执行文件。
5.2 运行仿真
进入vsim目录下,通过仿真脚本举行仿真:
- cd <your_e203_dir>/vsim
- make clean
- make install
- //-------------- For VCS:-------------//
- make compile SIM=vcs
- make run_test SIM=vcs
- //-------------- For iVerilog:-------//
- make compile SIM=iverilog
- make run_test SIM=iverilog
复制代码
每次修改测试代码之后,都须要重新执行上述下令举行仿真。
5.3 显示波形
运行以下下令展示仿真测试用例的波形图,我们选择Verdi:
- //-------------- Using Verdi:-------------//
- make wave SIM=vcs
- //-------------- Using GTKWave:-----------//
- make wave SIM=iverilog
复制代码 波形图如下:
6 SDK测试
6.1 环境搭建
在 Nuclei工具下载官网 安装相应的openOCD工具,具体教程参考:使用 HBird SDK 举行开发
在 <nuclei-tools> 目录下创建 gcc、openocd 文件夹,解压相应的文件,根据官网教程放置到指定目录下。最后,nuclei-tools 目录结构如下:
6.2 获取SDK工程
在hbirdv2官方仓库中获取hbird-sdk源码:
- git clone https://gitee.com/riscv-mcu/hbird-sdk.git
复制代码 设置SDK环境,进入到 /hbird-sdk目录下,新建setup_config.sh文件,并加入第三个下令(第三个是上面解压的两个文件,路径可以根据现实机动修改)
- touch setup_config.sh
- g setup_config.sh
- NUCLEI_TOOL_ROOT=/home/ICer/Nuclei_Tools
复制代码 6.3 编译SDK工程
运行以下下令构建环境,每次执行SDK工程前都须要重新执行以下下令:
- source setup.sh
- echo $PATH
- which riscv-nuclei-elf-gcc openocd make rm
- make help
复制代码
编译hello world demo,进入到 helloword目录,使用ilm模式编译:
- cd application/baremetal/helloworld/
- make dasm SOC=hbirdv2 BOARD=ddr200t CORE=e203 DOWNLOAD=ilm
复制代码
6.4 SDK联合仿真
运行这两条下令后,可以上板测试,也可以让E203能够在软件仿真的环境下运行自己编写的C语言代码:
- 起首,hbird-sdk\application\baremetal目录下放置着一些测试程序,以helloworld为例。
- 复制helloworld目录为并取名为自界说的项目目录名hello_test,进入该目录下,修改makefile的内容,将 TARGET = helloworld 这一行内容的 “helloworld” 修改成自界说的项目名,如:mywork。
- 修改main.c函数的内容,将我们的应用程序文件放入该目录下。
- 运行 make dasm 这条下令,该下令将生成mywork.dasm、mywork.dump、mywork.verilog等新的文件,并将mywork.verilog文件复制到E203项目目录下的riscv-tools\riscv-tests\isa\generated目录下。
- 进入E203项目目录下的vsim目录,运行 make run_test SIM=iverilog TESTNAME=mywork 下令即可。
- //-------------- For SDK:-------------//
- cd application/baremetal/mywork/
- make dasm SOC=hbirdv2 BOARD=ddr200t CORE=e203 DOWNLOAD=ilm
- //-------------- For VCS:-------------//
- cd <your_e203_dir>/vsim
- make clean
- make install
- make compile SIM=vcs
- make run_test SIM=vcs
- make wave SIM=vcs
复制代码 示例输出:
6.5 修改ITCM和DTCM容量
E203内核的DTCM和ICTM的默认设置为64KB的大小。但我们自己编写的应用程序大概因为代码量大概数据量过大,而导致指令大概数据无法完全放在ITCM或DTCM中,直接的表现是在用hbird-sdk生成.verilog文件时报错:
因此,我们须要根据须要对DTCM、ITCM的举行扩容,具体操作如下:
1) 修改vsim\install\rtl\core下的config文件,将
- `define E203_CFG_DTCM_ADDR_WIDTH 16
- `define E203_CFG_ITCM_ADDR_WIDTH 16
复制代码 修改成符合的大小。比如,假如想将DTCM扩展到256KB,则设置如下:
- `define E203_CFG_DTCM_ADDR_WIDTH 18 // 2^18 = 256
复制代码 2) 由于扩容后的DTCM、ITCM的大小发生了变化,在运行仿真测试时,须要修改hbird-sdk生成测试代码的设置文件,即修改 hbird-sdk\SoC\hbirdv2\Board\ddr200t\Source\GCC 下的gcc_hbirdv2_ilm.ld文件,将:
- ilm (rxai!w) : ORIGIN = 0x80000000, LENGTH = 64K
- ram (wxa!ri) : ORIGIN = 0x90000000, LENGTH = 64K
复制代码 修改成对应的大小。比如,假如想将DTCM扩展到256KB,则设置如下:
- ilm (rxai!w) : ORIGIN = 0x80000000, LENGTH = 64K
- ram (wxa!ri) : ORIGIN = 0x90000000, LENGTH = 256K
复制代码 这样,就实现了仿真环境下E203的DTCM和ITCM的扩容。
3) 其他:在将E203综合到FPGA上时,由于FPGA的资源有限,假如设置的DTCM和ITCM的容量过大,大概会因为FPGA的资源不敷而出现无法综合的问题。此外,假如综合乐成,在使用NucleiStudio将应用程序下载到FPGA上时,同样要将NucleiStudio项目中的gcc_hbirdv2_ilm.ld文件修改成DTCM和ITCM内存大小的设置,才能让应用程序正常运行。
7 FPGA工程与上板调试
7.1 vivado综合
假如使用Nuclei官方的DDR200T开发板,那么就很轻易执行FPGA,运行以下下令,然后连接开发板,上电测试即可:
- // 进入项目fpga目录
- cd <your_e203_dir>/fpga
- // install 的文件夹,生成 FPGA bitstream 文件所需的所有 RTL 文件
- make install FPGA_NAME=ddr200t
- // 生成 bit 文件
- make bit FPGA_NAME=ddr200t
- // 生成 mcs 文件
- make mcs FPGA_NAME=ddr200t
复制代码 假如使用的其他型号的开发板,比如ZYNQ系列,那么须要新建工程,修改脚本文件以举行适配。进入到FPGA目录下,gvim打开 “README.md” 文件,文件里就是FPGA综合的下令,这里以ZYNQ7020为例:
现在须要举行一些修改以适配ZYNQ。起首,我们须要举行干系脚本的修改,修改ip.tcl脚本,这个生成vivado的IP,我们须要设置clocking wizard IP输入时钟的属性:
然后修改board.tcl脚本,如图,重要修改FPGA型号,其他脚本假如有board干系的全部表明掉:
依次执行以下下令,第二个直接使用 “setup” 可以打开Vivado的GUI,查看整个工程。
- make install CORE=e203 FPGA_NAME=my_zynq7020
- make setup CORE=e203 FPGA_NAME=my_zynq7020
复制代码 关于E203的RTL代码中系统顶层文件的时钟、约束文件以及Vivado中干系IP的设置可以参考这个链接中的教程:E203 hbirdv2-ZYNQ7020-FPGA ,修改完成之后举行综合,综合结果如下:
7.2 上板调试
假如开发板是Nuclei官方的型号,上板调试的教程可以参考官方手册:使用 HBird SDK
起首,要将jtag下载器设备连接到虚拟机,插入usb时会有窗口提示选择:
完成硬件连接后,使用以下下令检查 USB 状态:
- lsusb // The example information displayed as below
- ...
- Bus 001 Device 010: ID 0403:6010 Future Technology Devices International, Ltd FT2232xxxx
复制代码 使用以下下令设置 udev 规则,使这个 USB 可以被 plugdev 组访问:
- sudo vi /etc/udev/rules.d/99-openocd.rules
- // Use vi command to edit the file, and add the following lines
- 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:
- whoami
- // Use above command to check your user name, assuming it is your_user_name
- // Use below command to add your_user_name into plugdev group
- sudo usermod -a -G plugdev your_user_name
- //查询用户是否已经在 plugdev 组中
- groups
复制代码 若添加后提示该组不存在,则还须要继续设置。要新建plugdev,再次将地点用户添加到 plugdev 组中,重启一下,就可以查询用户是否已经在 plugdev 组中:
- // 新建plugdev
- sudo groupadd plugdev
- // 将所在用户添加到 plugdev 组中
- sudo usermod -a -G plugdev your_user_name
- // 重启查询用户是否已经在 plugdev 组中
- groups // The example information showed as below after this command
- ... plugdev ...
- // As long as you can see plugdev in groups, then means it is really belong to.
复制代码 ZYNQ开发板没有额外的Flash,因此只能将程序烧写到ROM中,以是使用 ilm模式,须要在干系目录下修改openocd_hbirdv2.cfg,将Flash干系全部表明掉:
使用以下下令编译和下载应用程序:
- cd <hbird-sdk>/application/baremetal/helloworld
- make upload SOC=hbirdv2 BOARD=ddr200t CORE=e203 DOWNLOAD=flash
复制代码 Hello World Demo 的功能是通过 UART 在 PC 的屏幕上打印一些信息,以是先准备好串口显示终端。使用第一个下令安装;使用第二个下令启动串口窗口。
- sudo yum install screen // 安装串口
- sudo screen /dev/ttyUSB1 115200 // 打开UART终端
复制代码 重新烧写程序,查看打印的信息:
使用以下下令,可以编译应用程序并进入调试模式:
- cd <hbird-sdk>/application/baremetal/helloworld
- make debug SOC=hbirdv2 BOARD=ddr200t CORE=e203
复制代码 8 参考链接
- OpenOCD调试官方文档教程:Introduction to OpenOCD
- Nuclei社区网站:RISC-V MCU中文社区
- Nuclei官方E203教程:Overview — Hummingbirdv2 E203
原创声明:本文为CSDN博主「yuuki_ac」原创文章,遵循CC 4.0 BY-SA版权协议
转载需附原文链接:蜂鸟E203 hbirdv2项目复现与FPGA开发【基于Linux】-CSDN博客
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |