一、什么是chipwatcher
在编程开发历程的调试阶段,,,,,,,可以借助一些编译情形集成的工具资助我们更好地定位问题。。。。。。。。当我们完成一份工程代码可是视察不到我们想要的效果时,,,,,,,我们需要进一步确认是哪部分的代码泛起了误差导致得不到我们想要的效果。。。。。。。。
关于MCU来说,,,,,,,我们可以借助JLINK仿真器来实现断点测试,,,,,,,进而视察每一步的数据转变,,,,,,,从而定位到问题所在;;;;;;关于FPGA而言,,,,,,,想要视察内部信号的转变,,,,,,,也有对应的工具可以使用。。。。。。。。
这些工具,,,,,,,差别的芯片厂商凭证自家的编译情形集成了他们各自的工具,,,,,,,例如,,,,,,,Xilinx ISE的chipscope,,,,,,,altera quartus II 的SignalProbe等。。。。。。。。本文中安路TD的chipwatcher也是用于视察电路内部信号转变的工具,,,,,,,可以以为这是一款类似于逻辑剖析仪的工具,,,,,,,只不过视察的信号不是芯片引脚上面的信号,,,,,,,而是电路内部的信号。。。。。。。。
当我们需要定位问题的时间,,,,,,,可以在工具中添加我们想要审查的信号,,,,,,,通过抓取波形来确认信号是否在凭证ONE游戏(中国)有限公司官网-皇马巴塞赞助商需求举行转变。。。。。。。。
二、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中不被显示,,,,,,,此时若是想视察对应的信号,,,,,,,可以回到ONE游戏(中国)有限公司官网-皇马巴塞赞助商代码中加上如下要害词即可:

添加完想要视察的信号后,,,,,,,设置触发条件。。。。。。。。

如图,,,,,,,在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。。。。。。。。
返回列表