主要的FPGA厂商针对器件的在线调试都提供了嵌入式逻辑分析仪内核,这些知识产权模块插入FPGA设计中,同时提供触发功能和存储功能。它们使用FPGA逻辑资源实现触发电路;使用FPGA存储模块实现存储功能;使用JTAG配置内核操作,并用它将捕获的数据传送到PC上进行查看。
由于嵌入式逻辑分析仪使用内部FPGA资源,因此其通常用于大型FPGA,这些大型FPGA可以更好地消化插入内核带来的开销。一般来说,用户希望内核占用的FPGA逻辑资源不超过可用资源的5%。
与其他调试方法一样,还要知道这种方法存在的部分矛盾。
2.1 针脚与内部资源
嵌入逻辑分析仪内核不使用额外的测试针脚,因为它通过现有的JTAG针脚访问内核。这意味着即使设计受到FPGA针脚限制,仍可以使用这种方法。矛盾在于,它使用的内部FPGA逻辑资源和存储模块可以用来实现设计。此外,由于使用片内内存存储捕获的数据,因此内存深度一般相对较浅。
2.2 探测与运行模式
嵌入式逻辑分析仪核心的探测非常简单,它使用现有的JTAG针脚。矛盾在于,尽管嵌入式逻辑分析仪可以查看FPGA操作,但没有一种方式将这些信息与电路板级或系统级信息时间关联起来。而将FPGA内部的信号与FPGA外部的信号关联起来对解决棘手的调试问题至关重要。在分析方法上,嵌入式逻辑分析仪只能进行状态分析。
2.3 成本与灵活性
大多数FPGA厂商提供了嵌入式逻辑分析仪内核,而其价格要低于全功能外部逻辑分析仪。虽然用户希望更多的功能,但嵌入式逻辑分析仪内核的功能无论从通用性、分析方式、触发能力,还是从存储和分析能力都弱于全功能外部逻辑分析仪,而用户通常需要这些功能来捕获和分析棘手的调试问题。例如,嵌入式逻辑分析仪只能在状态模式下操作,它们捕获与FPGA设计中已有的指定时钟同步的数据,因此不能提供精确的信号定时关系。
3 外部逻辑分析仪
由于嵌入式逻辑分析仪方法存在部分限制,FPGA设计人员采用外部逻辑分析仪方法,来利用FPGA的灵活性和外部逻辑分析仪的处理能力,如泰克TLA系列逻辑分析仪。
在这种方法中,有用的内部信号路由到FPGA没有使用的针脚上,然后连接到逻辑分析仪上。这种方法提供了非常深的内存,适合调试出现故障和实际导致该故障的原因在时间上相距很远的问题;对于需要采集大量数据进行后期分析的设计人员也非常必要。另外,它还可以把内部FPGA信号与电路系统中的其他活动时间关联起来。
与嵌入式逻辑分析仪方法一样,也需要考虑许多矛盾。
3.1 针脚与内部资源
外部逻辑分析仪方法采用非常少的逻辑资源,不使用FPGA内存资源。它释放了这些资源,来实现所需功能。其矛盾在于,必须增加专用于调试的针脚数量,而设计时需要使用这些针脚。
3.2 探测与工作模式
外部逻辑分析仪探测要比嵌入式逻辑分析仪方法要求的探测复杂一些。必须确定怎样使用逻辑分析仪探头探测FPGA内部信号,而不能使用电路板上已有的JTAG连接器。最简便的方式是在电路板中增加一个测试连接器,这可以简便地把FPGA信号与系统中的其他信号关联起来。
3.3 成本与灵活性
尽管外部逻辑分析仪的购买价格确实要高于嵌入式逻辑分析仪,但使用外部逻辑分析仪可以解决更加广泛的问题。逻辑分析仪不仅可以用于FP
GA调试,还可以用来解决其他数字设计挑战,它被公认为是进行通用数字系统硬件调试的最佳工具。外部逻辑分析仪能够实现更加灵活的采集模式和触发功能。通过外部逻辑分析仪,可以设置最多16个不同的触发状态(每一个状态含有16个条件判断分支),每一个通道提供256 MB的内存,并且可以在定时分析模式下以高达125 ps的分辨率(8 GS/s采样) 捕获数据。
4 FPGAView进行FPGA调试
外部逻辑分析仪方法有效地利用了FPGA的处理能力,并根据需要重新对设备配置,将有用的内部信号路由到通常很少的针脚上。这是一种非常有用的方法,但它也有一定的局限性:用户每次需要查看一套不同的内部信号时,都必须改变设计(在RTL级或使用FPGA编辑器工具),把希望的信号组路由到调试针脚上。这不仅耗时,而且如果要求重新汇编设计,还会改变设计的定时,可能会隐藏需要解决的问题。当更改FPGA内部测试信号时,在外部逻辑分析仪上的被测信号名称需要手工进行更新。一般说来,调试针脚数量很少,内部信号与调试针脚之间1:1的关系限制着设计查看能力和洞察力。为克服这些局限性,出现了一种新的FPGA调试方法,它不仅提供了外部逻辑分析仪方法的所有优势,还消除了主要局限性。FPGAView软件在与泰克TLA系列逻辑分析仪配套使用时,为调试FPGA和周边硬件电路提供了一个完整的解决方案,如图2所示。
这种组合可以时间关联的查看FPGA的内部活动和外部活动;迅速改变FPGA内部探点,而无须重新汇编设计;每个针脚监测多个内部信号;在TLA逻辑分析仪上自动更新切换的内部信号名称。此外,FPGAView可以在一台设备中处理多个测试内核(适合监测不同的时钟域),并可以在一个JTAG链上处理多台FPGA设备。