原创 回顾Virtual JTAG在一个项目中的成功应用

2010-3-10 10:29 6539 7 20 分类: FPGA/CPLD

        几天前看到特权同学在学习使用Virtual JTAG,心中很是高兴:这么好的一个工具,终于有同行认真对待它,并且开始探索着使用它了。不知道特权同学使用的情况如何。 riple
        这些天在回顾两年前做的一个产品。得益于当时每天都写下的几行工作记录,这个产品的开发过程我还能回忆起来。在这个产品开发的各个阶段,Virtual JTAG和Tcl都发挥了重要作用。投入几天的时间开发一个小工具,在完成后就能持续地产生效益。Virtual JTAG在加快开发速度,提高调试效率方面发挥了重要的作用。 riple
       
        1. 应用场合之一:在开发初期,实现对FPGA外部接口芯片的灵活控制——KSZ8842接口控制台工具。我们的产品需要连接网络,并通过一个带本地接口的三端口交换机芯片KSZ8842实现和宿主机网络的共享。在最初拿到这款芯片的时候,我们很是为它复杂的地址扩展方式和功能配置选项头疼。虽然网站上提供了参考设计和驱动程序,但是我们做的是FPGA直接连接和控制KSZ8842,用C语言写的嵌入式代码帮助不大。 riple
        当时我们最需要的,是通过FPGA灵活地读写KSZ8842的寄存器,尝试交换芯片的各种功能配置,并通过交换芯片的本地接口实现网络报文的收发。我们应用Virtual JTAG,编写了一个简单的Tcl控制台。通过JTAG下载电缆,我们可以从运行在调试PC机上的Tcl控制台读写FPGA的内部逻辑,在FPGA和KSZ8842的接口上产生读写波形,向KSZ8842发送任意地址的读写操作。这一工具除了可以执行简单的单步读写操作,还可以读入一个脚本文件,实现批量的配置输入。利用这个工具,我们打通了从FPGA到网络的数据通路,积累了一系列的配置脚本。这些工作,为后期采用HDL代码编写状态机自动控制KSZ8842打下了坚实的基础。 riple



        2. 应用场合之二:贯穿于开发过程的始终,实现对FPGA外部接口总线读写事务的监听——PATA接口命令捕获和解析工具。在先前开发和调试其它PATA接口的产品时,我们经常需要捕获宿主机给PATA接口发送的命令,并通过对这些命令的内容和先后顺序的分析,推测宿主机BIOS的行为。以前的产品中有一颗嵌入式CPU芯片,通过CPU芯片的串口,这些信息可以很容易地传送到调试PC机上。当前这款产品的全部功能是用FPGA来实现的,没有串口,只能利用FPGA芯片的JTAG口。 riple
        首先在FPGA中捕获并存储宿主机发送给PATA接口的命令,然后应用Virtual JTAG读取FPGA中存储的命令序列,通过JTAG下载电缆传送到调试PC机上察看。借助于运行在调试PC机上的Tcl程序,这些原始的命令序列,可以得到进一步的解析,并且以一种易读易懂的方式呈现给调试者。应用这个工具,我们还捕获了宿主机与真正的硬盘之间传输的数据,其中最有用的是硬盘对宿主机Identify命令返回的硬盘参数信息。这些信息,给我们制定自己的硬盘参数提供了参考。 riple
        与此类似,在采用CPU和FPGA协同工作的嵌入式系统中,使用这一工具也可以从FPGA一侧捕获和解析CPU对FPGA接口上的读写操作。获得的信息可以辅助验证CPU与FPGA协同工作的正确性。 riple
       
        3. 应用场合之三:在开发过程的中后期,实现对尚未开发完成部分的功能模拟,验证已经完成部分的功能,隔离可能的故障点——PATA接口虚拟硬盘工具。在先前的产品中,PATA接口在FPGA上的程序已经开发好了,移植到新的产品上并不困难。PATA接口移植工作的正确性需要尽早验证。仿真验证的速度和覆盖率都有限,最好的验证是上板进行宿主机与PATA接口的硬件实测。但是由于网络接口一侧的开发还在进行中,并且出于隔离故障点的考虑,这时还不能进行集成实测。 riple
        当时我们需要的是抛开网络接口,尽快上板验证PATA接口移植工作的正确性。在上面提到的PATA接口命令捕获和解析工具的基础上,我们开发了基于Virtual JTAG的虚拟硬盘。通过JTAG下载电缆,我们把捕获到的宿主机发送给PATA接口的命令传送到调试PC机上,运行在调试PC机上的Tcl程序把收到的命令解析后分类为读写两类命令。针对读命令,可以读取调试PC机上存储的一个文件,把读取的数据通过JTAG下载电缆返回给PATA接口;针对写命令,可以把宿主机从PATA接口写入给FPGA的的数据,通过JTAG下载电缆传递给调试PC机,这些数据就可以写入到调试PC机上的文件中。这样,就通过Virtual JTAG,在调试PC机上虚拟出了一个可读可写的微型硬盘。 riple
        这个虚拟的微型硬盘虽然速度慢(通过JTAG下载电缆传输大量的数据),但是填补了后端设备尚未开发完成的功能,构成了一个可以实际上板运行的系统。有了这个系统,我们就可以实际调试一个部分完成的产品,尽早发现已经完成部分在实现上的错误。这样做比在仿真环境中调试快得多和实际得多。 riple
        同理,如果网络接口部分先开发完成,也可以不等待PATA接口的开发,采用Virtual JTAG虚拟前端设备的读写请求,进行网络接口部分及上层协议的硬件实测。 riple

        4. Tcl的应用:对上述虚拟硬盘的扩展——模拟服务器网络响应的工具。在网络部分初步开发出来之后,跟服务器之间通过网络的交互测试就是必需的了。由于交互的复杂性,通过仿真来验证是不够的。服务器程序在原有的产品中早就开发成熟并已经长期使用了,但是在服务器上调试新产品的网络部分并不容易,交互的具体内容是看不到,也不容易控制的。 riple
        我们需要的是模拟服务器对被测设备的响应,并获得交互过程中的各种命令参数。针对这一问题,在调试PC机上,我们用Tcl程序实现了对UDP报文的监听解析和返回报文的发送,模拟了服务器对被测设备发送的读写请求的响应。这里虽然没有用到Virtual JTAG,但是这一工具是在上述PATA接口虚拟硬盘工具成功使用的启发下开发的,也通过在调试PC机上读写文件实现了虚拟硬盘,并能在调试PC机上提供详尽的网络报文接收和发送参数。所不同的是,这一次虚拟硬盘的底层传输介质不再是JTAG下载电缆,而是真正的网络;上层的协议也不再是简单的ATA读写命令,而是运行在UDP/IP之上的RPC协议。 riple
        通过这一工具,我们把原本复杂甚至神秘的服务器端操作,详细清晰地呈现在调试者眼前。这个在调试PC机上虚拟的网络硬盘虽然在性能上比不上在服务器上运行的网络硬盘,但是其容量和速度已经可以支持Windows操作系统的安装和启动了。在这一工具的帮助下,我们在开发中及早地实现了集成实测和调试,甚至在服务器宕机数日的情况下都能继续调试和开发。这一工具,进一步演化为演示系统中的服务器端程序,在一台运行Windows操作系统的笔记本上就可以实现Linux服务器的基本功能,简化了演示系统的搭建过程。 riple


       上面这些工具是应用Virtual JTAG和Tcl辅助硬件调试的一个尝试,在我们的开发过程中得到了成功的验证。整理出来,供大家参考。 riple

相关链接:非常有用的Virtual JTAG——比串口还好用学习Tcl(四)——UDP收发包


PARTNER CONTENT

文章评论13条评论)

登录后参与讨论

用户1856254 2015-10-23 14:55

你好,我指的是自己写的,不是调用IP核的

ash_riple_768180695 2015-10-22 10:44

如果只需要从in-sys content editor里读写存储器内容,不需要使用VJ。只需要在例化memory时,配置一个in-system editable选项即可。需要注意的是,选择in-system editable,会占用双端口RAM的一个端口。如果这样会造成使用冲突的话,可以考虑在正常工作的RAM旁边,再例化一个in-system editable的“影子RAM”,用于调试查看。

用户1856254 2015-10-22 09:37

请问,如果在自己写的存储器里加入这个virtual JTAG,是不是就可以在 in-system memory content editor看到存储器里的数据了?

用户1132881 2010-9-7 13:33

VJ是个好东西,还在琢磨中

ash_riple_768180695 2010-8-5 11:37

其实,无论是In-system sources and probes,还是In-system memory content editor,甚至是SignalTap II,最底层都是VJ。这些Quartus II自带的工具和我上面开发的工具,都是在VJ基础上开发的上层应用。

用户568747 2010-4-20 14:47

总是听riple提起这个工具,但是一直没机会学习使用,看起来的感觉跟in-system sources and probes 有点类似, 想请教下riple 两者差别大吗?

ash_riple_768180695 2010-3-10 11:48

谢谢wind330朋友的提醒,我已经更新了文章内容,添加了应用场合说明。

ash_riple_768180695 2010-3-9 14:58

VJI提供了一个读写FPGA寄存器的通路。只要你的调试方案需要读写FPGA内部的寄存器,就可以考虑使用这个工具。具体的应用还是要看你的调试需要。我在这里举的三个例子,以及链接中给出的文章都是对应用场合的说明。

ash_riple_768180695 2010-3-9 14:55

VJI是一个调试工具,就像仿真测试代码一样,在最终的产品中没有体现,但是在开发过程中有重要的意义。调试就是VJI的应用场合。

用户1122702 2010-3-9 10:10

以便后头产品开发的前期就能把VJTAG给规划进去。
相关推荐阅读
ash_riple_768180695 2015-12-18 11:06
学习示例程序:FPGA快速系统原型设计--敏捷实践
        学习与开发板配套的示例程序,是敏捷实践的起点。示例程序是厂商针对开发板上提供的硬件资源和接口量身定做的工程,可以展示其FPGA芯片的功能和性能特点。从示例程序入手最大的好处就是:示...
ash_riple_768180695 2015-11-03 16:46
开发板选取:FPGA快速系统原型设计--敏捷实践
    既然是“实践”,就不能只谈编码和仿真,必须要上板运行、调试。这个虚拟项目的目标是实现一块兼容Intel82574L以太网控制器的千兆网卡,需要运行在一块具备PCIe接口和10/100/10...
ash_riple_768180695 2015-10-22 12:41
开篇:FPGA快速系统原型设计--敏捷实践
    虽然借用了 “系统原型开发”的标题,本系列文章将围绕FPGA IP级别的开发这个主题展开,如果可能的话,将扩展至FPGA System级别的开发。     先上一篇PPT:RSPwFP...
ash_riple_768180695 2013-08-26 10:21
学习SystemVerilog(二)——学习它的理由
    学习SystemVerilog的理由也很多,我在阅读SystemVerilog for Design 和 SystemVerilog for Verification两本书前言的过程中,总...
ash_riple_768180695 2013-08-26 10:19
学习SystemVerilog(一)——不学习它的理由
    想要学习SystemVerilog已经很久了。曾经尝试通过Accellera网站上给出的LRM学习,怎奈内容众多,找不出入手点和重点,只能望而却步。虽然手头有三本SystemVerilog...
ash_riple_768180695 2011-06-26 23:20
Hardware-Assisted IEEE1588 Implementation Analysis
06/18/11 11:00:05 PM         最近一段时间在研究IEEE1588-2008精确时间同步协议(PTP)。该协议可以在软件中实现,如果需要提高时间同步...
EE直播间
更多
我要评论
13
7
关闭 站长推荐上一条 /3 下一条