riple

Stay Hungry, Stay Foolish.

Avalon-MM总线上的vjtag master总线调试工具

0
阅读(3418)

想了很久,昨天终于做成了——Avalon-MM总线上的vjtag master。

Virtual JTAG可以很方便地用来向FPGA的内部逻辑输入激励,或者从FPGA的内部逻辑读取信息,输入和读取的动作可以完全受控于Tcl程序,而Tcl程序又可以实现很灵活的控制序列和友好的人机交互界面,Virtual JTAG + Tcl这样一种组合使得FPGA的调试具备了良好的可控性和可观测性。

以往Avalon-MM总线的调试多借助Nios II CPU来实现,Nios II可以向总线上的从设备发起各种操作序列,并且可以把操作的结果通过UART反馈给调试者。但是这一调试环境是以一系列已经调试成功的代码作为先决条件的。为了一个很简单的调试,调试者也不得不编译一定量的代码;如果需要实现一定的人机交互功能,还需要UART的配合。对于像我这样从硬件角度入手学习 Avalon-MM总线的人来说,这是一个不低的门槛。

所以,如何把Virtual JTAG + Tcl这样易用的调试组合应用到Avalon-MM总线上,替代Nios II进行SOPC Builder的调试,一直是我在思考的一个问题。

细想一下,其实也不难。只要把Virtual JTAG包装成一个Avalon-MM总线的主设备,并实现基本的主设备读写操作就成了。

Virtual JTAG最适宜实现数据的操作,对于总线传输控制信号的操作不是很直接,需要采用边沿提取逻辑把Virtual JTAG的状态信号转化为Avalon-MM总线的同步操作信号,还需要结合waitrequest信号实现Avalon-MM总线的特定握手关系。

采用这样的方式,Avalon-MM总线读操作可以分解为地址移入,读控制信号移入,waitrequest状态信息移出和判断,数据移出四步操作;Avalon-MM总线写操作可以分解为地址移入,数据移入,写控制信号移入,waitrequest状态信息移出和判断四步操作。

实现了读写操作,再配合一段交互式命令输入的循环代码就可以实现在命令行控制Avalon-MM总线的目的了。

此外,为了支持中断信号,还加入了中断信息读取的操作。

压缩文件rar是添加好的SOPC Builder模块,操作很简单,在命令行运行quartus_stp -t avalon_vjtag_master.tcl即可。

操作界面示例:

Baidu
map