|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
. M% _, ~6 u8 R' d5 p7 @
引言- b ]) j: D8 b* |1 L: h: T g
在前面我们阐述了OpenRISC 的调试系统的几种不同的实现方案,本小节我们着重介绍一下其中的Advanced Debug System。- c' v0 _; Z, E ]$ B; n4 Q' E/ I
' z' R1 j& e, y
为了在不同的阶段进行不同层次的调试,模拟和仿真,opencores也开发了相应的debug系统(advancedebug system,http://opencores.org/project,adv_debug_sys),其中既包含目标硬件模块也包含软件模块,甚至还包含软件和硬件之间的调试器(ORSoC USB debugger)。( |) P I* b3 H6 w$ E1 C7 g
0 U- ^4 Y4 x$ N7 s& i0 ?, S8 q& T n5 E; R8 Z" g- u8 }9 r1 @5 g4 Z
1,调试级别
% e5 T/ p2 m, B* g: k; w' u$ o
* L3 W7 C; U K7 b* HAdvanced Debug System实现了三个级别的调试和仿真。
2 ^: e: Y( F. q% K/ w- |1 p
3 ~2 h9 \! q3 ]5 {- O& o5 X一般根据研发过程中不同的阶段分为三种调试仿真级别:体系结构设计初期的调试,设计中期的调试,和设计末期的调试。% N9 H; B J% h
: n6 P, M5 N! R+ j% e# `2 s) w
下面我们就从三个方面来分别介绍advanced debug system的实现。- W0 Z7 ^' p( C
% ~; u @2 l z0 K
; M8 L2 q1 Y$ O' M& y- G6 V/ [2,体系结构设计初期的调试( I& |1 d. Z: O* I- q
! P- u* b: W' {5 B5 V& v: N首先,就是在体系结构设计初期的调试,这时候体系结构的RTL还没有开始编写,也没有FPGA的验证系统,更没有流片生成最终的ASIC,但是为了达到调试的目的,就需要别写体系结构对应的simulator(模拟器),对于OpenRISC1000来说就是or1ksim。利用or1ksim,我们就可以模拟指令的执行和CPU的行为,此外,随着不断向模拟器中增加额外的模拟模型,还可以模拟串口,模拟内存控制器等。一旦有了比较完善的体系结构模拟器,就可以实现软件和硬件并行开发。Or1ksim内部包含了一个RSPserver,这就意味着GDB可以直接和or1ksim通信,不需要adv_jtag_bridge程序的参与,如下图所示。6 w7 h& a3 { Y
0 o& i% Q3 ~0 Q$ {( D
$ ^. _9 v" @- s! n$ {7 q: y$ R2 @
4 Y4 w3 f. ~0 q7 ]$ @. L+ |+ b. U: v% |! s) S
3,体系结构设计中期的调试- `' ?) }. r0 }& R/ ~
其次,是在体系结构设计中期,在这个时候,体系结构的特性和模块已经基本确定下来了,并且已经编写了对应的RTL,但是还是没有FPGA验证平台,这种情况下,就可以进行RTL级别的emulation(仿真)了。RTL级别的仿真的实现主要有两种方式,一种是在bridge和RTL仿真器之间使用FILE IO,另外一种是使用VPI IO。; B7 q6 s G8 D' I# J
' a6 r9 i6 P7 T
如果采用FILEIO的方式,需要在利用主机的文件系统来完成数据的传递,这就需要在RTL仿真这一端增加一个模块(dbg_comm.v),来读写文件,根据文件内容设置JTAG的状态。在仿真过程中,bridge向文件中写入数据,等待dbg_com的应答。dbg_com收到数据后,根据数据信息,完成对应操作之后,向文件中写入应答数据。Bridge收到应答之后完成一次调试动作。如下图所示:% s/ @, l* s. u. H4 ~, I
' n: O' _, ~- d1 G* `/ r) t: W
Y" w' L+ M# @4 j
8 S* U& Z! ~( E G( y
! Q. `/ y' m4 H, \1 |3 l+ ~
如果采用的是VPI IO的方式,与FILEIO的方式类似,但是在bridge和RTL仿真器之间需要VPI(verilogprogram inteRFace)的支持。VPI既支持支持C语言又支持verilog模块,所以dbg_com模块可以使用VPI的库,而不必通过读写文件的形式就可以与bridge通信了。采用VPI IO方式的仿真系统,如下图所示:- @* A1 p4 ~+ m( x; d1 R" G* H" q
4 M3 h) o/ f. ^
/ `5 t7 w" y1 q& Z* ]0 S
, L6 _+ {7 z$ N6 c; u6 \ \- I$ {/ t2 ?+ G. q% @
4,系结构设计末期的调试
. T+ a* {8 O; `6 H
$ F% h8 y- r) R; w+ Y2 K2 J最后,在体系结构设计的末期,为了进一步提高仿真的精确度,需要在FPGA上做进一步的调试和验证。这种调试级别,就需要购买FPGA开发板和对应的JTAG cable,也就是我们前面最常用的调试方式。其结构如下所示:
; \1 r; I2 c& w
# s6 [; o* ^' V0 s5 y
8 b0 Q- P8 a" F- Z
9 J* i5 v! k* r4 x* p" a% b8 [" {: I4 v( x
5,小结 I5 U/ {: r) Z. k9 _
本小节简单介绍了advanced debug system的系统组成和工作原理,读者可根据自己的具体情况选择不同的调试方式。; {8 A* C b: G8 I5 k5 _
- X# D" ], N& L0 w" u0 G" P( Radvanced debug system的搭建,可分成两部分,在自己的SoC中例化tap和adv_dbg_if等IP core,在PC机上安装adv_jtag_bridge。+ @. }! R, d" ~: b/ g& T( F' f7 ?
, I& _6 Z! M' `+ H
verilog HDL/VHDL的模块例化和linux下软件的安装和使用的具体细节可下载参考 adv_debug_sys_latest.tar.gz中的adv_jtag_bridge的手册获得(http://opencores.org/project,adv_debug_sys)。
1 G5 M; w/ X* q& {6 Y$ q& z, V9 c) d. Y/ X& C; F" y
需要注意的是要实现最终的调试,TAP,cable,bridge,gdb 四者要协同工作才能完成。即bridge要能检测到JTAG cable并开启RSP server,JTAG cable要能连接到TAP,TAP要能扫描链中识别adv_dbg_if。$ p( W8 \2 s- y& n; u; q1 B
- j( ~8 d' r( d) k N [/ W/ |- }enjoy!; X( E0 o5 r8 @( s8 n( j
|
|