调试OpenRISC,需要软件和硬件的协同工作才能实现,其中硬件又包括JTAG cable,JTAG TAP和debug interface三部分,软件也包括JTAG cable的驱动,RSP server和GDB三部分。本小节就从整体出发,简单介绍一下OpenRISC的调试系统。
如果软件和硬件各个子部分以不同组合方式组合在一起,就会出现不同的调试系统,但一般有三种不同的组合方式:
软件部分:
1,or32-linux-gdb,
2,or_debug_proxy(只能针对FT2232的JTAG cable使用)
3,JTAG cable的驱动集成到了or_debug_proxy内部
or_debug_proxy的源码可以在openrisc的SVN服务器下载: http://opencores.org/or1k/OR1K:Community_Portal#Get_source_code
需要注意的是,如果你是用的开发板不是ordb2a的话,也想采用这种方案,那就需要购买单独的JTAG cable(ORSoC USB debugger:http://opencores.org/shop,item,3)
硬件部分:
1,JTAG cable(FT2232)集成到了ordb2a-ep4ce22的板子上。,
2,JTAG TAP使用Igor Mohor写的标准的TAP,这样的话调试orsoc和烧写FPGA本身虽然使用的是一根线,但是使用的是两个JTAG口(FPGA芯片本身的JTAG和SoC中jtag_tap的外部引脚)
3,使用的是adv_dbg_if IPCORE
Advanced Debug System工程是独立于OpenRISC的一个工程。其目标是提供一个可以调试SoC和烧写程序,当然,其目前还是主要用来调试基于or1200的SoC。
Advanced Debug System主要可分成三部分:adv_jtag_bridge,JTAG TAP,adv_dbg_if。
其中adv_jtag_bridge就是上面所说的JTAG cable的驱动和RSP server的组合体。
JTAG TAP一端连接JTAG cable,一端连接adv_dbg_if,是在SoC中负责与JTAG cable通信的一个门户。他本身也是一个ipcore。JTAG TAP目前有4种选择(tap_top,altera virtual jtag,xilinx internal jtag,actel_ujtag),具体采用哪个,可根据自己的具体情况而定。
需要说明的是采用tap_top需要将tap_top的模块端口连到FPGA的外部引脚上,所以需要额外的注意。JTAG cable也需要连到对应的引脚上,这样的话,就需要两条JTAG线,一条用来给FPGA芯片本身使用,另外一条给SoC使用。
而采用其他tap则不需要片外引脚,而是调用FPGA厂家提供的接口连到的FPGA本身的JTAG模块。所以只需要一根JTAG线就可以同时实现配置FPGA和调试SoC。
adv_dbg_if是调试系统内部负责和SoC各个调试模块连接的一个ipcore,就像一个八爪鱼一样,adv_dbg_if模块负责搜集SoC各个模块的情报,通过JTAG TAP送到adv_jtag_bridge手中,adv_jtag_bridge再将情报转交给最终的GDB。同样,GDB也会通过这条通道完成对SoC的调试。
Advanced Debug System项目首页:http://opencores.org/project,adv_debug_sys
可以这么认为,OpenOCD是or_debug_proxy的一个升级版,or_debug_proxy只支持ft2232 based的JTAG cable,而OpenOCD由于引入了UrJTAG驱动包,所以就支持很多JTAG cable。
如果你的开发板采用的不是ordb2a,有不想买expensive的USB debugger,而OpenOCD又恰好支持你现在的JTAG cable,那采用OpenOCD将是一个不错的解决方案。
关于OpenOCD,请参考:http://opencores.org/or1k/OpenOCD
此外,除了上面三个方式外,OpenOCD还可以和adv_debug_sys配合使用,以提供更强大的调试功能。具体细节可参考OpenOCD的user manual。
本小节从宏观角度上分析了OpenRISC的调试系统解决方案,如果你还在为你的or1200 based SoC不知道采用哪种方式而犹豫不决,或许本小节的内容会是一个不错的参考。