雷思磊,薛正
(酒泉衛(wèi)星發(fā)射中心,酒泉 735000)
開源片上系統(tǒng)Freedom E310調(diào)試方法研究
雷思磊,薛正
(酒泉衛(wèi)星發(fā)射中心,酒泉 735000)
Freedom E310是第一款基于RISC-V指令集架構(gòu)的開源商業(yè)片上系統(tǒng),可以依據(jù)具體應(yīng)用場景對其進(jìn)行深度定制,在對Freedom E310及其Debug單元簡單介紹的基礎(chǔ)上,設(shè)計(jì)通過OpenOCD、J-Link建立Freedom E310調(diào)試環(huán)境,并進(jìn)行了實(shí)際測試。
RISC-V;Freedom E310;JTAG
伯克利大學(xué)于2014年發(fā)布了開源指令集架構(gòu)RISC-V,其目標(biāo)是成為指令集架構(gòu)領(lǐng)域的Linux,應(yīng)用覆蓋IoT(Internet of Things)設(shè)備、桌面計(jì)算機(jī)、高性能計(jì)算機(jī)等眾多領(lǐng)域[1]。RISC-V自發(fā)布以來受到多方關(guān)注與參與,圍繞RISC-V的生態(tài)環(huán)境逐漸完善,并涌現(xiàn)了眾多開源處理器及SoC(System on Chip),其采用RISC-V架構(gòu),其中Rocket-Chip就是由伯克利大學(xué)發(fā)布的基于RISC-V的可配置SoC,通過配置不同的參數(shù)可以得到不同性能、應(yīng)用不同場合的SoC。RISC-V的迅速發(fā)展還激勵(lì)其設(shè)計(jì)人員成立了SiFive公司,專注于定制化SoC設(shè)計(jì),其產(chǎn)品線如下:
① 開源處理器核Coreplex IP系列。包括Coreplex U、Coreplex E兩個(gè)系列。其中Coreplex U系列目前有U5 Coreplex子系列,其是64位RISC-V架構(gòu)處理器,支持多核、多級緩存、硬件支持的單精度與雙精度浮點(diǎn)運(yùn)算;Coreplex E系列目前有E3 Coreplex子系列,其是32位的RISC-V架構(gòu)處理器,依據(jù)應(yīng)用環(huán)境可配置支持RV32E、乘法、除法、浮點(diǎn)運(yùn)算等,目標(biāo)是低功耗的嵌入式控制器。
② 開源SoC Freedom系列:包括Freedom Unleashed、Freedom Everywhere兩個(gè)系列。其中Freedom Unleashed系列是基于U5 Coreplex的SoC,包括U500子系列,其外設(shè)控制器包括DDR3/DDR4 DRAM 控制器、PCIe 3.0控制器、1 Gb Ethernet控制器、USB 3.0控制器等,支持Unix等多種操作系統(tǒng);Freedom Everywhere系列是基于E3 Coreplex的SoC,包括E300子系列,其具有片上Debug單元、平臺級中斷控制器等,支持FreeRTOS等多種操作系統(tǒng)。
③ Freedom E310。Freedom E310是Freedom Everywhere的子系列E300的一個(gè)流片實(shí)例,目標(biāo)應(yīng)用場合是微控制器、IoT、可穿戴設(shè)備等,其處理器核是E3 Coreplex子系列的一個(gè)實(shí)例——E31,支持RV32IMAC指令集[2]。其采用180 nm工藝流片成功,主頻可以達(dá)到320 MHz以上。
④ 開源開發(fā)板HiFive1。HiFive1是第一款采用Freedom E310作為核心控制芯片的Arduino兼容開發(fā)板。作為深度開源的代表,其微控制器對應(yīng)的RTL代碼、電路圖設(shè)計(jì)文件、PCB設(shè)計(jì)文件等完全開源。
本文首先簡單分析了Freedom E310的調(diào)試模塊,隨后設(shè)計(jì)了使用OpenOCD(Open On-Chip Debugger)、J-Link搭建Freedom E310調(diào)試環(huán)境的方案,并進(jìn)行了驗(yàn)證測試。
1.1 Freedom E310的組成
Freedom E310的組成如圖1所示。處于核心的是單發(fā)射、順序執(zhí)行處理器E31,支持RV32IMAC指令集,具有16 KB的指令緩存、16 KB的數(shù)據(jù)SRAM,在滿足一定工藝條件下的最高主頻可達(dá)320 MHz。
圖1 Freedom E310的組成
Freedom E310有多個(gè)外設(shè),通過TileLink互連總線將這多個(gè)外設(shè)連接到處理器。主要外設(shè)包括[3]:
① AON(Always-on Domain):AON的意思就是始終在線,不受處理器核心電源管理的影響,包括實(shí)時(shí)計(jì)數(shù)器、看門狗、復(fù)位與電源管理部分。
② GPIO(General Purpose Input/Output)控制器:通用輸入輸出,每一個(gè)引腳都可以設(shè)置成輸入或者輸出,并可以設(shè)置是否能夠引發(fā)中斷。E31的GPIO可以復(fù)用,復(fù)用為UART、I2C、SPI、PWM等。
③ PLIC(Platform-Level Interrupt Control):平臺級中斷控制器,用于接收外部的中斷信號,然后按照優(yōu)先級送給處理器,支持52個(gè)外部中斷源、7個(gè)中斷優(yōu)先級。
④ Debug Unit:調(diào)試單元,支持外部調(diào)試器通過標(biāo)準(zhǔn)JTAG接口進(jìn)行調(diào)試,支持2個(gè)硬件斷點(diǎn)、觀察點(diǎn)。
⑤ QSPI(Quad-SPI):QSPI Flash控制器,用于訪問Flash,可以支持eXecute-In-Place模式。
1.2 Debug單元
Debug單元的主要結(jié)構(gòu)如圖2所示。Freedom E310有一個(gè)標(biāo)準(zhǔn)的JTAG(Joint Test Action Group)接口,如表1所列。外部調(diào)試工具可以通過該接口進(jìn)行調(diào)試,包括設(shè)置斷點(diǎn)、設(shè)置觀察點(diǎn)、單步執(zhí)行、查看寄存器、訪問存儲器等操作,所有的外設(shè)、中斷控制器也可以通過JTAG接口進(jìn)行訪問。外部調(diào)試工具將調(diào)試命令(如:設(shè)置斷點(diǎn))通過JTAG接口送入Freedom E310,后者有兩個(gè)主要的模塊處理該命令,首先是JtagDTMWithSync模塊,該模塊的作用是將按照J(rèn)TAG協(xié)議的要求分析JTAG接口送入的命令,其內(nèi)部有一個(gè)狀態(tài)機(jī),實(shí)現(xiàn)了TAP(Test Access Port)控制器,可以將其理解為一個(gè)串行轉(zhuǎn)并行接口。提取出的指令經(jīng)過一系列處理,最后送入TLDebugModule模塊,該模塊按照調(diào)試命令,對處理器發(fā)出實(shí)際的控制信號。
圖2 Debug單元的主要結(jié)構(gòu)
表1 Freedom E310的JTAG接口
OpenOCD起源于2005年的奧格斯堡應(yīng)用科學(xué)大學(xué),并迅速發(fā)展成為一個(gè)應(yīng)用廣泛的開源項(xiàng)目,其目標(biāo)是為嵌入式系統(tǒng)提供調(diào)試、在系統(tǒng)編程、邊界掃描測試等功能。使用OpenOCD調(diào)試嵌入式系統(tǒng)的一般結(jié)構(gòu)如圖3所示。
圖3 使用OpenOCD調(diào)試嵌入式系統(tǒng)的一般結(jié)構(gòu)
OpenOCD運(yùn)行于調(diào)試主機(jī)上,調(diào)試主機(jī)可以通過USB、并口、網(wǎng)口等方式連接到調(diào)試適配器,調(diào)試適配器再通過JTAG、SWD(Serial Wire Debug)、SPI(Serial Peripheral Interface)等接口連接到目標(biāo)系統(tǒng)。此處的調(diào)試適配器的主要作用就是接口協(xié)議轉(zhuǎn)換,比如:將主機(jī)通過USB接口送出的調(diào)試命令轉(zhuǎn)化為JTAG信號,送入目標(biāo)系統(tǒng)。OpenOCD支持大量的調(diào)試適配器,其中就包括J-Link。
J-Link功能十分豐富,是一款仿真器,但是本文只是將其作為一個(gè)調(diào)試適配器使用。J-Link 是 SEGGER 公司為支持仿真 ARM 內(nèi)核芯片推出的 JTAG仿真器,配合 IAR EWARM、ADS、KEIL、WINARM、RealView 等集成開發(fā)環(huán)境,支持所有 ARM7/ARM9 內(nèi)核芯片的仿真。其主要特性如下[4]:支持所有ARM7/ARM9內(nèi)核的芯片,以及Cortex-M3,包括Thumb模式,下載速度為ARM7——600 KB/s,ARM9——550 KB/s;最高JTAG速度為12 MHz;目標(biāo)板電壓范圍為1.2~3.3 V,兼容5 V;自動(dòng)速度識別功能;監(jiān)測所有JTAG信號和目標(biāo)板電壓;完全即插即用;使用USB電源(但不對目標(biāo)板供電);帶USB連接線和20芯扁平電纜;支持多JTAG器件串行連接;標(biāo)準(zhǔn)20芯JTAG仿真插頭;選配14芯JTAG仿真插頭;帶J-Link TCP/IP server,允許通過TCP/ IP網(wǎng)絡(luò)使用J-Link。
4.1 整體結(jié)構(gòu)
本文設(shè)計(jì)使用OpenOCD、J-Link對Freedom E310進(jìn)行調(diào)試,整體結(jié)構(gòu)設(shè)計(jì)如圖4所示。OpenOCD運(yùn)行在主機(jī)上,主機(jī)通過USB接口連接J-Link,后者通過JTAG接口連接Freedom E310。J-Link接收OpenOCD通過USB口送入的調(diào)試指令,然后通過JTAG接口送入Freedom E310,并將Freedom E310的響應(yīng)信息傳遞給OpenOCD。
圖4 Freedom E310調(diào)試方案整體結(jié)構(gòu)
4.2 J-Link與Freedom E310的連接
J-Link與Freedom E310之間通過JTAG接口連接,J-Link提供了一個(gè)20芯的JATG仿真插頭。J-Link與Freedom E310連接時(shí)的針腳對應(yīng)關(guān)系如圖5所示。圖中Vtref的輸入是開發(fā)平臺上IO口的輸出高電平的值。
圖5 J-Link的20芯仿真接口與Freedom E310的連接關(guān)系
4.3 OpenOCD配置文件設(shè)計(jì)
OpenOCD需要針對不同的調(diào)試適配器和不同的目標(biāo)芯片,編寫一個(gè)配置文件。配置文件一般包括4個(gè)部分[5]:
① 接口配置:與調(diào)試適配器有關(guān),配置其使用的接口等信息。
② 開發(fā)板配置:與具體開發(fā)板有關(guān)的配置信息,可以配置上面的模塊(如CPU、SDRAM、Flash等)的初始化過程。
③ 目標(biāo)芯片配置:與具體芯片有關(guān)的配置信息,芯片需要具有JTAG TAP,如ARM、CPLD等,如果一個(gè)目標(biāo)有多個(gè)TAP,那么需要在此處明確說明。
④ 補(bǔ)充配置:一些可能會(huì)使用到的庫文件等信息。
本文只是調(diào)試Freedom E310,并不需要開發(fā)板相關(guān)信息,所以開發(fā)板配置可以省略。在目標(biāo)芯片配置中,需要添加具體芯片的JTAG TAP,然后添加芯片。本文設(shè)計(jì)的調(diào)試Freedom E310的配置文件內(nèi)容如下:
#接口配置,這里指出使用J-Link
interface jlink
#JTAG接口的最大頻率
adapter_khz 12000
#添加一個(gè)新的JTAG TAP
set _CHIPNAME riscv
jtag newtap $_CHIPNAME cpu-irlen 5-expected-id 0x10e31913
#添加一個(gè)新的CPU
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME riscv-chain-position $_TARGETNAME
init
#輸出一些信息
echo " "
echo "-----------------------"
echo "--- login with - telnet localhost 4444 ---"
echo "---hello world ---"
echo "-----------------------"
echo " "
#使目標(biāo)CPU暫停執(zhí)行
halt
在添加JTAG TAP的時(shí)候,指出了這個(gè)TAP的指令寄存器的寬度是5位,并且IDCODE寄存器的值是0x10e 31913,當(dāng)OpenOCD與目標(biāo)連接的時(shí)候,會(huì)嘗試獲取IDCODE寄存器,然后與此處的對比,判斷是否一致。IDCODE寄存器的定義如圖6所示[6]。
圖6 IDCODE寄存器的定義
包含三個(gè)部分:Version為版本號;PartNumber為部件號;Manufld為設(shè)計(jì)者或者制造者編碼。
在Freedom E310的DebugTransportModuleJtag.v中定義了IDCODE寄存器,如下正是在OpenOCD配置文件中的值:
parameter JTAG_VERSION=4'h1;
parameter JTAG_PART_NUM=16'h0E31; // E31
parameter JTAG_MANUF_ID=11'h489; // As Assigned by JEDEC
assign idcode={JTAG_VERSION, JTAG_PART_NUM, JTAG_MANUF_ID, 1'h1};
5.1 實(shí)驗(yàn)環(huán)境
本文將Freedom E310下載到Altera的DE2上運(yùn)行,通過DE2的GPIO口與J-Link連接。運(yùn)行OpenOCD的PC機(jī)使用的是Ubuntu14.04 64位。在Github上clone項(xiàng)目Freedom-e-sdk,通過編譯可以得到OpenOCD可執(zhí)行文件。
5.2 運(yùn)行OpenOCD
假設(shè)3.3節(jié)設(shè)計(jì)的OpenOCD配置文件是openocd.cfg,那么在Ubuntu上輸入如下指令,可以運(yùn)行OpenOCD。
freedom-e-sdk/toolchain/bin/openocd-f openocd.cfg
顯示如圖7所示,表示已經(jīng)正確識別Freedom E310。
圖7 OpenOCD運(yùn)行輸出
5.3 運(yùn)行Telnet
OpenOCD運(yùn)行后,可以使用Telnet連接本地主機(jī)的4444端口,如圖8所示。
圖8 Telnet運(yùn)行界面
4.4 執(zhí)行調(diào)試指令
Telnet運(yùn)行后,可以在其中輸入各種調(diào)試指令,如:暫停運(yùn)行(halt)、繼續(xù)運(yùn)行(resume)、單步執(zhí)行(step)、查看寄存器(reg)、設(shè)置斷點(diǎn)(bp)等。圖9為運(yùn)行查看寄存器指令的結(jié)果。
圖9 運(yùn)行查看寄存器指令
[1] Andrew Waterman, Yunsup Lee, David A. The RISC-V Instruction Set Manual, Volume I: User-Level ISA, Version 2.1[EB/OL].[2017-03]. https://www2.eecs.berkeley.edu/Pubs/TechRpts/2014/EECS-2014-54.html.
[2] SiFive Inc. SiFive E3 Coreplex Series Manual, Version1.2, 2016.
[3] SiFive. SiFive FE310-G000 Manual, Version1.0.1, 2016.
[4] Debug Probes-J-Link and J-Trace [EB/OL].[2017-03]. https://www.segger.com/jlink-debug-probes.html.
[5] Open On-Chip Debugger: OpenOCD User’s Guide, for release 0.10.0-dev[EB/OL].[2017-03]. http://www.docin.com/p-1825816225.html.
[6] RISC-V External Debug Support, Version 0.13[EB/OL].[2017-03].https://dev.sifive.com/documentation/risc-v-external-debug-support-0-11/.2017-2.
雷思磊(工程師),主要研究方向?yàn)樘幚砥骷軜?gòu)、嵌入式處理器應(yīng)用等。
Research on Open-source SoC Freedom E310 Debugging Method
Lei Silei,Xue Zheng
(Jiuquan Satellite Launch Center,Jiuquan 735000,China)
The Freedom E310 is the first open-source commercial SoC based on the RISC-V instruction set architecture,and it can be customized according to the specific depth of application scenarios.On the basis of a brief introduction of the Freedom E310 and its Debug unit,the Freedom E310 debugging environment is established through the OpenOCD,J-Link,and it has carried on the actual test.
RISC-V;Freedom E310;JTAG
TP368.1
A
?迪娜
2017-03-13)