• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      開源片上系統(tǒng)FreedomE310調(diào)試過程原理分析

      2017-09-27 00:55:36,,
      關(guān)鍵詞:斷點(diǎn)字段寄存器

      ,,

      (酒泉衛(wèi)星發(fā)射中心,酒泉 735000)

      開源片上系統(tǒng)FreedomE310調(diào)試過程原理分析

      雷思磊,王軍,張海燕

      (酒泉衛(wèi)星發(fā)射中心,酒泉 735000)

      Freedom E310是第一款基于RISC-V指令集架構(gòu)的開源商業(yè)片上系統(tǒng),可以依據(jù)具體應(yīng)用場(chǎng)景對(duì)其進(jìn)行深度定制,在介紹Freedom E310中與調(diào)試有關(guān)的模塊、地址空間、控制狀態(tài)寄存器之后,從原理上分析了halt、resume、step、斷點(diǎn)設(shè)置等調(diào)試指令的實(shí)現(xiàn)過程。

      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)用于不同場(chǎ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)處理器,支持多核、多級(jí)緩存、硬件支持的單精度與雙精度浮點(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單元、平臺(tái)級(jí)中斷控制器等,支持FreeRTOS等多種操作系統(tǒng)。

      ③ Freedom E310是Freedom Everywhere的子系列E300的一個(gè)流片實(shí)例,目標(biāo)應(yīng)用場(chǎng)合是微控制器、IoT、可穿戴設(shè)備等,其處理器核是E3 Coreplex子系列的一個(gè)實(shí)例——E31,支持RV32IMAC指令集[2]。其采用180 nm工藝流片成功,主頻可以達(dá)到320 MHz以上。

      ④ 開源開發(fā)板HiFive1,是第一款采用Freedom E310作為核心控制芯片的Arduino兼容開發(fā)板。作為深度開源的代表,其微控制器對(duì)應(yīng)的RTL代碼、電路圖設(shè)計(jì)文件、PCB設(shè)計(jì)文件等完全開源。

      本文首先簡(jiǎn)單分析了Freedom E310的Debug單元、Debug地址空間、與Debug相關(guān)的控制狀態(tài)寄存器(Control Status Register,CSR),然后給出了使用OpenOCD+J-Link適配器的調(diào)試方案,并分析了OpenOCD與Freedom E310之間通信的原理,最后對(duì)調(diào)試過程的原理逐一進(jìn)行分析,包括halt、resume、step、硬件斷點(diǎn)、軟件斷點(diǎn)等命令的執(zhí)行原理。

      1 Freedom E310介紹

      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,始終在線):不受處理器核心電源管理的影響,包括實(shí)時(shí)計(jì)數(shù)器、看門狗、復(fù)位與電源管理部分。

      ② GPIO(General Purpose Input/Output,通用輸入輸出)控制器:每一個(gè)引腳都可以設(shè)置成輸入或者輸出,并可以設(shè)置是否能夠引發(fā)中斷。E31的GPIO可以復(fù)用為UART、I2C、SPI、PWM等。

      ③ PLIC(Platform-Level Interrupt Control,平臺(tái)級(jí)中斷控制器):用于接收外部的中斷信號(hào),然后按照優(yōu)先級(jí)送給處理器,支持52個(gè)外部中斷源、7個(gè)中斷優(yōu)先級(jí)。

      ④ 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單元

      圖2 Debug單元的主要結(jié)構(gòu)

      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í)行、查看寄存器、訪問存儲(chǔ)器等操作,所有的外設(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)試命令,對(duì)處理器發(fā)出實(shí)際的控制信號(hào)。

      表1 Freedom E310的JTAG接口

      1.3 Debug地址空間

      Freedom E310的Debug地址空間占用地址為0x0~0xFFF,共4 KB。其地址分配情況如表2所列。

      表2 Freedom E310的Debug地址空間

      0x100、0x104、0x108、0x10C都是“只能寫”的地址空間,如果向這個(gè)地址空間寫入一個(gè)處理器核的ID,那么就執(zhí)行相應(yīng)的動(dòng)作,比如向地址0x100寫入1,那么就會(huì)清除處理器核1的Debug中斷。

      Debug RAM是Debug中斷例程可以使用的RAM,在Freedom E310調(diào)試過程中,OpenOCD可以向該空間寫入調(diào)試相關(guān)代碼。

      Debug ROM中存放的是Debug中斷例程,Debug中斷例程是固化在Debug ROM中的。Freedom E310的Debug中斷例程的源碼位于debug_rom.S中。

      1.4 Debug相關(guān)的控制狀態(tài)寄存器

      Freedom E310與Debug相關(guān)的主要控制狀態(tài)寄存器如表3所列。

      表3 Freedom E310與Debug有關(guān)的CSR[4]

      觸發(fā)器選擇寄存器、觸發(fā)器數(shù)據(jù)寄存器1、觸發(fā)器數(shù)據(jù)寄存器2用來設(shè)置硬件斷點(diǎn)。Debug指令地址寄存器中存儲(chǔ)的是退出Debug模式時(shí)將要執(zhí)行的下一條指令地址。DCSR的結(jié)構(gòu)如下所示:

      其中的關(guān)鍵字段如下:debugint為是否由Debug中斷發(fā)生;halt為是否暫停運(yùn)行;cause為暫停運(yùn)行的原因。

      2 Freedom E310調(diào)試方案

      可以使用OpenOCD、J-Link對(duì)Freedom E310進(jìn)行調(diào)試。OpenOCD起源于2005年的奧格斯堡應(yīng)用科學(xué)大學(xué),并迅速發(fā)展成為一個(gè)應(yīng)用廣泛的開源項(xiàng)目,其目標(biāo)是為嵌入式系統(tǒng)提供調(diào)試、在系統(tǒng)編程、邊界掃描測(cè)試等功能[5]。J-Link 是 SEGGER 公司為支持仿真 ARM 內(nèi)核芯片推出的 JTAG仿真器。使用OpenOCD、J-Link對(duì)Freedom E310進(jìn)行調(diào)試的整體結(jié)構(gòu)設(shè)計(jì)如圖3所示。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。

      圖3 Freedom E310調(diào)試方案整體結(jié)構(gòu)

      OpenOCD的調(diào)試指令來自于用戶通過Telnet或者GDB的輸入,用戶可以輸入各種調(diào)試指令,如暫停運(yùn)行(halt)、繼續(xù)運(yùn)行(resume)、單步執(zhí)行(step)、查看寄存器(reg)、設(shè)置斷點(diǎn)(bp)等。

      3 OpenOCD與Freedom E310通信過程原理分析

      前文已述,F(xiàn)reedom E310的Debug單元包含一個(gè)JTAG TAP控制器,其中包含若干個(gè)JTAG寄存器,可以按照IEEE Std 1149.1-2013的標(biāo)準(zhǔn)訪問相應(yīng)的JTAG寄存器,訪問過程有兩步:

      ① 使用JTAG IR(Instruction Register)選擇要訪問的JTAG寄存器。

      ② 如果是讀操作,那么讀取JTAG DR(Data Register),其內(nèi)容是上一步選擇的JTAG寄存器的值;如果是寫操作,那么將要寫的數(shù)據(jù)寫入JTAG DR即可,該值會(huì)最終寫入上一步選擇的JTAG寄存器。

      Freedom E310有一個(gè)特殊的JTAG寄存器,是Debug Bus Access(Debug總線訪問)寄存器,其結(jié)構(gòu)如下所示:

      653433210addressdataop

      寄存器結(jié)構(gòu)分為三個(gè)部分,分別是地址(address)、數(shù)據(jù)(data)、操作符(op),OpenOCD通過J-Link操作該Debug Bus Access寄存器,便實(shí)現(xiàn)了對(duì)Freedom E310內(nèi)部任意地址的讀寫操作,操作符指明是讀操作還是寫操作。對(duì)于寫操作,數(shù)據(jù)部分是要寫入的數(shù)據(jù);對(duì)于讀操作,數(shù)據(jù)部分是讀取到的數(shù)據(jù)。

      4 調(diào)試過程原理分析

      4.1 halt命令執(zhí)行過程分析

      halt命令的作用是使處理器暫停運(yùn)行。用戶在Telnet或者GDB中輸入halt命令,該命令被送入OpenOCD,后者通過Debug Bus Access寄存器向Freedom E310的Debug RAM(起始地址是0x400)處寫入4條指令,作用是設(shè)置DCSR的halt字段為1,并在寫入第4條指令的時(shí)候引發(fā)Freedom E310的Debug中斷。該中斷會(huì)設(shè)置DCSR的debugint字段為1,F(xiàn)reedom E310隨后轉(zhuǎn)入Debug中斷處理例程,也就是轉(zhuǎn)移到Debug ROM(起始地址是0x800)處開始執(zhí)行,隨后的過程如圖4所示。首先轉(zhuǎn)移至Debug RAM,執(zhí)行OpenOCD傳入的4條指令(最后一條指令是轉(zhuǎn)移指令),接著轉(zhuǎn)移回Debug ROM,然后清除DCSR的debugint字段(參考第1.3節(jié),通過向地址0x100寫入處理器核的ID,即可實(shí)現(xiàn)),最終進(jìn)入一個(gè)循環(huán),在循環(huán)中不斷讀取DCSR的debugint字段,判斷是否有中斷發(fā)生,如果沒有,那么繼續(xù)讀取DSCR的debugint字段。這就是Freedom E310對(duì)halt命令的處理過程,最后進(jìn)入了一個(gè)循環(huán)中,從用戶的角度,可以認(rèn)為Freedom E310進(jìn)入了停止運(yùn)行狀態(tài),實(shí)際上還是在不停地運(yùn)行。

      圖4 Debug ROM中斷例程對(duì)于halt命令處理過程

      隨后,OpenOCD通過Debug Bus Access寄存器讀取硬件上下文,包括通用寄存器x1-x31、Debug PC寄存器、DCSR寄存器等。讀取方法為:首先通過Debug Bus Access寄存器在Debug RAM中寫入一條指令,該指令就是存儲(chǔ)某一寄存器的指令(一般為store指令,將目標(biāo)寄存器存儲(chǔ)到Debug RAM的0x410處),隨后引發(fā)Debug中斷,但是此時(shí)已經(jīng)在Debug中斷處理過程了(執(zhí)行halt命令導(dǎo)致的),由于Debug中斷不嵌套,所以該中斷不會(huì)使處理器轉(zhuǎn)移至Debug ROM起始部分,僅僅會(huì)設(shè)置DCSR的debugint字段為1,參考圖4可知,F(xiàn)reedom E310將再次轉(zhuǎn)移到Debug RAM中執(zhí)行,執(zhí)行其中的存儲(chǔ)某一寄存器的指令,執(zhí)行完成后,F(xiàn)reedom E310再次轉(zhuǎn)移到Debug ROM中,最后進(jìn)入循環(huán)等待狀態(tài)。這一過程如圖5所示。

      圖5 OpenOCD獲取上下文寄存器的過程

      此時(shí),OpenOCD通過Debug Bus Access直接讀取地址0x410的數(shù)據(jù),就獲取了目標(biāo)寄存器的值。OpenOCD將讀取到的通用寄存器x1~x31、Debug PC寄存器、DCSR寄存器等的值都保存在自己內(nèi)部的一個(gè)結(jié)構(gòu)體中。

      4.2 resume命令執(zhí)行過程分析

      resume命令與halt命令是配合使用的,可以使Freedom E310繼續(xù)運(yùn)行用戶程序。當(dāng)用戶在Telnet或者GDB中輸入resume命令,該命令被送入OpenOCD,后者通過Debug Bus Access寄存器向Freedom E310的Debug RAM處寫入4條指令,作用是恢復(fù)Debug PC的值,并在寫入第4條指令的時(shí)候引發(fā)Freedom E310的Debug中斷,但是此處已經(jīng)在Debug中斷處理過程了(執(zhí)行halt命令導(dǎo)致的),由于Debug中斷不嵌套,所以該中斷不會(huì)使處理器轉(zhuǎn)移至Debug ROM起始部分,僅僅會(huì)設(shè)置DCSR的debugint字段為1,隨后的過程如圖5所示。只是將圖中Debug RAM中的代碼換為“恢復(fù)Debug PC寄存器”。

      之后,OpenOCD再次通過Debug Bus Access寄存器向Freedom E310的Debug RAM處寫入4條指令,作用是設(shè)置DCSR寄存器的halt字段為0,并在寫入第4條指令的時(shí)候引發(fā)Freedom E310的Debug中斷,隨后的處理過程如圖5所示,只是將圖中Debug RAM中的代碼換為“設(shè)置DCSR的halt字段為0”,并且,轉(zhuǎn)移至Debug ROM后,由于DCSR的halt字段為0,所以會(huì)執(zhí)行dret指令,F(xiàn)reedom E310從中斷處理例程返回,繼續(xù)執(zhí)行Debug中斷前的代碼,從用戶的角度,可以認(rèn)為Freedom E310繼續(xù)運(yùn)行了。

      4.3 step命令執(zhí)行過程分析

      一般是在halt命令輸入后,再輸入step命令,該命令是單步執(zhí)行命令。當(dāng)用戶在Telnet或者GDB中輸入step命令后,該命令被送入OpenOCD,首先按照第4.2節(jié)resume命令的執(zhí)行過程進(jìn)行處理,但是此時(shí)圖中Debug RAM中的代碼會(huì)設(shè)置DCSR的step字段為1。Freedom E310檢測(cè)到該字段為1,會(huì)在執(zhí)行完一條指令之后再次觸發(fā)Debug中斷,進(jìn)入Debug ROM開始執(zhí)行,最終還是進(jìn)入循環(huán)等待狀態(tài),參考圖4。

      4.4 硬件斷點(diǎn)實(shí)現(xiàn)過程分析

      用戶在Telnet或者GDB中輸入bp命令,可以設(shè)置斷點(diǎn),bp后面加上參數(shù)hw,就表示設(shè)置的是硬件斷點(diǎn),該命令被送入OpenOCD,后者通過Debug Bus Access寄存器向Freedom E310的Debug RAM處寫入指令,作用是通過Trigger Select、Trigger Data1、Trigger Data2設(shè)置硬件斷點(diǎn)寄存器,F(xiàn)reedom E310默認(rèn)配置了兩個(gè)硬件斷點(diǎn)寄存器。在寫入最后一條指令的時(shí)候引發(fā)Freedom E310的Debug中斷,F(xiàn)reedom E310轉(zhuǎn)移至Debug ROM

      Debugging Process Principle Analysis of Open-source SoC Freedom E310

      LeiSilei,WangJun,ZhangHaiyan

      (Jiuquan Satellite Launch Center,Jiuquan 735000,China)

      Freedom E310 is the first RISC-V instruction set architecture based on open-source commercial SoC,which can be customized according to the specific needs.In the paper,after the introduction of the debugging module,the address space and the control status register in Freedom E310,the realization process of halt,resume,step,breakpoint setting and so on.

      RISC-V;Freedom E310;JTAG

      猜你喜歡
      斷點(diǎn)字段寄存器
      圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
      Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
      一類無限可能問題的解法
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      主導(dǎo)電回路發(fā)生斷點(diǎn)故障判斷方法探討
      CNMARC304字段和314字段責(zé)任附注方式解析
      無正題名文獻(xiàn)著錄方法評(píng)述
      關(guān)于CNMARC的3--字段改革的必要性與可行性研究
      高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
      TKScope仿真調(diào)試Cortex-M3內(nèi)核的高級(jí)手段
      双流县| 西吉县| 仙居县| 临邑县| 开平市| 衡水市| 曲沃县| 辽源市| 南皮县| 临城县| 奈曼旗| 邢台市| 静海县| 马公市| 大方县| 通城县| 达孜县| 桑植县| 天峨县| 德格县| 岱山县| 宁河县| 建始县| 玛多县| 陆丰市| 儋州市| 平南县| 阳谷县| 冕宁县| 葫芦岛市| 车险| 武冈市| 明水县| 松潘县| 西藏| 龙海市| 安康市| 常熟市| 宜州市| 高要市| 汾阳市|