基于易灵思开发板RiscV的调试流程

  • 一、相关环境准备
    • 1.软件Install
    • 2.硬件Device
  • 二、硬件环境搭建
    • 1.开发板连接
    • 2.下载代码到开发板
  • 三、软件环境搭建
    • 1.启动Eclipse软件
    • 2. 创建新的工程
    • 3. 用OpenOCD调试
  • 四、OpenOcd烧录固化
  • 五、Efinity烧录固化
  • 五、总结

一、相关环境准备

1.软件Install

1.Efinity® Software

链接:https://pan.baidu.com/s/1bKzy7hD9lv8FlxXZpyp2zw 提取码:s745

2.RISC-V SDK

链接:https://pan.baidu.com/s/1TvdZ7F8qfACGCim1vAs8rQ 提取码:xsdk

2.硬件Device

此流程是基于T120F324的官方实验板进行的操作,后续会更新实际RiscV内核移植起来有关的注意事项。

1.Trion®T120F324开发板
2. 12V电源DC座子
3.Micro-USB连接线
4.(可选) USB转串口模块
5.(可选) FTDI设备:C232HM-DDHSL-0下载电缆

二、硬件环境搭建

1.开发板连接

开发板接12V电源,USB线连接电脑和开发板;
调试debug也可以用usb线,也可以用C232HM电缆:
如果使用C232电缆,板子上接线参考项目工程中 引脚的定义。

我这里用的是T120的开发板,附上相关的原理图:
链接:https://pan.baidu.com/s/1nbE4Vz03wOdIeLR3TZPPCg 提取码:w7tj

2.下载代码到开发板

上文的软件准备环境中,我们已经下载了Opal,Jade,Ruby三种不同规格的版本;
此例程是针对T120开发板设计的,所以不必有太多的改动。

1. 此时选择Ruby版本,拷贝到没有中文,标点以及特殊字符的路径内。
2. Efinity软件 打开soc_rubySoc工程。
3. 点击Efinity菜单栏open programmer按钮下载工程到T120开发板内。

4. 点击选择路径按钮,选择soc_rubySoc.bit文件;Programming Mode选择JTAG,节省时间;点击Start Program,出现finished即为下载成功。

5.注意事项
1.如果要使用232电缆线调试,那意味着添加了软连接调试口,整个工程需要做如下修改:
a.工程目录下将RubySoc.v换成RubySoc_softTap.v文件。
b.在top_rubySoc.v文件中添加 `define SOFT_TAP代码。
c.在interface plane 内部添加softio口,并添加对应JTAG资源。

2.如果使用C232HM电缆调试debugger并连接到电脑的时候,在第四步的下载界面的usb tagart会检测到两个,所以需要拔掉C232HM电缆,以免多端口识别下载失败,调试的时候插上即可;

三、软件环境搭建

在使用 eclipse 之前需要安装JAVA环境

1.启动Eclipse软件

a.打开Eclipse软件

解压上文的RISC-V SDK中任意一个版本到没有中文,标点以及特殊字符的路径内。,双击 setup.bat 设置系统环境变量后,双击 run_eclipse.bat;设置Workspace(不能有中文标定特殊字符等),点击Launch建立。

b. 设置work工作区环境变量。
选择菜单栏“Window > Preferences 打开 Environment 窗口.
输入以下环境变量定义。

变量名 描述
BSP efinix/EfxRubySoc Board-specific package for the SoC
DEBUG yes Enables or disables debug mode.no: Debugging is turned off . yes: Debugging is enabled
DEBUG_OG yes Enables or disables optimization during debugging.Use an uppercase letter O not a zero.


备注:如果使用的是其他的RiscV内核,BSP的值可以替换成efinix/EfxOpalSoc,efinix/EfxJadeSoc等我们实际的路径。

2. 创建新的工程

在soc_Ruby\soc_Ruby_sw\software\standalone文件夹目录下我们能看到有以下例程方便我们学习和调试,我们选择 EfxAxi4Example进行调试:

a.
选择EclipseFile菜单,选择New里面的Makefile Project with Existing Code

b.
Existing Code Location 单击Browse,选择 …\software\standalone\EfxAxi4Example文件夹;
Toolchain for Indexer Settings 目录内,选择**<none>** 后finish

c. 设置项目约束文件

File菜单栏下点击Import,选择C/C++ 下面的 C/C++ > C/C++ Project Settings。选择project_settings_ruby.xml文件。

d.
右击EfxAxi4Example项目,先后cleanbuild项目。build的过程会将所有的引索添加到当前的工程中。

3. 用OpenOCD调试

a. 创建debug配置

右击EfxAxi4Example项目,选择 Debug As里面的 Debug Configurations;双击 GDB OpenOCD Debugging 命名一个新工程EfxAxi4Example Default
C/C++ Application 选项框里选择 …soc_Ruby_sw\software\standalone\EfxAxi4Example\build\EfxAxiExample.elf文件,apply保存;

b.设置debug环境

1.OpenOCD Setup 选项框里选择SDK包里面的openocd软件的路径,我一般会选择绝对路径,只是为了方便copy:
D:\software\SDK_Windows\one\openocd\build-win64\bin\openocd.exe

2.GDB Client Setup 选项框里选择 SDK包里面的GDB软件的路径:
D:\software\SDK_Windows\one\riscv-xpack-toolchain_8.3.0-1.1_windows\bin\riscv-none-embed-gdb.exe

3.Config options 选项框里输入FTDI设备和 RISC-V CPU的设置,不同的路径根据实际情况更改:
-f “D:/En_code/Efinix/2020/T120F324/soc_ruby/soc_ruby_sw/bsp/soc_Ruby_sw/efinix/EfxRubySoc/openocd/ftdi.cfg”
-c “set CPU0_YAML D:\\En_code\\Efinix\\2020\\T120F324\\soc_ruby\\soc_ruby_sw\\cpu0.yaml”
-f “D:/En_code/Efinix/2020/T120F324//soc_ruby/soc_ruby_sw/bsp/soc_Ruby_sw/efinix/EfxRubySoc/openocd/debug.cfg”

4.Commands 选项框里输入调试命令:
set mem inaccessible-by-default off
set arch riscv:rv32
set remotetimeout 250


c. Debugging
单击Resume 按钮或按F8继续代码操作,现象是开发板所有LED灯连续一致地闪烁。
单击单步执行(F6)对一条源指令执行单步执行;单击单步执行(F5)进入下一个调用的函数;
单击Step Return(F7)执行当前函数的单步操作;单击“寄存器”选项卡以检查处理器的寄存器;
单击内存选项卡以检查内存内容;单击“挂起”按钮停止代码操作;
完成调试后,单击“终止”断开OpenOCD调试器的连接。

四、OpenOcd烧录固化

1. 打开一个cmd窗口1,切换到要烧写的bin文件目录下;

2.键入以下代码

openocd.exe  -f bsp\efinix\EfxRubySoc\openocd\ftdi.cfg-c "set CPU0_YAML cpu0.yaml"-f bsp\efinix\EfxRubySoc\openocd\flash.cfg

实际路径根据自己的项目修改, 会打印如下信息

备注:openocd是编译器 ,需要把opened. exe放到windows system32目录下,否则会报错找不到openocd路径。

3. 再打开一个新的CMD窗口2,打开4444本地主机端口 ,键入以下命令;

telnet localhost 4444

会出现如下对话框:

备注:如果本地telnet没有打开,会报错,自行百度打开。

4. 烧写用户自定义bin文件,键入以下命令

flash write_image erase unlock <filename>.bin 0x380000

例如

flash write_image erase unlock EfxAxi4Example.bin 0x380000

打印如下信息即烧录成功:

5. 此时即可关闭CMD窗口2 ;切回CMD窗口1,按下 Ctrl+C 关闭提示openocd;板子板子再次上电即可检验是否固话成功。

五、Efinity烧录固化

1.将eclipse编译完生成的.bin文件放在运行bin2hex.py文件文件夹目录下,根据readme提示修改file.py文件后,然后生成对应的hex文件:

2.使用Efinity的programmer工具的combine multi image files 功能,合并FPGA程序和软件程序,并可以在Flash address处自定义烧写的flash地址:

3.烧写完成以后Programmer会提示校验错误,这是因为转换以后的hex文件并不是真正的FPGA bitstream,可以忽略掉这个错误提示。

五、总结

以上就是RiscV环境搭建的全过程,环境是比较复杂,在实操的过程中经常会出现因为路径不对,大小写命名错误,设备选择不对出现的错误,甚至有因为电脑性能不够而跑崩的情况,可以参考ug和ds手册来进行判断。
针对会出现的错误我也会更新出来的。

此链接4个视频详细介绍了调试riscv内核的流程 https://pan.baidu.com/s/1ePDWgaDgZ7wGmUFD2UNCkA 提取码:nihh


基于易灵思开发板RiscV的调试流程相关推荐

  1. 基于STM32战舰开发板的USMART调试组件的使用

    基于STM32战舰开发板的USMART调试组件的使用 USMART调试组件是什么? USMART是正点原子团队为其STM32开发平台开发的一种类似linux的shell的调试工具.具体工作过程是通过串 ...

  2. 基于ShineBlink物联网开发板和机智云平台开发的“针对短期内宠物无人照顾的智能宠物屋”系统

    正式介绍作品前先说明一下,我是湖南文理学院计算机与电气工程学院的一名大三学生,我叫陈海涛.作品全部内容均为个人创意.个人设计并手工制作,后期会考虑写论文投期刊,So!!严禁抄袭!抄袭必究! 该作品是用 ...

  3. imx6u开发板导入实际应用(一)熟悉开发板,建立调试环境

    硬件基于正点原子Alpha-linux开发板,功能齐备,外设丰富,资料详尽,入门或者系统训练还是挺合适的.价格稍贵,不过用来作为第一套应用入手还是不错,后续实际项目可以参考裁剪,比如偏现场控制,比如偏 ...

  4. 基于全志A33开发板linux系统移植学习记录(Boot0)

    基于全志A33开发板linux系统移植学习记录 第一章 Boot0基于ARMGCC的编译与修改 文章目录 基于全志A33开发板linux系统移植学习记录 前言 一.全志A33简介以及上电引导流程 二. ...

  5. 织女星开发板RISC-V内核实现微秒级精确延时

    文章目录 前言 关于LPIT0 ZERO核的SysTick定时器 delay.c文件 delay.h文件 实际验证 驱动IIC接口OLED 总结 参考资料 历史精选 前言 收到VEGA织女星开发板也有 ...

  6. 基于stm32物联网开发板(3)--SYN6288语音模块

    基于stm32物联网开发板(3)–SYN6288语音模块 1.SYN6288语音模块展示示例 SYN6288语音模块 2.概述   SYN6288-A语音合成模块是一款性价比更高,效果更自然的一款中高 ...

  7. 基于Arduino Uno开发板的红外遥控开发

    基于Arduino Uno开发板的红外遥控开发 1 准备 1.1 硬件与软件 1.2 走线 2 代码 2.1 ReceiveDump 2.2 SendRawDemo 1 准备 1.1 硬件与软件 单片 ...

  8. Arduino开发(二)_基于Arduino UNO开发板的RGB灯光控制方法

    Arduino开发(二)_基于Arduino UNO开发板的RGB灯光控制方法 首先,我们来看一下Arduino UNO开发板的具体引脚排列,如下图所示, 再了解一下三色RGB LED模块,如下图所示 ...

  9. 基于NNEWN NSR3588开发板Android12系统实现四屏异显

    基于NNEWN NSR3588开发板Android12系统实现四屏异显 RK3588四屏异显功能实现介绍 1.硬件连接 2.内核dts配置 3.Android异显示方案 4.四屏异显测试APK及效果演 ...

最新文章

  1. 7-31 字符串循环左移 (C语言)
  2. 使用common-fileUpload制作文件上传【转】
  3. python数组排序(递归实现)
  4. Django + Uwsgi + Nginx 的生产环境部署
  5. PP生产订单的BADI增强 WORKORDER_UPDATE
  6. Citrix Netscaler负载均衡算法
  7. [XSS神器]XssEncode chrome插件 - 0x_Jin
  8. 细数 Spring 那些最常见的面试问题
  9. [Mac] php安装protobuf扩展
  10. Json字符串和Java对象互相转换
  11. C语言的这些事情有关内存
  12. 如何在matlab中打开图片
  13. 最全的国内外电子书籍网站合集
  14. Java游戏外挂基础
  15. 如何用ps抠出完美火焰?
  16. Python数据结构:哈希表
  17. 监控突然显示服务器故障,网络监控出现服务器故障怎么办
  18. html跑车模板,html5代码画兰博基尼跑车,6不6?
  19. win10平板模式_win10电脑投屏到手机
  20. 深度学习的loss变小梯度是否变小

热门文章

  1. 浏览器端大屏百度地图常用控件 3D/2D 测距 地图风格 卫星地图 路况...
  2. 揭开电脑上登录多个微信的秘密
  3. 钟汉良日记:网络也是江湖,有恩怨情仇有利益纠葛
  4. 从双倍数组中还原原数组
  5. Postman如何携带token——Bearer Token和Headers
  6. php session_id 生成规则,php中Session的生成机制、回收机制和存储机制探究
  7. 司马懿:我花开后百花杀
  8. 保守形态抗锯齿 (CMAA) - 2014 年 3 月更新
  9. 对MySQL查询结果进行替换
  10. 普元 AppServer在window2019中无法启动server,也没有报错信息