iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 7
0

0. 前言

上篇終於講完OpenOCD基礎的架構和實用的Commands、Help APIs,
這篇開始,終於要進入RISC-V底層架構的部分啦!!!
  
  
  

1. RISC-V Introduction (講古

當然還是要來講古一下啦 擴充篇幅

官方網站: RISC-V Foundation | Instruction Set Architecture (ISA)

然後是引用Wiki的部分:

RISC-V(發音為「risk-five」)是基於已建立的精簡指令集(RISC)原則的一個開源指令集架構(ISA)。

與大多數指令集相比,RISC-V指令集可以自由地用於任何目的,允許任何人設計、製造和銷售RISC-V晶片和軟體。雖然這不是第一個開源指令集,但它具有重要意義,因為其設計使其適用於現代計算設備(如倉庫規模雲計算機、高端行動電話和微小嵌入式系統)。設計者考慮到了這些用途中的性能與功率效率。該指令集還具有眾多支持的軟體,這解決了新指令集通常的弱點。

該項目2010年始於加州大學柏克萊分校,但許多貢獻者是該大學以外的志願者和行業工作者。

RISC-V指令集的設計考慮了小型、快速、低功耗的現實世界實現,但沒有對特定微架構風格的過度架構。

截至2017年5月,用戶空間的指令集版本2.2已固定,特權指令集已處在草案版本1.10。

---引用自: RISC-V Wiki

巴拉巴拉巴拉,剩下自己看Wiki,不重要!!!

關於RISC-V中ISA的設計、功能、實作和細節等等,並不是這次鐵人賽系列文中的重點,
有興趣可以自行翻閱底下的幾份參考文件:

另外推薦我們隊長的系列文: 與妖精共舞:在 RISC-V 架構上使用 GO 語言實作 binutils 工具包
  
  
  

2 RISC-V External Debug Support Spec.

簡單的來說,原先RISC-V架構中並沒有討論到Debug Support的部分,
不過國外某家廠商(Sifive)率先提出了一套"RISC-V External Debug Support",並將其實作在該公司的IP中!

相關Spec討論可以在這邊找到: RISC-V External Debug Support 0.13

目前External Debug Spec.目前有兩套,分別是0.11和0.13版,但0.13版還在討論階段中,
所以注意: 本文所寫的內容,有可能在未來不適用,或實作細節不同,還請讀者小心服用!

本文之後討論的Spec以"Tue Nov 28 07:54:42 2017 -0800 commit: f7f3277d78d5b72dbba7d718d40892c469ca22ba"為主!

相關的警告訊息:
Warning! This draft speci cation will change before being accepted as standard, soimplementations made to this draft speci cation will likely not conform to the futurestandard.
---引用自RISC-V External Debug Support 0.13

另外,如果需要最新Spec.相關討論和參與的話,可以參考這個連結:
Working Draft of the RISC-V Debug Specification Standard

如果有需要的話,也一併參考The RISC-V Instruction Set Manual Volume II:Draft Privileged ISA Specification
  
  
  

3. Debug Support Spec. 主題規劃

以下是Spec.中的目錄,也同時是未來的幾天中的主題:

  • Debug Module (DM)
  • Core Debug (RISC-V Debug)
  • Trigger Module
  • Debug Transport Module (DTM)
  • Debugger Implementation
      
      
      

4. Debug System Overview

經過上面拉拉拉拉講了一大堆的東西後,終於正式進入主題,
那我們就簡單的看一下整體架構的部分!!
其實只是覺得天氣突然又變得太冷了,隨便打一點就想回被窩看書...

不囉嗦,先上圖~!!

https://ithelp.ithome.com.tw/upload/images/20171225/20107327lRLySlIodZ.jpg
---引用自RISC-V External Debug Support 0.13

首先分別介紹幾個名詞:

  • Debug Host: 就是你的PC啦,通常在上面會運作兩種程式:
    • Debugger: 之後會用GDB作範例
    • Debug Translator: 通常翻譯作代理程式、中介程式(忘記在哪看到的中文),主要是將GDB Command轉成USB訊號或是JTAG訊號送到Target端
  • Debug Trasnport Hardware: 如同Day 03: [Lab] 簡單操作OpenOCD中所使用的ST-Link一般,負責將PC送來的訊號轉送至Target端,之後還會再另外介紹一套FTDI-based Hardware: Olimex ARM-USB-TINY-H adapter

再來介紹一下跟Target端有關的名詞:

  • Debug Transport Module (DTM): 負責將外部送過來的訊號轉送至內部Debug Module (DM)中,之後文章中還會再提到!
  • Debug Module Interface (DMI): 將Debug Transport Module (DTM)轉發至Debug Module (DM)中的介面,通常是一個簡單的Bus,之後還會再提到這部分
  • Debug Moduel (DM): 最核心的地方啦,不過現在這個部分跟我當初在學習時也有點不同,之後還會再詳細介紹,順便學習一下修改的部分
  • Trigger Module: 主要是用來當作事件Trigger用,比方說用來做Hardware Breakpoint/Watchpoint用,之後也會詳細提到!

另外有些進階功能的地方:

  • Program Buffer: 架構中允許開發者撰寫一些小程式來幫助Debugger能夠順利獲得一些Target端的資料,比如說: Access GPRs/Access Memory,之後還會詳細介紹
  • Abstract commands: 功能如同Program Buffer一樣,提供Access GPRs/Access Memory
      
      
      

99. 結語

以上就是Overview的部分,很淺顯XD
當作概觀來看一下,下篇開始將介紹Debug Module和其實作的內容!!
  
  
  

參考資料

  1. RISC-V Wiki
  2. RISC-V External Debug Support 0.13

上一篇
Day 06: [Lab] 簡簡單單新增OpenOCD Command
下一篇
Day 08: RISC-V Debug Module (上篇): Overview & Target Status Control
系列文
系統架構秘辛:了解RISC-V 架構底層除錯器的秘密!30

尚未有邦友留言

立即登入留言