一、什么是chipwatcher
在编程开发过程的调试阶段,,,,,,,,能够借助一些编译环境集成的工具援手我们更好地定位问题。。。。。。当我们实现一份工程代码但是观测不到我们想要的了局时,,,,,,,,我们必要进一步确认是哪部门的代码出现了误差导致得不到我们想要的了局。。。。。。
对于MCU来说,,,,,,,,我们能够借助JLINK仿真器来实现断点测试,,,,,,,,进而观察每一步的数据变动,,,,,,,,从而定位到问题地点;;;;;;;对于FPGA而言,,,,,,,,想要观察内部信号的变动,,,,,,,,也有对应的工具能够使用。。。。。。
这些工具,,,,,,,,分歧的芯片厂商凭据自家的编译环境集成了他们各自的工具,,,,,,,,例如,,,,,,,,Xilinx ISE的chipscope,,,,,,,,altera quartus II 的SignalProbe等。。。。。。本文中安路TD的chipwatcher也是用于观测电路内部信号变动的工具,,,,,,,,能够以为这是一款类似于逻辑分析仪的工具,,,,,,,,只不外观测的信号不是芯片引脚上面的信号,,,,,,,,而是电路内部的信号。。。。。。
当我们必要定位问题的时辰,,,,,,,,能够在工具中增长我们想要查看的信号,,,,,,,,通过抓取波形来确认信号是否在凭据ca88登陆平台需要进行变动。。。。。。
二、Chipwatcher使用流程
首先,,,,,,,,一个FPGA工程常见的组成如下:
1. 职能代码文件:后缀为.v的文件,,,,,,,,通俗地讲就是我们自己写的代码。。。。。。
2. 例化的IP文件:通过编译软件来例化的IP的代码,,,,,,,,分歧厂商例化后的IP文件名后缀有差距,,,,,,,,安路的TD中直接将例化结束后的.v文件参与工程即可。。。。。。这类文件不是必须的,,,,,,,,有效到必要的IP就加,,,,,,,,没有不加。。。。。。
3. IO约束文件:用来界说整个工程的输入输出信号对应的具体芯片引脚是哪个。。。。。。这类文件能够不加,,,,,,,,不加的话编译工具会自动分配IO口。。。。。。
4. 时钟约束文件:即SDC文件。。。。。。同IO约束文件,,,,,,,,不加的话编译器会自己约束,,,,,,,,因而当工程较大时序较为复杂时通常必要我们自己约束。。。。。。
以上四种文件通过编译后一路天生的整个工程的bit文件烧录进FPGA芯片后,,,,,,,,如果代码职能正常,,,,,,,,则芯片起头工作。。。。。。
如果职能不正常,,,,,,,,当我们想要观察电路内部信号的时辰,,,,,,,,我们还必要在工程中参与另一类文件,,,,,,,,即第五类文件,,,,,,,,而后将这五类文件统一打包成bit文件后下载进FPGA,,,,,,,,此时能力够利用工具观测和抓取到我们想看的信号。。。。。。
这第五类文件,,,,,,,,在TD中,,,,,,,,即为Chipwatcher工具天生的.cwc文件。。。。。。
下图展示了一个参与.cwc文件后的工程目录(该工程中未参与时序约束文件):

天生cwc文件的过程如下:
Tools -> Debug Tools -> chipwatcher

进入到chipwatcher页面:

如上图,,,,,,,,①区是选择采样时钟和采样深度,,,,,,,,采样时钟的选择把稳要选择全局时钟中频率最高的时钟,,,,,,,,采样深度越深(即数值越大),,,,,,,,最平天生的bit文件所占用的芯片资源越多。。。。。。
②区是增长想观察的信号的区域,,,,,,,,增长步骤:在该区域右键后,,,,,,,,选择add nodes进入到信号选择的页面,,,,,,,,如下:

如图能够选择想要观察的信号至右侧,,,,,,,,全数选择结束后,,,,,,,,点击OK即可。。。。。。
必要把稳的是,,,,,,,,有些信号会自动被编译器优化,,,,,,,,而在list中不被显示,,,,,,,,此时若是想观测对应的信号,,,,,,,,能够回到ca88登陆平台代码中加上如下关键词即可:

增长完想要观察的信号后,,,,,,,,设置触发前提。。。。。。

如图,,,,,,,,在trigger enable栏选择触发信号,,,,,,,,在rigger condition栏选择触发前提(右键)
触发前提共有以下几种:

别离暗示低电平触发、高电平触发、上升沿触发、降落沿触发和边缘触发。。。。。。

在如上图处设置触发信号之间的关系。。。。。。图中设置为或,,,,,,,,即只有其中一个信号满足前提即可。。。。。。
上图中的整体触发前提设置结束后可叙述为:当int_mem_we信号或int_mem_re信号其中之一为高电平时,,,,,,,,抓取当前int_mem_wdata[31 :0]、int_mem_addr[10 :0]、int_mem_rdata[31 :0]、int_mem_we和int_mem_re的波形。。。。。。
编纂结束后即可保留文件。。。。。。

保留后天生对应的cwc文件,,,,,,,,同时将文件参与工程,,,,,,,,最后编译下载至开发板。。。。。。

(注解:①为将天生的cwc文件参与工程,,,,,,,,②为编译工程,,,,,,,,③为将bit文件下载至开发板)
下载成功后,,,,,,,,返回chipwatcher设置页面,,,,,,,,如下图选择single trigger,,,,,,,,即单次触发。。。。。。

当法式运行并满足触发前提时,,,,,,,,chipwatcher会抓取到波形,,,,,,,,如下:

三、FPGA调试与MCU调试的一些思路差距
Chipwatcher的调试过程大体如第二章中所示,,,,,,,,但是很长一段功夫,,,,,,,,我并没有在chipwatcher中观察到任何波形,,,,,,,,究其原因是没有从MCU调试的思想转变过来。。。。。。
MCU的断点调试,,,,,,,,能够以为是一步一步执行的,,,,,,,,没有点击下一步之前,,,,,,,,法式会一向停顿在当前地位(除犯法式跑飞)。。。。。。
而FPGA调试没有这种机造,,,,,,,,当bit文件下载至芯片后,,,,,,,,法式是一向执行的,,,,,,,,而点击single trigger后只不外是当满足触发前提时抓取当前波形而已。。。。。。抓取结束会显示波形,,,,,,,,法式却仍旧在持续执行,,,,,,,,不会停顿在抓取结束的那一刻。。。。。。
当我使用chipwatcher观察AHB和谈传输时,,,,,,,,没有在数据线和地址线上面观察到波形就是没有意识到这点。。。。。。在bit文件下载进芯片时传输就已经起头了(对比MCU的调试,,,,,,,,通常MCU调试起头时,,,,,,,,环境通常会在main函数肇始自动设置断点),,,,,,,,如果传输在我开启触发按键前就已经实现,,,,,,,,则传输线上就会一向观察不到数据,,,,,,,,触发前提也会一向不成立。。。。。。
因而,,,,,,,,为了确保可能顺利抓取到传输的数据,,,,,,,,必要在传输前设置相应的延时,,,,,,,,保障当点击single trigger,,,,,,,,chipwatcher起头凭据设置的触发前提抓取波形时,,,,,,,,数据的传输还没有起头。。。。。。
例程是MCU和FPGA凭据AHB和谈进行通讯,,,,,,,,因而后来我在MCU的工程中增长了一段延时:

确保留出足够的功夫来操作chipwatcher。。。。。。
返回列表