|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ j) \. z3 a! O/ q k l$ l) N7 @* ]引言
! S. u1 M2 R1 _2 l2 g- c& I在前面我们阐述了OpenRISC 的调试系统的几种不同的实现方案,本小节我们着重介绍一下其中的Advanced Debug System。
! P+ v: ]* Y7 N. q/ ]* L( |
! h6 S5 m$ R+ B/ u为了在不同的阶段进行不同层次的调试,模拟和仿真,opencores也开发了相应的debug系统(advancedebug system,http://opencores.org/project,adv_debug_sys),其中既包含目标硬件模块也包含软件模块,甚至还包含软件和硬件之间的调试器(ORSoC USB debugger)。
8 ]! v( \; Z; I5 m# ]: d) R2 r' K4 X& q/ p0 |
3 T+ D7 a% K7 g& E+ V1 s. J9 ^1,调试级别
$ @ J# ?, v# V3 h" D' t2 ]; h7 `+ y( W) }& r
Advanced Debug System实现了三个级别的调试和仿真。
3 k" g( Z. ]% a. c. T+ v( n# v& ]5 a+ K& [& m- e
一般根据研发过程中不同的阶段分为三种调试仿真级别:体系结构设计初期的调试,设计中期的调试,和设计末期的调试。
1 }' Y2 I1 R( O+ ]% v5 A- [
# v) E+ q) D7 B h# ]+ d/ K* T下面我们就从三个方面来分别介绍advanced debug system的实现。2 i4 i* v' F y* [/ a0 M
! ~* P& K- V! p; U" F, X ^" Y( @ E, r6 h. e
2,体系结构设计初期的调试. Z W0 R4 K/ ?+ a- a8 ~& }4 T
. @0 T; P ? P, @, Q% K
首先,就是在体系结构设计初期的调试,这时候体系结构的RTL还没有开始编写,也没有FPGA的验证系统,更没有流片生成最终的ASIC,但是为了达到调试的目的,就需要别写体系结构对应的simulator(模拟器),对于OpenRISC1000来说就是or1ksim。利用or1ksim,我们就可以模拟指令的执行和CPU的行为,此外,随着不断向模拟器中增加额外的模拟模型,还可以模拟串口,模拟内存控制器等。一旦有了比较完善的体系结构模拟器,就可以实现软件和硬件并行开发。Or1ksim内部包含了一个RSPserver,这就意味着GDB可以直接和or1ksim通信,不需要adv_jtag_bridge程序的参与,如下图所示。( K. \8 u1 {- S8 e% R% N" A T
) f$ Z, E7 {3 O$ A
- R: R) e7 T* Y& J- M% P
* {- t& D! I, r& F, R) b1 u: w4 T3 d' W* f
3,体系结构设计中期的调试- ~' [* W/ q9 I) B( t4 V
其次,是在体系结构设计中期,在这个时候,体系结构的特性和模块已经基本确定下来了,并且已经编写了对应的RTL,但是还是没有FPGA验证平台,这种情况下,就可以进行RTL级别的emulation(仿真)了。RTL级别的仿真的实现主要有两种方式,一种是在bridge和RTL仿真器之间使用FILE IO,另外一种是使用VPI IO。" M! M5 B5 F/ [% C: A7 D5 y
' E5 K' @4 M9 N2 ?3 I5 Y如果采用FILEIO的方式,需要在利用主机的文件系统来完成数据的传递,这就需要在RTL仿真这一端增加一个模块(dbg_comm.v),来读写文件,根据文件内容设置JTAG的状态。在仿真过程中,bridge向文件中写入数据,等待dbg_com的应答。dbg_com收到数据后,根据数据信息,完成对应操作之后,向文件中写入应答数据。Bridge收到应答之后完成一次调试动作。如下图所示:8 | S# O- q" Q" G
3 b: e# P3 R+ s
. L+ y: R" ]8 \7 Y5 Z8 S. k T6 h/ Z
: g( U0 B: D" H Q6 y 如果采用的是VPI IO的方式,与FILEIO的方式类似,但是在bridge和RTL仿真器之间需要VPI(verilogprogram inteRFace)的支持。VPI既支持支持C语言又支持verilog模块,所以dbg_com模块可以使用VPI的库,而不必通过读写文件的形式就可以与bridge通信了。采用VPI IO方式的仿真系统,如下图所示:* N* y5 X9 \2 K( x
5 f3 \- v3 M* V( J
+ h5 k( C7 A* Z0 T* Y. x: K" X3 E: ^; U3 G: j' J
9 F2 J4 ^3 K0 t# r' A" |+ r4 v0 X
4,系结构设计末期的调试
( t5 i5 k3 R Y5 b4 g0 @
" _4 |9 E) U* R最后,在体系结构设计的末期,为了进一步提高仿真的精确度,需要在FPGA上做进一步的调试和验证。这种调试级别,就需要购买FPGA开发板和对应的JTAG cable,也就是我们前面最常用的调试方式。其结构如下所示:
' v* L- i1 I |$ m: N6 a7 F
0 _- G) m7 F3 \, \1 m! P
7 b4 b5 A- V( t8 C! ?3 c, h
: Y# B& b9 D5 z+ H. P1 m+ i; C3 }8 L5 N0 D8 I1 }
5,小结& I) l, B/ W, q3 \( m
本小节简单介绍了advanced debug system的系统组成和工作原理,读者可根据自己的具体情况选择不同的调试方式。& u; l; T& h0 o. d; j9 I
' b' {4 P5 g' [9 b6 t
advanced debug system的搭建,可分成两部分,在自己的SoC中例化tap和adv_dbg_if等IP core,在PC机上安装adv_jtag_bridge。/ X6 c# S, U+ I' P
4 ^1 V2 `5 } Y8 |; U- h
verilog HDL/VHDL的模块例化和linux下软件的安装和使用的具体细节可下载参考 adv_debug_sys_latest.tar.gz中的adv_jtag_bridge的手册获得(http://opencores.org/project,adv_debug_sys)。
8 q" b ~6 t6 N% e
# _) d' P" l; C+ ^需要注意的是要实现最终的调试,TAP,cable,bridge,gdb 四者要协同工作才能完成。即bridge要能检测到JTAG cable并开启RSP server,JTAG cable要能连接到TAP,TAP要能扫描链中识别adv_dbg_if。, ?. d; o* |$ P/ I6 a
2 R) B( ?, I! n# b
enjoy!. e1 N, Z7 H& I# ?: O/ ?8 H" n
|
|