查看: 1360|回复: 0
收起左侧

蜂鸟FPGA开发板全知道篇2:快速上手介绍(下)

[复制链接]

  离线 

  • TA的每日心情
    奋斗
    2021-3-3 12:32
  • 签到天数: 10 天

    [LV.3]

    发表于 2020-10-16 23:51:32 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 皋陶 于 2020-10-16 23:51 编辑




    目录
    1  运行Verilog仿真测试

    1.1      E203开源项目的代码层次结构

    1.2    E203开源项目的测试用例(Self-Check TestCase)

    1.2.1    riscv-tests自测试用例

    1.2.2   编译ISA自测试用例

    1.3      E203开源项目的测试平台(TestBench)

    1.4      在Verilog TestBench中运行测试用例

    2  蜂鸟E203开源SoC
    3  搭建FPGA原型平台

    3.1      FPGA开发板和项目介绍

    3.2      生成mcs文件烧写FPGA

    3.3      JTAG调试器

    3.4      FPGA原型平台DIY总结

    4    运行和调试软件示例

    4.1      HBird-E-SDK简介

    4.1.1    HBird-E-SDK代码结构

    4.2      使用HBird-E-SDK开发和运行示例程序

    4.3      使用GDB和OpenOCD调试示例程序

    5     运行更多示例程序和Benchmarks
    6     移植和运行FreeRTOS
    7     Windows IDE开发工具


    4  运行和调试软件示例

    本章将介绍如何使用烧录后的FPGA原型平台运行真正的软件示例。


    4.1 HBird-E-SDK简介

    为了让用户能够轻松的使用起蜂鸟E203内核开发软件,E203开源项目也配套了一个软件开发套件(Software Development Kit,SDK)。为了方便用户理解,本文将此SDK称之为“HBird-E-SDK”。


    蜂鸟E203专门维护一个独立的Github仓库(https://github.com/SI-RISCV/hbird-e-sdk)作为管理和维护HBird-E-SDK,并且在中文书籍《RISC-V架构与嵌入式开发入门指南》的第11章中进行了深入浅出的系统讲解。感兴趣的用户可以自行搜索此书。


    HBird-E-SDK并不是一个软件,它本质上是由一些Makefile、板级支持包(Board Support Package,BSP)、脚本和软件示例组成的一套开发环境。HBird-E-SDK基于Linux平台,使用标准的RISC-V GNU工具链对程序进行编译,使用OpenOCD+GDB将程序下载到硬件平台中并进行调试。HBird-E-SDK主要包含如下两个方面的内容:


    (1)板级支持包(Board Support Package,BSP)。
    (2)若干软件示例。

    4.1.1   HBird-E-SDK代码结构

    HBird-E-SDK平台(https://github.com/SI-RISCV/hbird-e-sdk)的代码结构如下:


    国内芯片技术交流-蜂鸟FPGA开发板全知道篇2:快速上手介绍(下)risc-v单片机中文社区(1)

    各个主要的目录简述如下。


    • software目录主要用于存放软件示例,包括基本的hello_world示例、demo_gpio示例、demo_iasm示例、dhrystone跑分程序、CoreMark跑分程序和FreeRTOS示例程序。每个示例均有单独的文件夹,包含了各自的源代码、Makefile和编译选项(在Makefile中指定)等。



    • bsp/hbird-e200/drivers目录主要用于存放驱动程序代码,譬如PLIC模块的底层驱动函数和代码。



    • bsp/hbird-e200/include目录主要用于存放包含SoC中外设模块的寄存器地址等参数的头文件。



    • bsp/hbird-e200/stubs目录主要用于存放一些移植Newlib所需的底层桩函数的具体实现。



    • bsp/hbird-e200/env目录主要用于存放一些基本的支持性文件,简述如下:


    board.h:定义了开发板上管脚或者按键相关的宏定义。

    platform.h:定义了SoC平台相关的宏定义。

    common.mk:调用GCC进行编译的Makefile脚本,也会指定编译相关的选项。

    encoding.h:存放编码和常数的宏定义。

    entry.S:异常和中断入口函数。

    init.c:系统上电初始化函数。

    link_flash.lds:将程序存放在Flash中,上电后上载至ITCM中进行执行的链接脚本。

    link_flashxip.lds:将程序存放在Flash中直接进行执行的链接脚本。

    openocd_hbird.cfg:使用蜂鸟JTAG调试器的OpenOCD配置文件


    • start.S:系统上电启动的引导程序。

    在中文书籍《RISC-V架构与嵌入式开发入门指南》第11章中对HBird-E-SDK进行了深入浅出的系统讲解。感兴趣的用户可以自行搜索此书。


    4.2使用HBird-E-SDK开发和运行示例程序

    E203开源项目提供一个典型的示例程序demo_gpio可运行于前文中介绍的FPGA开发板上(烧写了蜂鸟E203开源SoC),使用HBird-E-SDK平台按照如下步骤可以运行。


    // 步骤一:准备好自己的电脑环境,可以在公司的服务器环境中运行,如果是个人用户,推荐如下配置:
              (1)使用VMware虚拟机在个人电脑上安装虚拟的Linux操作系统。
              (2)由于Linux操作系统的版本众多,推荐使用Ubuntu16.04版本的Linux操作系统有关如何安装VMware以及Ubuntu操作系统本文不做介绍,有关Linux的基本使用本文也不做介绍,请用户自行查阅资料学习。
      
    // 步骤二:将HBird-E-SDK项目下载到本机Linux环境中,使用如下命令:
    1. git clone https://github.com/SI-RISCV/hbird-e-sdk
    2.           // 经过此步骤将项目克隆下来,本机上即可具有如前文所述完整的hbird-e-sdk目录文件夹,假设该目录为<your_sdk_dir>,后文将使用该缩写指代。
    复制代码

       
    // 步骤三:由于编译软件程序需要使用到GNU工具链,假设使用完整的riscv-tools来自己编译GNU工具链则费时费力,因此本文档推荐使用预先已经编译好的GCC工具链。我们已经将工具链上传至网盘,网盘具体地址记载于hbird-e-sdk项目(https://github.com/SI-RISCV/hbird-e-sdk)的prebuilt_tools目录下的README中,用户可以在网盘中的“RISC-VSoftware Tools/RISC-V_GCC_201801_Linux”目录下载压缩包gnu-mcu-eclipse-riscv-none-gcc-7.2.0-2-20180111-2230-centos64.tgz和gnu-mcu-eclipse-openocd-0.10.0-6-20180112-1448-centos64.tgz,然后按照如下步骤解压使用(注意: 上述链接网盘上的工具链可能会不断更新,用户请注意自行判断使用最新日期的版本,下列步骤仅为特定版本的示例)。

    1. cp gnu-mcu-eclipse-riscv-none-gcc-7.2.0-2-20180111-2230-centos64.tgz~/
    2. cp gnu-mcu-eclipse-openocd-0.10.0-6-20180112-1448-centos64.tgz~/
    3.           //将两个压缩包均拷贝到用户的根目录下cd ~/tar -xzvf gnu-mcu-eclipse-riscv-none-gcc-7.2.0-2-20180111-2230-centos64.tgz
    4. tar –xzvf gnu-mcu-eclipse-openocd-0.10.0-6-20180112-1448-centos64.tgz
    5.      // 进入根目录并解压上述两个压缩包,解压后可以看到一个生成的gnu-mcu-eclipse文件夹。

    6. cd <your_sdk_dir>

    7.           // 进入hbird-e-sdk目录文件夹。



    8. mkdir -p work/build/openocd/prefix

    9.           // 在hbird-e-sdk目录下创建上述这个prefix目录。



    10. cd work/build/openocd/prefix

    11.           // 进入到prefix该目录。



    12. ln –s ~/gnu-mcu-eclipse/openocd/0.10.0-6-20180112-1448/binbin

    13.           // 将用户根目录下解压的OpenOCD目录下的bin目录作为软链接链接到该prefix目录下。


    14. cd <your_sdk_dir>

    15.           // 再次进入到hbird-e-sdk目录文件夹。



    16. mkdir -p work/build/riscv-gnu-toolchain/riscv32-unknown-elf/prefix/

    17.           // 在hbird-e-sdk目录下创建上述这个prefix目录。



    18. cd work/build/riscv-gnu-toolchain/riscv32-unknown-elf/prefix

    19.           // 进入到prefix该目录。


    20. ln -s ~/gnu-mcu-eclipse/riscv-none-gcc/7.2.0-2-20180111-2230/binbin

    21.           // 将用户根目录下解压的GNU Toolchain目录下的bin目录作为软链接链接到

    22. 该prefix目录下。


    23. 注意:此步骤完成工具链的安装之后,后续开发程序示例无需重复执行此步骤。
    复制代码

    // 步骤四:按照第4章中所述方法,准备好蜂鸟E203专用FPGA开发板,并将bitstream文件或者mcs文件烧录至FPGA中待命,且用JTAG调试器将FPGA开发板与主机PC连接,并确保JTAG调试器的USB接口被虚拟机Linux系统正确识别。

    // 步骤五:编译demo_gpio示例程序,使用如下命令:
    1. cd <your_sdk_dir>

    2.           // 进入hbird-e-sdk目录文件夹。

    3. make dasm PROGRAM=demo_gpioNANO_PFLOAT=0
    4. //注意:由于Demo_GPIO程序的printf函数不需要输出浮点数,上述选项NANO_PFLOAT=0指明newlib-nano的printf函数无需支持浮点数,请参见《RISC-V架构与嵌入式开发快速入门》第11章了解相关信息。
    5.      //注意:此处没有指定Makefile中的DOWNLOAD选项,则默认采用“将程序从Flash上载至ITCM进行执行的方式”进行编译,请参见《RISC-V架构与嵌入式开发快速入门》第11章了解相关信息。
    复制代码

         

    // 步骤六:将编译好的demo_gpio程序下载至FPGA原型开发板中,使用如下命令:

    1. cd <your_sdk_dir>

    2.           // 进入hbird-e-sdk目录文件夹。

    3.          
    4. make upload  PROGRAM=demo_gpio
    复制代码

    // 步骤七:在FPGA原型平台上运行demo_gpio程序:
    1.           // 由于demo_gpio示例程序将通过UART打印一个字符串到主机PC的显示屏上。因此需要先将串口显示终端准备好,打开另外一个Ubuntu的命令行终端,使用如下命令。
    2. sudo screen /dev/ttyUSB1115200
    3.           // 该命令将设备ttyUSB1设置为串口显示的来源,波特率为115200。
    4.           // 若该命令执行成功的话,Ubuntu的该命令行终端将被锁定,用于显示串口发送的字符。
    5.           // 若该命令无法执行成功,请确保已按照第3.3节中所述方法将USB的权限设置正确。
    6.           // 将主机PC的串口显示终端准备好之后,则仅需按FPGA原型开发板上的RESET按键即可。
    复制代码

    按FPGA开发板上的RESET按键,则处理器复位开始执行demo_gpio程序,并将Log字符打印至主机PC的串口显示终端上,如图4-1所示。然后用户可以输入任意字符(譬如字母y),程序继续运行,开发板上将会以固定频率进行闪灯。

    国内芯片技术交流-蜂鸟FPGA开发板全知道篇2:快速上手介绍(下)risc-v单片机中文社区(2)

    图4-1  运行Demo_GPIO示例后于主机串口终端上显示信息


    4.3 使用GDB和OpenOCD调试示例程序

    GDB(GNU Project Debugger),是GNU工具链中的调试软件。GDB是一款应用非常广泛的调试工具,能够用于调试C、C++、Ada等等各种语言编写的程序,它提供如下功能:


    • 下载或者启动程序;



    • 通过设定各种特定条件来停止程序;



    • 查看处理器的运行状态,包括通用寄存器的值,内存地址的值等;



    • 查看程序的状态,包括变量的值,函数的状态等;



    • 改变处理器的运行状态,包括通用寄存器的值,内存地址的值等;



    • 改变程序的状态,包括变量的值,函数的状态等。



    GDB可以用于在主机PC的Linux系统中调试运行的程序,同时也能用于调试嵌入式硬件,在嵌入式硬件的环境中,由于资源有限,一般的嵌入式目标硬件上无法直接构建GDB的调试环境(譬如显示屏和Linux系统等),这时可以通过GDB+GdbServer的方式进行远程(remote)调试,通常而言GdbServer在目标硬件上运行,而GDB则在主机PC上运行。

    为了能够支持GDB对其进行调试,蜂鸟E203使用OpenOCD作为其GdbServer与GDB进行配合。OpenOCD( Open On-Chip Debugger )是一款开源的免费调试软件,由社区共同维护,由于其开放开源的特点,众多的公司和个人使用其作为调试软件,支持大多数主流的MCU和硬件开发板。

    为了能够完全支持GDB的功能,在使用GCC对源代码进行编译的时候,需要使用-g选项,例如:gcc -g -o hello hello.c 。该选项会将调试所需信息加入编译所得的可执行程序中,因此该选项会增大可执行程序的大小,因此在正式发布的版本中通常不使用该选项。

    GDB虽然可以使用一些前端工具实现图形化界面,但是更常见的是使用命令行直接对其进行操作。常用的GDB命令介绍以及如何GDB和OpenOCD对蜂鸟E203内核进行调试的详细步骤,请参见中文书籍《RISC-V架构与嵌入式开发快速入门》第11章了解详细信息。

    5  运行更多示例程序和Benchmarks
    衡量处理器的一个重要指标便是功耗,另外一个重要指标便是性能。而对于处理器性能的评估,需要依赖跑分程序(Benchmarks)来完成。

    在处理器领域的Benchmarks非常众多,有某些个人开发的程序,也有某些标准组织,或者商业公司开发的Benchmarks,本文在此不加以一一枚举。在嵌入式处理器领域最为知名和常见的Benchmarks为Dhrystone和CoreMark。

    Dhrystone和CoreMark和更多其他的示例程序的详细介绍,以及如何在HBird-E-SDK平台运行的详细步骤,请参见中文书籍《RISC-V架构与嵌入式开发快速入门》第12章了解详细信息。

    6  移植和运行FreeRTOS
    FreeRTOS是著名的开源实时操作系统(RTOS),FreeRTOS完全免费,具有源码公开、可移植、可裁剪、任务调度灵活等特点,可以方便地移植到各种MCU上运行。

    有关FreeRTOS的详细介绍,以及如何在HBird-E-SDK平台运行的详细步骤,请参见《蜂鸟E203移植FreeRTOS》(请持续关注公众号,后续即将发布)。

    7  WindowsIDE开发工具
    一款高效易用的集成开发环境(Integrated DevelopmentEnvironment,IDE)对于任何MCU都显得非常重要,软件开发人员需要借助IDE进行实际的项目开发与调试。

    ARM架构的MCU目前占据了很大的市场份额,ARM的商业IDE软件Keil也非常深入人心,很多嵌入式软件工程师均对其非常熟悉是商业IDE软件(譬如Keil)存在着授权以及收费的问题,各大MCU厂商也会推出自己的免费IDE供用户使用,譬如瑞萨的e2studio和NXP的LPCXpresso等,这些IDE均是基于开源的Eclipse框架,Eclipse几乎成了开源免费MCU IDE的主流选择。

    Eclipse平台采用开放式源代码模式运作,并提供公共许可证(提供免费源代码)以及全球发布权利。Eclipse本身只是一个框架平台,除了Eclipse平台的运行时内核之外,其所有功能均位于不同的插件中。开发人员既可通过Eclipse项目的不同插件来扩展平台功能,也可利用其他开发人员提供的插件。一个插件可以插入另一个插件,从而实现最大程度的集成。

    Eclipse IDE平台具备以下几方面的优势:


    • 社区规模大


    Eclipse自2001年推出以来,已形成大规模社区,这为设计人员提供了许多资源,包括图书、教程和网站等,以帮助他们利用Eclipse平台与工具提高工作效率。Eclipse平台和相关项目、插件等都能直接从eclipse.org网站下载获得。

    • 持续改进


    Eclipse的开放式源代码平台帮助开发人员持续充分发挥大规模资源的优势。Eclipse在以下多个项目上不断改进。

    ·    平台项目——侧重于Eclipse本身。
    ·    CDT项目——侧重于C/C++语言开发工具。
    ·    PDE项目——侧重于插件开发环境。

    • 源码开源

    设计人员始终能获得源代码,总能修正工具的错误,它能帮助设计人员节省时间,自主控制开发工作。

    • 兼容性


    Eclipse平台采用Java语言编写,可在Windows与Linux等多种开发工作站上使用。开放式源代码工具支持多种语言、多种平台以及多种厂商环境。

    • 可扩展性


    Eclipse采用开放式、可扩展架构,它能够与ClearCase、SlickEdit、RationalRose以及其他统一建模语言(UML)套件等第三方扩展协同工作。此外,它还能与各种图形用户接口(GUI)编辑器协同工作,并支持各种插件。

       请参见《RISC-V架构与嵌入式开发快速入门》书籍第13章,其中详细介绍了如何使用基于MCU Eclipse IDE的Windows开发调试环境对蜂鸟E203内核进行软件开发和调试。

    文章回顾
    此篇为《蜂鸟FPGA开发板全知道篇2:快速上手介绍(下)》。






    上一篇:蜂鸟FPGA开发板全知道篇2:快速上手介绍(中)
    下一篇:蜂鸟FPGA开发板全知道篇3: 开源SoC简介(1)
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-4-20 13:01 , Processed in 0.691537 second(s), 48 queries .

    快速回复 返回顶部 返回列表