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。下图为根本的debug体系方块图。
图表1 根本的debug体系方块图
下图阐明TAP 指令的品种
图表2 TAP 指令的品种
2. 操控EDM存取的约束
运用EDM的拜访办法会被一个sideband signal (edm_restrict_access) 所影响。当这个signal值是high,只是只能对EDM MISC registers做读取的动作。而想要存取CPU/System Bus/Local Memory的动作将会被封锁住而且会得到下面的成果:
读为零写疏忽
不正确的JTAG instruction(JTAG %&&&&&%E debugger会timeout)
下图阐明EDM约束存取方块图。
图表3 EDM约束存取方块图
在启用存取约束功用后,下图阐明出每个TAP指令的行为。
图表4 在启用存取约束功用后,下图阐明出每个TAP指令的行为
怎么完成EDM存取约束,在体系规划上有很多种完成办法,以操控edm restrict access的signal。两种根本的规划方案阐明如下:
eFUSE办法运用Chip从头编程办理操控
SOC办法运用软件办理操控
hardware完成操控edm_restrict_access的示意图如下:
图表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信号时序图
如下比如阐明了怎么发生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存取指示运用
下图阐明AHB bus怎么运用hdebug_access和验证逻辑来避免歹意的debug存取