如何應用 AndesCore™ EDM 安全存取機制

Facebook
Twitter
LinkedIn

沈永勝,技術副哩,晶心科技股份有限公司

EDM 安全存取是 AndesCoreTM 內建的功能(option),應用在安全存取的控管。EDM 安全存取有二種的控管方式:debug access indication 和 EDM access restriction。第一種控管方式(debug access indication)提供了一個 sideband signal 用於指示從調試器(Debug host)的請求。第二種控管方式, 控制AndesCoreTM 的 input port (edm_restrict_access )達到 EDM 存取的限制。更詳細的內容在後續章節會有更深入的介紹。

1. EDM功能介紹
  一個 debug system 包含一個 debug host 和一個 target system。EDM 主要的功能就是 translate debug host 發出的 TAP 指令來存取系統 memory 或是 CPU。
  圖表 1 為基本的 debug 系統方塊圖:

圖表 1   基本的 debug 系統方塊圖

圖表 2 說明 TAP 指令的種類:

圖表 2   TAP 指令的種類

2. 控制EDM存取的限制
  使用 EDM 的訪問方式會被一個 sideband signal (edm_restrict_access) 所影響。當這個 signal 值是 high,僅僅只能對 EDM MISC registers 做讀取的動作。而想要存取CPU/System Bus/Local Memory 的動作將會被封鎖住並且會得到下面的結果:

  • 讀為零寫忽略
  • 不正確的 JTAG instruction(JTAG ICE debugger 會 timeout)

圖表 3 說明 EDM 限制存取方塊:

圖表 3   EDM 限制存取方塊圖


在啟用存取限制功能後,圖表 4 說明出每個 TAP 指令的行為:

圖表 4   TAP 指令的行為

如何實現 EDM 存取限制,在系統設計上有很多種實現方法,以控制 edm restrict access 的 signal。兩種基本的設計方案說明如下:

  • eFUSE 方式使用 Chip 重新編程管理控制
  • SOC 方式使用軟件管理控制

圖表 5 所示為 hardware 實現控制 edm_restrict_access 的示意圖如下:

software 實現控制 edm_restrict_access 的例子如下:

  • sethi $r2,#0x80000
  • ori $r2,$r2,#0x8c
  • sethi $r3,#0x04030
  • ori $r3,$r3,#0x201
  • swi $r3,[$r2+#0]

3. EDM 存取指示
  AndesCoreTM 增加一個額外的 sideband signal,xdebug_access(active-high),根
據此 sideband signal 來決定 request 的 host 是否為 EDM。而 device 就能根據此
sideband signal 決定是否要把 request 的 data 內容傳回到host。
sideband signal 的名稱根據 bus interface 的類型而有所不同。對於AndesCoreTM
處理器,基本的信號名稱如下所示:
• AHB/AHB-Lite => hdebug_access
• APB => pdebug_access
• EILM => eilm_debug_access
• EDLM => edlm_debug_access

3.1. debug 存取識別信號控制
  當 debug exception 發生後,CPU 將進入debug mode。然後 CPU 將會留在 debug access mode 直到CPU 執行到 IRET instruction 並且 trusted_debug_exit 是處於high 後CPU 將離開 debug access mode,反之 trusted_debug_exit 如果是low, CPU 將會保留在debug access mode。
實現控制 trusted_debug_exit 信號,有二種可供選擇的方式如下:
• trusted_debug_exit 信號總是給 high
增加一個權限管理邏輯去控制trusted_debug_exit 信號是high 或是 low 權限管理邏輯方塊圖如圖表 6 所示:

如何控制 trusted_debug_exit 信號時序圖如圖表 7 所示:

如下例子說明了如何產生 trusted_debug_exit 控制信號的verilog code:

  • The code example (Verilog) of trusted_debug_exit generation is described below:
  • //
  • //— Utilize passcode to generate trusted_debug_exit in AHB Bus Controller
  • //* assume zero-wait-state AHB access
  • parameter AUTH_CODE = 32’h0a0b0c0d;
  • always @(posedge hclk or negedge hreset_n) begin
  • if (!hreset_n) begin
  • passcode_reg <= 32’d0;
  • end
  • else if (passcode_wen) begin //debugger enters passcode through debug access
  • passcode_reg <= hwdata[31:0];
  • end
  • end
  • //validate passcode to generate trusted_debug_exit
  • assign trusted_debug_exit = (passcode_reg == AUTH_CODE);

3.2. debug 存取指示應用
  圖表 8 說明 AHB bus 如何使用 hdebug_access 和驗證邏輯來防止惡意的 debug
存取

 

如下 verilog code 說明了如何使用 hdebug_access 信號:

  • //— Use hdebug_access to prevent malicious debug access in AHB Bus Controller
  • //* assume zero-wait-state AHB access
  • parameter IRRELEVANT_DATA = 32’hcafe0001;
  • parameter AUTH_CODE = 32’h01020304;
  • always @(posedge hclk or negedge hreset_n) begin
  • if (!hreset_n) begin
  • dbg_acc_d1 <= 1’b0;
  • end
  • else begin // data phase indication of debug access
  • dbg_acc_d1 <= hdebug_access;
  • end
  • end
  • always @(posedge hclk or negedge hreset_n) begin
  • if (!hreset_n) begin
  • passcode_reg <= 32’d0;
  • end
  • else if (passcode_wen) begin //debugger enters passcode through debug access
  • passcode_reg <= hwdata[31:0];
  • end
  • end
  • //validate passcode to check authentication
  • assign auth_check_fail = (passcode_reg != AUTH_CODE);
  • //return irrelevant data if the authentication check of debug access fails
  • assign hrdata_out = {32{data_read_en}} &
  • ((dbg_acc_d1 & auth_check_fail) ? IRRELEVANT_DATA : normal_data_out);

 

4. 實際的應用
  使用者經由上面的介紹完成了權限管理邏輯後,並且掛在 AndesCoreTMAHB bus 上,再經由模擬器(Cadence)模擬此權限管理邏輯的行為,如下面幾張圖所示:

• edm_restrict_access 信號控制
圖表 9 說明由 sw code 把 edm_restrict_access signal disable

• trusted_debug_exit 信號控制

• debug_access 信號
圖表 11 說明經由 debug host 來做存取時,debug_access signal 會從 low 變成 high:


圖表 12 說明經由執行 IRTE instruction 時,debug_access signal 會從 high 變成 low:

5. 結語
  EDM 安全存取是 AndesCoreTM 保護周邊裝置內容不被竊取的功能,也因為越來越多客戶使用到此功能,所以撰寫此技術文章讓客戶更能進一步了解到此功能的用途,讓客戶能夠很快速的上手,並且使用晶心開發的 EDM 安全存取是一件愉快與簡單的工作。