1/47ChipScopePro实例教程宋存杰1.ChipScopePro简介ChipScopePro的主要功能是通过JTAG口、在线实时地读出FPGA的内部信号。基本原理是利用FPGA中未使用的BlockRAM,根据用户设定的触发条件将信号实时地保存到这些BlockRAM中,然后通过JTAG口传送到PC机,显示出时序波形。一般来说,ChipScopePro在工作时需要在用户设计中实例化两种核:一是集成逻辑分析仪核(ILAcore,IntegratedLogicAnalyzercore),提供触发和跟踪捕获的功能;二是集成控制器核(ICONcore,IntegratedControllercore),负责ILA核和边界扫描端口的通信,一个ICON核可以连接1~15个ILA核。ChipScopePro工具箱包含3个工具:ChipScopeProCoreGenerator(核生成器)、ChipScopeProCoreInserter(核插入器)和ChipScopeProAnalyzer(分析器)。ChipScopeProCoreGenerator的作用是根据设定条件生成在线逻辑分析仪的IP核,包括ICON核、ILA核、ILA/ATC2核和IBA/OPB核等,设计人员在原HDL代码中实例化这些核,然后进行布局布线、下载配置文件,就可以利用ChipScopeProAnalyzer设定触发条件、观察信号波形。ChipScopeProCoreInserter除了不能生成IBA/OPB核和ILA/ATC2核以外,功能与ChipScopeProCoreGenerator类似,可以生成ICON核和ILA核,但是它能自动完成在设计网表中插入这些核的工作,不用手工在HDL代码中实例化,在实际工作中用得最多。下图为ChipScope的两种使用流程图,左侧为使用ChipScopeProCoreGenerator流程。右侧为使用ChipScopeProCoreInserter的流程。两种方法各有优缺点,但由于ChipScopeProCoreInserter更方便一些,可以较好地满足大多数调试要求,建议优先掌握。本次练习中,第3、4两章主要描述了ChipScopeProCoreInserter的流程。第5章简要描述了使用ChipScopeProCoreGenerator的流程。附录中位实验例程的源代码。2/472.创建简单的ISE工程2.1新建工程ISE启动Xilinx-ISE。3/47新建Project。File-NewProject。填入工程的名字以及所在路径。Next。选择工程所对应的开发板的器件类型。Next。4/47创建源文件窗口。因为我们已有了源文件,所以这里直接点击Next。5/47添加已有的源文件到工程中。选择源文件led.v与led_top.v,打开。由于事先已经把两个源文件都放到了工程目录下,所以不用选择CopytoProject,Next。6/47直接点击Finish,完成工程的创建。7/47选择默认的Synthesis/Imp+Simulation即可。OK。2.2绑定管脚在Processes区域中,选择UserConstraints下面的AssignPackagePins,右键点击Run。8/47绑定管脚的约束,需要建立UCF文件,点击Yes。自动打开XilinxPACE软件,绑定管脚,时钟输入clock与B8相连,复位信号reset_n与switch[0]L13相连,led的输出信号diode与开发板上8个led灯相连。I/ONameI/ODirectionLocationClockInputB8Diode[0]OutputF12Diode[1]OutputE12Diode[2]OutputE11Diode[3]OutputF11Diode[4]OutputC11Diode[5]OutputD11Diode[6]OutputE9Diode[7]OutputF99/47Reset_nInputL13Ctrl+S,保存,在弹出框中选择XSTDefalut即可,OK。然后关闭XilinxPACE软件。2.3综合在Processes区域中,选择Synthesize–XST,右键点击Run。综合完成后,Synthesize–XST前面会出现绿色的对勾。表示综合完成且没有任何错误和警告。10/472.4实现在Processes区域中,选择ImplementDesign,右键点击Run。连续执行翻译Translate、映射Map、布局布线Place&Route工作。11/472.5产生编程文件在Processes区域中,选择GenerateProgrammingFile,右键点击Run。2.6下载编程文件在Processes区域中,选择GenerateProgrammingFile下面的ConfigureDevice(iMPACT),右键点击Run。12/47打开iMPACT软件。选择使用JTAG扫描链配置设备。为FPGA芯片选择编程文件led_top.bit。启动时钟切换为JtagClk。13/47另外两个直接点击Cancel即可。同上。14/47右键点击FPGA芯片图标,选择编程Program。15/47点击OK。下载成功。可以看到开发板上的LED灯开始流动点亮。16/473.配置ChipScopeProCoreInserter3.1添加ChipScopeCoreInserter工程文件选择ChipScopeDefinitionandConnectionFile,设置文件名称。选择需要观察内部信号的源文件。17/47工程中出现led.cdc文件。18/473.3打开ChipScopeProCoreInserter打开led.cdc文件19/47在ISE中启动CoreInserter,网表的输入输出目录是ISE自动设置的,且其参数只能在ISE中改变,不能在CoreInserter中修改。3.4配置ICON核ICON核是所有核和JTAG扫描电路的通信控制器,因此首先对其进行说明,如下图所示,要指定是否禁止在JTAG时钟上插入BUFG。如果选中此项,JTAG时钟将使用普通布线资源,而不是全局时钟布线,这样会在JTAG时钟线上产生较大的布线延时差别,因此,在全局时钟资源足够的情况下,应该尽量使JTAG时钟使用BUFG资源。这里不选中此项,使用BUFG资源。20/473.5配置ILA核ILA核的配置分为3个部分:触发参数、捕获参数、网线连接。TriggerParameters选项卡用于设置触发输入信号和触发条件判断单元。NumberofInputTriggerPorts下拉列表中可以选择ILA核输入触发端口的数目。每个ILA核最多可以有16个输入触发端口。每个触发端口都有位宽(触发端口的信号线总数)、触发条件判断单元的类型和数目等。CaptureParameters选项卡用于对存储深度、数据位宽、采样时刻等参数的设置。ChipScope存储缓冲区所能够存储的最大采样值个数成为存储深度,与数据宽度共同决定了BlockRAM的占用数。如果选中DataSameAsTrigger选项,则数据与触发信号相同,这是一种很常用的模式,可以捕获和采集触发逻辑分析仪的任何数据。在这种模式下,ILA核省略了数据输入端口,可以减小CLB和布线资源的占用,但总的数据宽度不能大于256bit。不选中DataSameAsTrigger选项时,数据和触发信号完全独立,当采样的数据位宽小于触发宽度时,能减少采集的数据,节省BlockRAM资源。在本次练习中,我们选择DataSameAsTrigger这种常用模式,存储深度选择8192,在时钟上升沿采样。完成捕获参数的设置后,CoreInserter能够根据相应配置准确给出BlockRAM的个数,如下图左侧中CoreUtilization框所示。21/47NetConnections选项卡用于将在线逻辑分析仪的输入信号和设计中的网线连接起来。由于目前尚未建立连接,所以NetConnections中的所有信号都为红色显示。点击ModifyConnection,会弹出SelectNet配置界面。利用SelectNet对话框,可以把ChipScope的工作时钟、触发信号、数据信号与设计中的网线连接起来,方法是在右侧选中ChipScope的信号,在左侧下方选中需要连接的网线,单击MakeConnections按钮,即可完成一条信号线的连接。所有信号都连接好之后,单击22/47Ok按钮。需要注意的是,ChipScopePro只能分析FPGA设计的内部信号,因此不能直接连接输入信号的网表,所以输入信号网表全部以灰色显示。如果要采样输入信号,可通过连接其输入缓冲信号来实现,时钟信号选择相应的BUFGP,普通信号选择相应的IBUF。在本次练习中,我们将led设计中的count[16]选择为采样时钟,而没有选择led设计本身的时钟信号clock。这是因为我们在设计中使用了25位宽的计数器,计数满一次之后,led灯才移动一次。由于采样深度只有8192,如果使用clock来采样,只能采样8192个时钟周期,这明显是不够的。根据测算,我们选择count[16]为采样时钟,在8192次采样后,能采样到led循环4次。采样时钟采样深度Led周期数Led周期内采样次数Count[20]819264周期数128次数Count[19]819232256Count[18]819216512Count[17]819281024Count[16]819242048Count[15]819224096Count[14]819218192触发和数据端口与设计中的diode输出信号相连。23/47应保证所有端口信号都已经连接,否则设计无法正确实现,当端口中的信号全部连接时端口名字为黑色,否则为红色。最后,返回工程中。24/474.启动ChipScopeProAnalyzer4.1重新运行ImplementDesignChipScopeCoreInserter产生的网表要被插入到原来的设计网表中,需要重新实现设计ImplementDesign,完成翻译、映射、布局布线后生成BIT文件,下载到FPGA中后,利用ChipScopeProAnalyzer分析信号波形。以后每次通过CoreInserter修改网表之后,都需要重新运行ImplementDesign,重新生成编程文件。4.2重新生成编程文件25/474.3运行ChipScopeAnalyzer选择AnalyzeDesignUsingChipScope,右键点击Run。26/47ChipScopeProAnalyzer启动后,界面如下图所示。4.4配置目标芯片在常用工具栏上点击图标,初始化边界扫描链,成功完成扫描后,项目浏览器将会列出JTAG链上的器件。选择我们使用的开发板FPGA芯片型号XC3S500E。点击“DEV:0MyDevice0(XC3S500E)-Configure”进行配置。27/47在弹出的配置对话框中,选择需要下载的.bit文件。需要注意的是:ChipScope利用JTAG链来观察芯片内部逻辑,因此在生成配置文件时只能利用.bit格式的配置文件,且时钟选择“JTAGCLK”,选择“CCLK”可能会配置失败。28/474.5设置触发条件把ChipScope设计和工程下载到FPGA中以后,还需要设定触发条件才能在Analyzer中捕获到有效波形。Analyzer的触发设置由Match(匹配)、Trig(触发)以及Capture(捕获)三部分。其中Match用于设置匹配函数,Trig用于把一个或多个触发条件组合起来构成最终的触发条件,Capture用于设定窗口的数目和触发位置,双击TriggerSetup,典型的配29/47置界面如下图所示。4.6观察信号波形观察信号波形需要打开Waveform窗口,双击Waveform命令,显示界面如上图所示。由于波形显示窗口中列出的是ChipScope核