全部 行业新闻 技术前沿 新品发布

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

tikitaka
发表于 2020-05-08 19:20:33

本系列主要就蜂鸟FPGA开发板及蜂鸟JTAG下载器进行讲解说明,其中包括:


蜂鸟FPGA开发板全知道篇1:开源内核简介

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

蜂鸟FPGA开发板全知道篇3:  开源SoC简介

蜂鸟FPGA开发板全知道篇4:  移植RTOS


本篇《蜂鸟FPGA开发板全知道篇2:快速上手介绍》将会分为:


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

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

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


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

目录

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)的代码结构如下:

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

  • 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环境中,使用如下命令:

    

git clone https://github.com/SI-RISCV/hbird-e-sdk

          // 经过此步骤将项目克隆下来,本机上即可具有如前文所述完整的hbird-e-sdk目录文件夹,假设该目录为,后文将使用该缩写指代。

    

// 步骤三:由于编译软件程序需要使用到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,然后按照如下步骤解压使用(注意: 上述链接网盘上的工具链可能会不断更新,用户请注意自行判断使用最新日期的版本,下列步骤仅为特定版本的示例)。

 

cp gnu-mcu-eclipse-riscv-none-gcc-7.2.0-2-20180111-2230-centos64.tgz~/

cp gnu-mcu-eclipse-openocd-0.10.0-6-20180112-1448-centos64.tgz~/

          //将两个压缩包均拷贝到用户的根目录下cd ~/tar -xzvf gnu-mcu-eclipse-riscv-none-gcc-7.2.0-2-20180111-2230-centos64.tgz

tar –xzvf gnu-mcu-eclipse-openocd-0.10.0-6-20180112-1448-centos64.tgz

     // 进入根目录并解压上述两个压缩包,解压后可以看到一个生成的gnu-mcu-eclipse文件夹

 

cd

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


mkdir -p work/build/openocd/prefix

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


cd work/build/openocd/prefix

          // 进入到prefix该目录。


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

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

 

cd

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


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

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


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

          // 进入到prefix该目录。

 

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

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

该prefix目录下。

 

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

 

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

 

// 步骤五:编译demo_gpio示例程序,使用如下命令:

         

cd

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

 

make dasm PROGRAM=demo_gpioNANO_PFLOAT=0

//注意:由于Demo_GPIO程序的printf函数不需要输出浮点数,上述选项NANO_PFLOAT=0指明newlib-nano的printf函数无需支持浮点数,请参见《RISC-V架构与嵌入式开发快速入门》第11章了解相关信息。

     //注意:此处没有指定Makefile中的DOWNLOAD选项,则默认采用“将程序从Flash上载至ITCM进行执行的方式”进行编译,请参见《RISC-V架构与嵌入式开发快速入门》第11章了解相关信息。

 

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

 

cd

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

         

make upload  PROGRAM=demo_gpio

 

// 步骤七:在FPGA原型平台上运行demo_gpio程序:

          // 由于demo_gpio示例程序将通过UART打印一个字符串到主机PC的显示屏上。因此需要先将串口显示终端准备好,打开另外一个Ubuntu的命令行终端,使用如下命令。

sudo screen /dev/ttyUSB1115200

          // 该命令将设备ttyUSB1设置为串口显示的来源,波特率为115200。

          // 若该命令执行成功的话,Ubuntu的该命令行终端将被锁定,用于显示串口发送的字符。

          // 若该命令无法执行成功,请确保已按照第3.3节中所述方法将USB的权限设置正确。

          // 将主机PC的串口显示终端准备好之后,则仅需按FPGA原型开发板上的RESET按键即可。

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

 

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


4.3 使用GDBOpenOCD调试示例程序

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命令介绍以及如何GDBOpenOCD对蜂鸟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开发板全知道篇2:快速上手介绍(中)》

更多信息

本文编辑by 新晋硅农胖夏

感兴趣的读者可以通过下面二维码关注公众号“硅农亚历山大”,了解Verilog、IC设计、CPU、RISC-V和人工智能AI相关的更多设计技巧和经验分享,注意:由于干货太多,请自备茶水。

254 0

你的回应

关注我们

微信扫码登录 点击刷新二维码