一、ChipScope简介
Chip Scope是Xilinx提供的一个检验FPGA设计的工具,本质是一个虚拟的逻辑分析仪,能够调用FPGA内部的逻辑资源对代码中的各个变量进行抓取分析,与Modisim等FPGA的仿真工具不同的是,ChipScope可以直接反应代码在实际硬件中的执行情况,从而能够更加有效地定位设计中的问题。
1、建立完整的工程;
2、在Design——>Implementation中的任意空白处右击,在弹出的菜单中选择New Source…命令;
3、选择ChipScope Definition and Connection File,键入File name***,点击Next,会生成文件的summary描述。
4、在Design——Implementation的窗口中生成一个***.cdc的文件,添加在工程中,双击***.cdc文件,进行ChipScope基本参数的配置;
5、第一个界面是默认信息,不做修改,直接点击Next;
其中
Use SRLs:Shift Register LUT,用移位寄存器的查找表代替触发器(flip flops)和乘法器,可以有效减少FPGA内部资源,提高chipscope性能。
Use RPMs:Relationally Placed Macros,让编译器用FMAP、HMAP、ROM、RAM等相关性的宏模块,使逻辑设计合理,提高速度和性能,节省FPGA资源。
6、第二个界面也不需要做任何设置,直接Next;
7、第3个界面,Trigger Parameters,Number of input Trigger Ports可以设置触发端口的数量,Trigger With设置触发位宽,Match Type触发类型:Basic wedges,即需要监测的信号的数量,每个信号的位宽,以及每个信号的触发条件,然后点击Next。
说明:
(1) 每个Trigger Ports都可以有最多16bit的位宽,可以设置多Trigger Ports,不同的Trigger Ports之间可以进行丰富的各种组合触发方式,这较之普通的逻辑分析仪要灵活很多。
(2) 建议先把触发宽度(Trigger Width)选择为最大值256,后面等添加完成后回来改为信号的总宽度。
(3) 可以将Trigger Ports数量设为1,Trigger Width数量设为256,这就是ChipScope和ILA的区别,Chip Scope可以同时观察整个工程中的信号,而ILA只可以一个核观察一个模块中的信号。
Match Type的六种类型:
8、第4个界面,Capture Parameters,设置Date Depth:采样深度,即屏幕上可以显示的点的个数,Sampling On:触发条件,选择Rising Clock Edge,即上升沿触发。(采样深度虽然越大越有利于调试,但必须考虑FPGA片内的存储器资源情况,若设置的深度导致存储总量超过FPGA资源,则无法通过编译)
说明:Data Same As Trigger:抓取的信号既可以触发信号,也可以作为数据信号。
建议:对于inout信号(双向信号),最后选择只作为数据信号,不作为触发信号。
9、第5个界面,Net Connection页面,选择采样时钟和触发/采样信号,单击界面下方的Modify Connection按钮。
(1)采样时钟的匹配,在右上方的Net Selections中选择Clock Signals,在左下角的方框中选择系统时钟信号,最后点击右下方的Make Connections按钮,完成时钟匹配后,clk信号就出现在Clock Signals下方CH:0右侧,说明采样时钟的匹配已经完成。
(2)触发/数据采样 Trigger/Data Signals
在右上方的Net Selections中选择Trigger/Data Signals,按照上述步骤,选择信号,点击Make Connections,信号会出现在Trigger/Data Signals下方的列表中,即可完成采样信号的匹配。
点击OK后退出Select Net界面
10、完成信号匹配设置,点击Return to Project Navigator,完成参数配置。
11、接着双击Generate Programming File生成bit文件
12、连接好开发板的Jtag线并上电。双击Analyze Design Using ChipScope,打开ChipScope的界面如下图所示。
13、如果Jtag连接正常的话,会弹出下面的窗口,表示已经找到了FPGA的型号为:XCS****
14、点击OK,左上角的P标签变成绿色,Jtag Chain多出了FPGA型号的标签
15、左键单击选中DEV:0 My Device0(FPGA型号),右击弹出菜单栏,在菜单栏中选择Configure…
16、在弹出的界面中勾选Import Design-level CDC File和Auto-creat Buses两个选项
17、点击OK,bit文件就被下载到开发板中了,然后进入以下界面
18、双击Trigger Setup和Wave form分别打开设置触发的窗口和波形窗口
说明:触发窗口中的
Depth:就是我们之前.cdc文件中设置要抓取的数据深度4096
Position:满足触发条件的数据的偏移位置,默认为0,如果设置为100,表示把触发条件满足之前的100个数据和触发条件满足之后的 3996(4096-100)个数据显示到波形窗口中,这个可以捕捉到在触发之前的部分信息,更有助于定位问题。
Storage Qualification参数是在之前.cdc文件勾选了Enable Storage Qualification这个选择后才有,一般选择默认的All Data。
19、点击右上角的图标可将Trigger Setup窗口放大,然后设置触发条件为R(R表示上升沿触发),然后点击>图标进入等待触发状态。
20、等待状态
21、按照鼠标左键在波形窗口中画一个矩形框,可以把波形窗口放大,看到更多的波形细节。
22、如果想看O_led_out总线的模拟波形,可以双击Bus Plot标签,在弹出的界面中选中O_led_out总线即可以。
三、防止信号被优化的方法
方法1:
在想要抓取的所以信号前面加上(KEEP = “TRUE”)
例如:
(KEEP = “TRUE”) reg [3:0] counter;
方法2:
选中Synthesis-XST,鼠标右键在弹出的菜单栏中选择Process Properties…
在弹出的窗口中选择-keep_hierachy为Soft
然后重新综合,重新在.cdc中选择要抓取的信号。
方法3:
说明:
1、用ILA逻辑分析仪抓信号有两种方式:.cdc文件方式和例化ILA核方式。
2、在cdc文件中防止信号被优化有两种方式:keep_hierachy选为Soft或YES,增加冗余逻辑。
第二种方法:在RTL代码中进行一些声明。
对于wire型号,对于ISE12.3以后的版本,XST综合,可以使用(* KEEP=“TRUE”*) wire [15:0] AD_reg;这样的声明,就可以在查找信号的信号找到wire类型的AD_reg信号进行观察。
使用方法示例如下图:
注意:(* KEEP=“TRUE”) 编写时()和之间不能加空格!!!