【中科亿海微EQ6HL45开发平台测评体验】+09.RSIC-V测试(zmj)
[复制链接]
【中科亿海微EQ6HL45开发平台测评体验】+09.RSIC-V测试(zmj)
先说结论:EQ6HL45开发板的资源数量足够没问题,eLINX软件对预处理代码的支持有问题,代码改动工作量比较大,最终没运行RSIC-V。
(后续会分享使用其他FPGA实现RISC-V流程)
RISC-V作为一款优秀的开源处理器架构,受到越来越多的关注。RISC,即精简指令集处理器,是相对于X86这种CISC(复杂指令集处理器)来说的。RISC-V中的V是罗马数字,也即阿拉伯数字中的5,就是指第5代RISC。
1. 参考
1.1 资源参考
RISC-V的参考资源非常多,下方列举仅供参考。
芯来参考手册包含十分详细的RTL和SDK操作流程,以及Git资源。其他资源基本都是以芯来参考手册为蓝本。
//------☆芯来参考:
//---Hummingbirdv2-E203-Core-and-SoC手册
https://doc.nucleisys.com/hbirdv2/
//---Git资源参考:riscv-mcu/e203_hbirdv2
https://github.com/riscv-mcu/e203_hbirdv2
//------其他Gitee资源参考(包含源码和基本流程说明):Gitee开源项目 > 其他开源 > RISC-V开发
//---e203蜂鸟: RISCV-MCU/e203_hbirdv2(推荐)
https://gitee.com/riscv-mcu/e203_hbirdv2?_from=gitee_search
//---tinyRV: liangkangnan/tinyriscv
https://gitee.com/liangkangnan/tinyriscv?_from=gitee_search
//---xiaowuzxc/小麻雀处理器(集成了tinyrv和e203)
https://gitee.com/xiaowuzxc/SparrowRV
//------视频参考(Xilinx方案):
a.蜂鸟E203移植到其他Xilinx FPGA器件
https://www.bilibili.com/video/BV1HM4y1A7X6/?spm_id_from=333.788.recommend_more_video.3&vd_source=29c4c65318d9617647948d0328dda1e3
b.EGO1移植 RISC-V E203
https://www.bilibili.com/video/BV1yS4y1j7ka/?spm_id_from=333.788.recommend_more_video.-1&vd_source=29c4c65318d9617647948d0328dda1e3
c.【RISC-V】手把手教你使用蜂鸟E203-v2
https://www.bilibili.com/video/BV1ia411U76P/?is_story_h5=false&p=1&share_from=ugc&share_medium=iphone&share_plat=ios&share_session_id=46F37C64-B4B8-456E-8EF8-BA64F1454FEF&share_source=QQ&share_tag=s_i×tamp=1668151893&unique_k=MK8GmSQ&vd_source=29c4c65318d9617647948d0328dda1e3
//------tinyrsicv文档:从零开始写RISC-V处理器
https://liangkangnan.gitee.io/2020/04/29/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E5%86%99RISC-V%E5%A4%84%E7%90%86%E5%99%A8/
1.2 可行性分析(资源评估)
中科亿海微EQ6HL45开发平台的资源经过评估可以配置RSIC-V,资源评估如下:
//------tinyrsicv@xc7a35tftg256-1
//------蜂鸟e203@xc7z010clg400-2
//------中科亿海微EQ6HL45开发板
LUT/FF/Memory/DSP均能满足蜂鸟e203或者tinyrsicv的资源需求。
实际操作的时候发现eLINX软件对于预处理命令“·define”的支持不太友好,主要体现在端口声明部分,例如:
//------预处理命令涉及的部分代码
`define E203_ADDR_SIZE 32
`define E203_PC_SIZE 32
`define E203_XLEN 32
//------端口声明
output sysper_icb_cmd_valid,
input sysper_icb_cmd_ready,
output [`E203_ADDR_SIZE-1:0] sysper_icb_cmd_addr,
output sysper_icb_cmd_read,
output [`E203_XLEN-1:0] sysper_icb_cmd_wdata,
output [`E203_XLEN/8-1:0] sysper_icb_cmd_wmask,
在上述代码中,端口定义使用了预处理的内容,eLINX软件直接报错或者解析错误。Quartus-II和Xilinx软件并无该问题。
2. 完整流程(整理)
依据“资源参考”的内容,整理的RSIC-V完整流程如下:
//------准备
a.RTL软件:eLINX软件
b.SDK软件:Nucleistudio-IDE(v2020.9)
|---https://www.nucleisys.com/download.php
c.代码:蜂鸟e203代码
|---https://gitee.com/riscv-mcu/e203_hbirdv2?_from=gitee_search
//------RTL工程步骤
a.创建工程
b.导入e203的RTL代码
|---e203_hbirdv2/rtl/e203
|---导入system.v文件,并设置为top(set_as_top)
|---导入分频代码clkdivider.v(生成时钟32768Hz)
c.添加IP
|---reset
|---clock:50MHz->16MHz
d.分频代码:clkdivider.v,最终输出32768Hz(可以100MHz计数得到32.768kHz)
e.设置头文件与宏定义:
|---e203_defines.v
|---`define FPGA_SOURCE
f.约束:时钟、复位、JTAG(TDI/TDO/TCK/TMS)
h.完成上述步骤后,综合+布局布线(Synthesis + IMPL)
//------SDK工程步骤
a.芯来网站下载软件Nucleistudio-IDE。
b.打开eclipse创建工程。
c.c++_Prj或者c_Prj:E203、baremetal_HW、Build工程、修改openocd_hbird.cfg(删除Flash)
2.1 RTL工程
RTL工程即FPGA侧的工程,通过eLINX软件完成。主要内容就是导入rsicv代码、修改IP、添加约束等。
实际操作的时候发现eLINX软件对于预处理命令“·define”的支持不太友好,主要体现在端口声明部分解析错误直接报错,删删改改一个下午还是各种报错。
相反,在Xilinx两块不同板卡分别实现蜂鸟e203和tinyrsicv的工程,流程上基本毫无阻力……
//------eLINX@蜂鸟e203报错
//------Xilinx的Vivado跑蜂鸟e203和tinyrsicv毫无压力
2.2 SDK工程
SDK工程即开发RSIC-V的软件工程。它的开发需要下载SDK软件:Nucleistudio-IDE(v2020.9)。
//------Nuclei-Studio-IDE (Windows x86-64 2020.09版)
https://www.nucleisys.com/download.php
测试代码通过串口实现。代码如下所示:
//------SDK
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include "hbird_sdk_soc.h"
int main(void)
{
printf("******************************\r\n",i);
printf("It's EQ6HL45-EVL-v1.0\r\n",i);
for (int i = 0; i < 10; i ++) {
printf("%d: Hello World From My risc-v\r\n",i);
}
printf("******************************\r\n",i);
return 0;
}
3. 关于RISC-V调试器
RSIC-V核的调试器使用矽速科技的RISC-V调试器(Sipeed USB-JTAG/TTL RISC-V调试器 STLINK V2 STM8/STM32模拟器)。
//------END
|