卿小小 发表于 2022-11-21 15:06

【中科亿海微EQ6HL45开发平台测评体验】+09.RSIC-V测试(zmj)

<p><strong>【中科亿海微EQ6HL45开发平台测评体验】+09.RSIC-V测试(zmj)</strong></p>

<p>&nbsp;</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开源项目 &gt; 其他开源 &gt; 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&amp;vd_source=29c4c65318d9617647948d0328dda1e3
b.EGO1移植 RISC-V E203
https://www.bilibili.com/video/BV1yS4y1j7ka/?spm_id_from=333.788.recommend_more_video.-1&amp;vd_source=29c4c65318d9617647948d0328dda1e3
c.【RISC-V】手把手教你使用蜂鸟E203-v2
https://www.bilibili.com/video/BV1ia411U76P/?is_story_h5=false&amp;p=1&amp;share_from=ugc&amp;share_medium=iphone&amp;share_plat=ios&amp;share_session_id=46F37C64-B4B8-456E-8EF8-BA64F1454FEF&amp;share_source=QQ&amp;share_tag=s_i&amp;timestamp=1668151893&amp;unique_k=MK8GmSQ&amp;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">&nbsp;</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">&nbsp;</p>

<p cid="n1036" mdtype="paragraph"></p>

<p cid="n1036" mdtype="paragraph">//------蜂鸟e203@xc7z010clg400-2</p>

<p cid="n1036" mdtype="paragraph">&nbsp;</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软件对于预处理命令&ldquo;&middot;define&rdquo;的支持不太友好,主要体现在端口声明部分,例如:</p>

<pre style="background:#555; padding:10px; color:#ddd !important;">
//------预处理命令涉及的部分代码
`define E203_ADDR_SIZE &nbsp; 32
`define E203_PC_SIZE &nbsp; &nbsp; 32
`define E203_XLEN &nbsp; &nbsp; &nbsp;32
//------端口声明
output &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sysper_icb_cmd_valid,
input &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sysper_icb_cmd_ready,
output [`E203_ADDR_SIZE-1:0] &nbsp; sysper_icb_cmd_addr,
output &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sysper_icb_cmd_read,
output [`E203_XLEN-1:0] &nbsp; &nbsp; &nbsp;sysper_icb_cmd_wdata,
output [`E203_XLEN/8-1:0] &nbsp; &nbsp;sysper_icb_cmd_wmask,</pre>

<p cid="n1046" mdtype="paragraph">&nbsp;</p>

<p cid="n1047" mdtype="paragraph">在上述代码中,端口定义使用了预处理的内容,eLINX软件直接报错或者解析错误。Quartus-II和Xilinx软件并无该问题。</p>

<p cid="n1047" mdtype="paragraph">&nbsp;</p>

<h1 cid="n1029" mdtype="heading">2. 完整流程(整理)</h1>

<p cid="n1031" mdtype="paragraph">依据&ldquo;资源参考&rdquo;的内容,整理的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-&gt;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">&nbsp;</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软件对于预处理命令&ldquo;&middot;define&rdquo;的支持不太友好,主要体现在端口声明部分解析错误直接报错,删删改改一个下午还是各种报错。</p>

<p cid="n1052" mdtype="paragraph">相反,在Xilinx两块不同板卡分别实现蜂鸟e203和tinyrsicv的工程,流程上基本毫无阻力&hellip;&hellip;</p>

<p cid="n1062" mdtype="paragraph">//------eLINX@蜂鸟e203报错</p>

<p cid="n1062" mdtype="paragraph">&nbsp;</p>

<p cid="n1062" mdtype="paragraph"></p>

<p cid="n1041" mdtype="paragraph">//------Xilinx的Vivado跑蜂鸟e203和tinyrsicv毫无压力</p>

<p cid="n1041" mdtype="paragraph">&nbsp;</p>

<p cid="n1041" mdtype="paragraph"></p>

<p cid="n1041" mdtype="paragraph"></p>

<p cid="n1041" mdtype="paragraph">&nbsp;</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 &nbsp; </pre>

<p>&nbsp;</p>

<p></p>

<p></p>

<p cid="n1076" mdtype="paragraph">测试代码通过串口实现。代码如下所示:</p>

<pre style="background:#555; padding:10px; color:#ddd !important;">
//------SDK
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;
#include &lt;stdlib.h&gt;
#include &quot;hbird_sdk_soc.h&quot;

int main(void)
{
&nbsp;printf(&quot;******************************\r\n&quot;,i);
&nbsp;printf(&quot;It&#39;s EQ6HL45-EVL-v1.0\r\n&quot;,i);
&nbsp;for (int i = 0; i &lt; 10; i ++) {
&nbsp; &nbsp; &nbsp;printf(&quot;%d: Hello World From My risc-v\r\n&quot;,i);

&nbsp;}
&nbsp;printf(&quot;******************************\r\n&quot;,i);
&nbsp;return 0;
}</pre>

<p>&nbsp;</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">&nbsp;</p>

<p cid="n1036" mdtype="paragraph">&nbsp;</p>

<p cid="n1036" mdtype="paragraph">&nbsp;</p>

lugl4313820 发表于 2022-12-3 06:39

我看到调试器,这个挺好的,价格贵不贵呀?
页: [1]
查看完整版本: 【中科亿海微EQ6HL45开发平台测评体验】+09.RSIC-V测试(zmj)