蜂鳥FPGA開發板全知道篇2:快速上手介紹(下)

2021-02-23 矽農亞歷山大

本系列主要就蜂鳥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配置文件

在中文書籍《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目錄文件夾,假設該目錄為<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,然後按照如下步驟解壓使用(注意: 上述連結網盤上的工具鏈可能會不斷更新,用戶請注意自行判斷使用最新日期的版本,下列步驟僅為特定版本的示例)。

 

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 <your_sdk_dir>

          // 進入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 <your_sdk_dir>

          // 再次進入到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 <your_sdk_dir>

          // 進入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 <your_sdk_dir>

          // 進入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 使用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開發板全知道篇2:快速上手介紹(中)》

更多信息

本文編輯by 新晉矽農胖夏

感興趣的讀者可以通過下面二維碼關注公眾號「矽農亞歷山大」,了解Verilog、IC設計、CPU、RISC-V和人工智慧AI相關的更多設計技巧和經驗分享,注意:由於乾貨太多,請自備茶水。

相關焦點

  • 蜂鳥FPGA開發板全知道篇2:快速上手介紹(上)
    本系列主要就蜂鳥FPGA開發板及蜂鳥JTAG下載器進行講解說明,其中包括:蜂鳥FPGA開發板全知道篇1:開源內核簡介
  • 《蜂鳥FPGA開發板全知道篇3: 開源SoC簡介(3)》
    本系列主要就蜂鳥FPGA開發板及蜂鳥JTAG下載器進行講解說明,其中包括:蜂鳥FPGA開發板全知道篇1:開源內核簡介
  • 開源FPGA開發板-OpenICE 介紹及抽獎
    每個開發版對比如下:表格來源:https://www.crowdsupply.com/1bitsquared/icebreaker-fpgaiCEBreakerTinyFPGA BXTomu FPGALattice ICEstickUPDuino v2.0ICE40UP5K Breakout
  • 新手必看 | RVB2601開發板快速上手指南
    之前我們推送了RISC-V應用創新大賽 | 一文詳解RVB2601套件 助你快速上手贏比賽,讓大家全面的了解的RVB2601套件的軟硬體情況及開發工具,幫助參賽的同學快速上手。今天我們為大家詳細介紹RVB2601開發板快速上手教程指南,從硬體參數,驅動安裝,程序運行等方面幫助大家快速深入了解RVB2601開發板。關於RVB2601更詳細的資料可登錄OCC查看。
  • 使用Arduino玩轉FPGA——原來FPGA可以如此簡單
    那麼既想在FPGA裡面靈活地設計底層電路,又希望像Arduino一樣快速地開發應用程式,魚與熊掌,可否兼得呢?我們知道在MCU(Microcontroller Unit)中運行的是CPU硬核,比如Intel的8051核,ARM的Cortex-M核,Arduino板上用的AVR核等,各大半導體廠商在CPU Core的基礎上集成了各種各樣的外設模塊,以適用於不同的應用需求。
  • 2020年FPGA開發板詳盡選型指南
    如果你還在為FPGA開發板選型而左右為難,這篇文章將帶給你一個清晰明確的選型指南!傳統FPGA還是SoC FPGA?Digilent的這篇文章https://blog.digilentinc.com/how-to-program-your-fpga-there-are-four-ways/就解釋了所有這4種下載方式的細節。
  • 學習FPGA,如何正確挑選第一塊FPGA開發板
    無論是以數字電路邏輯,計算機組成原理/體系結構為代表的課程教學;亦或是各類大學生電子設計與雙創競賽的參與;還是當今 AI 時代產業巨大的產業應用需求,FPGA已成為時下EECS圈內公認的必get√傍身技能。今兒的話題,就聊聊初入門者如何正確的挑選第一塊FPGA開發板...
  • SoC FPGA 開發和調試筆記 第一篇:閒言碎語話家常
    如今,2年時間快要過去了,隨著開發和學習的深入,很多之前書中沒有寫到,或者寫的不太詳細的地方也逐漸凸顯出來。從2018年7月AC501-SoC開發板開售,到今年4月份停產,時間也是差不多2個月,期間共售出該開發板310套左右。這是一個比較糟糕的成績,但是我依然認為這份經歷非常的值得。
  • 匯總了25個FPGA開源網站和前10大FPGA論壇
    Activity is centered around the opencores website This websiteis a community portal for professionals, amateurs, and enthusiasts interestedin the field of digital design engineering.
  • Windows 下 iCE40 FPGA 開源開發環境配置
    筆者在 D 盤創建了一個文件夾 OpeniCE,並將下載的文件解壓到此目錄,然後進入到 fpga-toolchain\bin\ 子目錄下:)、支持 ECP5 FPGA 的 Project Trellis(https://github.com/SymbiFlow/prjtrellis) 套件等等,此處不做深入介紹。
  • 對蜂鳥的相關介紹
    蜂鳥是美洲原產的鳥類,構成了蜂鳥科的生物科。它們是最小的鳥類之一,大多數物種的長度為7.5-13釐米(3-5英寸)。事實上,現存最小的鳥類是一隻蜂鳥,5釐米(2.0英寸)的蜜蜂蜂鳥體重不到2.0克。它們被稱為蜂鳥,因為它們的毆打翅膀產生的嗡嗡聲在高頻下可以聽到人類聽到的聲音。
  • 預熱 | 萬眾期待的單片機、Linux二合一的STM32MP157開發板亮相
    100ask_stm32mp157_pro用戶手冊目錄第一篇 前言及資料下載    第一章 這個文檔裡為什麼有那麼多開發板    第二章 建議不再從裸機開始學習Linux    第三章 資源下載方法    第四章 初學者快速指南第二篇 100ASK_STM32MP157_pro開發板使用手冊    第一章 資料下載、學習內容    第二章
  • 100ASK-AM335X開發板介紹
    一是想小範圍的看看大家的反響,我們也好改進產品,開發板上架後,已第一時間在老客戶群, 朋友圈公布,一周過去了,我覺得是時候在公眾號公布了,二是隨著開發板上架,我們都更忙了,已無多餘精力更新公眾號,每天回復完旺旺的問題已精疲力竭,所以最近更新比較少。
  • 軟路由快速上手——方案介紹
    或者換個角度來看,不知道是否有某項需求,說明沒有這項需求,把自己能想到的要求羅列出來,能滿足這個需求的路由器就是合適的路由器,夠用就行。    針對愛折騰的玩家、有一些高級需求的玩家、甚至企業用戶,無疑對功能的要求更多。相比硬體路由的arm soc方案,x86軟路由作為一種高性能、低成本、功能豐富的方案,優勢非常明顯。
  • 正點原子嵌入式Linux開發板評測報告
    2. EMMC版本:商業級512MB DDR3L內存和8GB EMMC。NAND版本和EMMC版本的MPU都是一樣的,但考慮到初學者的學習環境和存儲資源配置,建議初學者選用EMMC版本進行學習。開發板通過排線連接正點原子的RGB系列LCD,目前支持4.3寸標清/高清和7寸標清/高清RGB-LCD顯示屏。
  • 5款超強大的FPGA開發板
    本文將給大家介紹5款強大到不可思議的FPGA開發板,當然價格也是高的離譜,肯能對於大多數工程師來說,這些屬於求而不得的高端「玩具」。該開發板採用RT4G150器件,採用陶瓷封裝,提供150,000個邏輯元件,具有1,657個引腳,下圖是RTG4-DEV-KIT開發板的外設接口功能圖。
  • PRA006/PRA010 開發板,Quartus Altera JTAG 配置,以及常見...
    Improper operation may damage the development board. This manual is constantly updated, and it is recommended that you download the latest version when using.本手冊版權歸屬 Fraser Innovation Inc.
  • 5塊錢的ZYNQ開發板
    國外論壇裡經常有帖子爆出在中國X寶上購買FPGA開發板有多便宜,回復也是五花八門,非常歡樂。
  • Arduino入門2: 熟悉和挑選Arduino的開發板
    在上一篇《Arduino入門1: Arduino的前世今生》中腦叔簡單地介紹了一下Arduino的背景歷史和現狀。
  • 帶你玩轉這顆強大的SoC FPGA—創龍TLZ7x-EasyEVM開發板評測(硬體篇)
    今天要要帶來的是一塊比較高級些的工業級FPGA板卡,創龍的TLZ7x-EasyEVM開發板,TLZ7x-EasyEVM開發板採用Xilinx Zynq-7000 SoC高性能低功耗處理器,集成PS端(單核或雙核Cortex-A9 ARM)+ PL端(Artix-7 架構可編程邏輯資源)。