【中科亿海微EQ6HL45开发平台测评体验】+09.RSIC-V测试(zmj)
<p><strong>【中科亿海微EQ6HL45开发平台测评体验】+09.RSIC-V测试(zmj)</strong></p><p> </p>
<p cid="n955" mdtype="paragraph"><span style="background-color:#f39c12;">先说结论:</span>EQ6HL45开发板的资源数量足够没问题,eLINX软件对预处理代码的支持有问题,代码改动工作量比较大,最终没运行RSIC-V。</p>
<p cid="n999" mdtype="paragraph">(后续会分享使用其他FPGA实现RISC-V流程)</p>
<p cid="n958" mdtype="paragraph">RISC-V作为一款优秀的开源处理器架构,受到越来越多的关注。RISC,即精简指令集处理器,是相对于X86这种CISC(复杂指令集处理器)来说的。RISC-V中的V是罗马数字,也即阿拉伯数字中的5,就是指第5代RISC。</p>
<h1 cid="n698" mdtype="heading">1. 参考</h1>
<h2 cid="n699" mdtype="heading">1.1 资源参考</h2>
<p cid="n700" mdtype="paragraph">RISC-V的参考资源非常多,下方列举仅供参考。</p>
<p cid="n701" mdtype="paragraph">芯来参考手册包含十分详细的RTL和SDK操作流程,以及Git资源。其他资源基本都是以芯来参考手册为蓝本。</p>
<pre style="background:#555; padding:10px; color:#ddd !important;">
//------☆芯来参考:
//---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&timestamp=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/
</pre>
<p cid="n704" mdtype="paragraph"> </p>
<h2 cid="n705" mdtype="heading">1.2 可行性分析(资源评估)</h2>
<p cid="n1035" mdtype="paragraph">中科亿海微EQ6HL45开发平台的资源经过评估可以配置RSIC-V,资源评估如下:</p>
<p cid="n1036" mdtype="paragraph">//------tinyrsicv@xc7a35tftg256-1</p>
<p cid="n1036" mdtype="paragraph"> </p>
<p cid="n1036" mdtype="paragraph"></p>
<p cid="n1036" mdtype="paragraph">//------蜂鸟e203@xc7z010clg400-2</p>
<p cid="n1036" mdtype="paragraph"> </p>
<p cid="n1036" mdtype="paragraph"></p>
<p cid="n1040" mdtype="paragraph">//------中科亿海微EQ6HL45开发板</p>
<p cid="n1041" mdtype="paragraph">LUT/FF/Memory/DSP均能满足蜂鸟e203或者tinyrsicv的资源需求。</p>
<p cid="n1041" mdtype="paragraph"></p>
<p cid="n1044" mdtype="paragraph">实际操作的时候发现eLINX软件对于预处理命令“·define”的支持不太友好,主要体现在端口声明部分,例如:</p>
<pre style="background:#555; padding:10px; color:#ddd !important;">
//------预处理命令涉及的部分代码
`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,</pre>
<p cid="n1046" mdtype="paragraph"> </p>
<p cid="n1047" mdtype="paragraph">在上述代码中,端口定义使用了预处理的内容,eLINX软件直接报错或者解析错误。Quartus-II和Xilinx软件并无该问题。</p>
<p cid="n1047" mdtype="paragraph"> </p>
<h1 cid="n1029" mdtype="heading">2. 完整流程(整理)</h1>
<p cid="n1031" mdtype="paragraph">依据“资源参考”的内容,整理的RSIC-V完整流程如下:</p>
<pre style="background:#555; padding:10px; color:#ddd !important;">
//------准备
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)</pre>
<p cid="n1050" mdtype="paragraph"> </p>
<h2 cid="n711" mdtype="heading">2.1 RTL工程</h2>
<p cid="n712" mdtype="paragraph">RTL工程即FPGA侧的工程,通过eLINX软件完成。主要内容就是导入rsicv代码、修改IP、添加约束等。</p>
<p cid="n713" mdtype="paragraph">实际操作的时候发现eLINX软件对于预处理命令“·define”的支持不太友好,主要体现在端口声明部分解析错误直接报错,删删改改一个下午还是各种报错。</p>
<p cid="n1052" mdtype="paragraph">相反,在Xilinx两块不同板卡分别实现蜂鸟e203和tinyrsicv的工程,流程上基本毫无阻力……</p>
<p cid="n1062" mdtype="paragraph">//------eLINX@蜂鸟e203报错</p>
<p cid="n1062" mdtype="paragraph"> </p>
<p cid="n1062" mdtype="paragraph"></p>
<p cid="n1041" mdtype="paragraph">//------Xilinx的Vivado跑蜂鸟e203和tinyrsicv毫无压力</p>
<p cid="n1041" mdtype="paragraph"> </p>
<p cid="n1041" mdtype="paragraph"></p>
<p cid="n1041" mdtype="paragraph"></p>
<p cid="n1041" mdtype="paragraph"> </p>
<h2 cid="n736" mdtype="heading">2.2 SDK工程</h2>
<p cid="n737" mdtype="paragraph">SDK工程即开发RSIC-V的软件工程。它的开发需要下载SDK软件:Nucleistudio-IDE(v2020.9)。</p>
<pre style="background:#555; padding:10px; color:#ddd !important;">
//------Nuclei-Studio-IDE (Windows x86-64 2020.09版)
https://www.nucleisys.com/download.php </pre>
<p> </p>
<p></p>
<p></p>
<p cid="n1076" mdtype="paragraph">测试代码通过串口实现。代码如下所示:</p>
<pre style="background:#555; padding:10px; color:#ddd !important;">
//------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;
}</pre>
<p> </p>
<h1 cid="n1079" mdtype="heading">3. 关于RISC-V调试器</h1>
<p cid="n1085" mdtype="paragraph">RSIC-V核的调试器使用矽速科技的RISC-V调试器(Sipeed USB-JTAG/TTL RISC-V调试器 STLINK V2 STM8/STM32模拟器)。</p>
<p cid="n1085" mdtype="paragraph"></p>
<p cid="n1085" mdtype="paragraph"></p>
<p cid="n1085" mdtype="paragraph">//------END</p>
<p cid="n1085" mdtype="paragraph"> </p>
<p cid="n1036" mdtype="paragraph"> </p>
<p cid="n1036" mdtype="paragraph"> </p>
我看到调试器,这个挺好的,价格贵不贵呀?
页:
[1]