可进qq群进行相关Verilog知识交流:1073030956
一个完整工程的建立
- 打开软件,点击file——new project。
2. 建立一个新的工程,工程名为project1_produce_1M-15MHz_Sin_wave_use_chipscope_simulation,next~。
根据自己使用的板子类型,设置下列参数并点击next–
这里是总结界面
3. 添加source,右键点击new source。
选择verilog module。文件名输入为top_module
写入对应代码并点击保存
4. 对系统ROM IP核进行调用。
打开XILINX的ISE,NEW SOURCE中选择IP,写好NAME,点击下一步
注意生成好的coe文件复制到该工程目录下。
再进行下一步操作
下图表示RAM IP 核已经成功调用。
5. (引脚绑定)
6综合
1. ChipScope完整流程
1.点击Synthesize-XST右键ReRun,把整个工程综合一遍。
2、选中顶层模块名top_module,然后鼠标右键选择New Source选项,在弹出的New Source Wizard界面中选择第二个ChipScope Definition and Connection File选项,并取名字ChipScope_sin_wave(名字可以随便取),然后点击Next
2、点击Next以后在弹出的一下对话框中点击Finish
2、Finish点击完毕以后,等一段时间,工程的层次目录就多出来了一个后缀为.cdc的ChipScope文件
2.双击ChipScope_LED.cdc文件,会弹出下面的界面,使用默认的设置保证Use SRLs和Use RPMs处于选中状态
Use SRLs(SRL = Shift Register LUT)选项使编译器用移位寄存器的查找表(Shift Register LUTs)代替触发器(flip flops)和乘法器,因此它能有效的减少FPGA内部资源,提高ChipScope性能
Use RPMs(RPM = Relationally Placed Macros)包含RLOC约束,RLOC定义了潜在设计原语的顺序与结构。Use RPMs让编译器用FMAP,HMAP,ROM,RAM等相关联的宏模块,使逻辑块布局的更加合理,可以有效的提高速度与性能,并节省FPGA资源
6、上一步选择完并点击Next后弹出如下界面,这个界面保持默认设置
2、继续点击Next弹出如下界面。在这个界面中选择触发端口(Trigger Ports)的数目和它们各自的宽度(Trigger Width),
说明:
a、这里建议先把触发宽度(Trigger Width)选择为最大值256,后面等信号添加完毕以后在回来修改为信号的总宽度。这么做是因为在一个比较复杂的设计中,你事先根本不知道自己要抓多少信号,所以等你把要抓的信号都设置好了以后在回来修改这个参数是比较好的选择。
b、Match Type的类型一共有6种,每种支持的值类型与功能见下表
由于本例比较简单,所以Match Type选择为Basic就可以了
c、Enable Trigger Sequencer选项指定了触发队列的级数,这个值保持默认即可。触发队列的结构图如下图所示
d、Enable Storage Qualification选项可以通过用户自定义的条件去过滤捕获的数据,这个选项一般让它默认选上
8、点击Next进入Capture Parameter选项卡,这一页在这个例子中保持默认参数即可
说明:
a、Data Depth指的是当触发条件满足以后,采样的数据的个数。这个值设置的越大,那么你得到的信息就越多,但相应的占用的FPGA内部的资源也越多。如果你想抓取UART和IIC的数据,由于UART和IIC协议的传输速度较慢,所以这个值必须设置大一点才能看到比较多的信息,而对于SPI这种传输速度比较快的协议,这个值可以设置的小一些。
b、Data Same As Trigger选项的意思是你抓取的信号既可以触发信号,也可以作为数据信号。这里给大家一个建议,对于inout信号(双向信号),最好选择只作为数据信号,不作为触发信号。
9、点击Next,进入Net Connections选项页
10、双击红色的CLOCK PORT选项,在弹出的界面中按照下图1、2、3的顺序把时钟信号连上.
10、连好时钟信号以后点击OK,返回到Net Connections界面,发现CLOCK PORT已经由红色变成了黑色,说明时钟设置成功
10、接着双击红色的TRIGGER PORTS,在弹出的界面中设置要抓取的信号
10、要抓取的信号设置完毕以后点击OK返回Net Connections选项页,发现TRIGGER PORTS还是红色的,这是因为我们先前设置的要抓取信号的总宽度是256,而这里我们只抓了15个信号,所以需要返回Trigger Parameter页把Trigger Width设置为15.
10、设置正确的Trigger Width以后,在回到Net Connections选项页可以发现TRIGGER PORTS已经变成黑色的了,说明信号连接全部设置正确。然后点击Return To Project Navigator
10、在弹出的Save Project对话框中选择“是”
至此,整个.cdc文件的设置过程全部设置完毕。
16、接着双击Generate Programming File生成bit文件
出现下面错误:
解决方式:
先采取思路1:查看了管脚约束是有些问题,输入大意了两个都分配成了T18,将第二个修改为R18后,仍然出现同样的问题,再三确定约束正确后采取思路 2:
右键Generate Programming File 点击Process Properties
右下角选择Advanced
在Other Bitgen Command Line Options中 填入 :-g UnconstrainedPins:Allow
然后点击OK
继续生成bit流
10、连接好开发板的Jtag线并上电。双击图片最后一个选项Analyze Design Using ChipScope打开ChipScope界面如下所示
10、连接好开发板的Jtag线并上电。双击上张图片最后一个选项Analyze Design Using ChipScope打开ChipScope界面如下所示
出现错误:
方法:控制面板>时钟和区域>更改日期、时间或数字格式>将格式改为英语(美国)。。。。
10、如果Jtag连接正常的话,会弹出下面的窗口,这个窗口表示找到了开发板使用的FPGA型号为XC6SLX45。
11、点击OK,左上角的P标签变成了绿色,Jtag Chain多出了FPGA型号这个标签
12.左键单击选中DEV:0 MyDevice0 (XC6SLX45),然后右键弹出菜单栏,在菜单栏中选择Configure…
13.在弹出的界面中勾选Import Design-level CDC File和Auto-create Buses两个选项
14.点击OK,bit文件就被下载到了开发板中,然后进入以下界面
15、双击Trigger Setup和Waveform分别打开设置触发的窗口和波形窗口
触发窗口中的Depth就是我们之前在.cdc文件中设置要抓取的数据深度,Position这个参数默认情况是0,但是建议最好设置一个偏移量,这里我设置的是100,它表示的是把触发条件满足之前的100个数据和触发条件满足之后的924(1024-100)个数据显示到波形窗口中,这样我们就可以捕捉到在触发之前的一部分信息,更有助于问题的定位。Storage Qualification这个参数就是之前在.cdc文件勾选了Enable Storage Qualification这个选项后才有的,一般选择默认的All Data。
波形窗口是显示要抓取的波形的窗口,这里还没开始抓取,所以显示为空。
17、点击右上角的1号图标,把Trigger Setup窗口放大,然后设置触发条件为I_rst_n为R(R表示上升沿触发),接着点击3号图标进入等待触发状态
18.等待触发状态
19.按一下开发板上I_rst_n信号绑定的按钮,使触发条件满足,波形窗口出现了抓到的波形
上图中红色的T标尺代表的触发的起始位置,它的位置不能移动;绿色的O和蓝色的X是两个可移动标尺,他们两个的绝对位置以及差值均显示在波形窗口的右下角,有时候需要测量两个关键点的差值就可以拖动这两个标尺来直接得出结果
20、按住鼠标左键在波形窗口中画一个矩形框可以把波形窗口放大,可以看到更多的波形细节
21.如果我想让O_led_out为4’b0010的时候触发,那么修改触发条件为如下图所示,然后点击触发按钮
22…由于我们设置的O_led_out一直在自增,所以不需要按按键,等O_led_out为4’b0010触发条件满足就可以触发了,触发以后的波形如下图所示
显然触发位置在O_led_out为4’b0010的位置,和之前设置的相同。
23.、如果你想查看O_led_out总线每一个bit的波形情况,可以点击一下信号名前面的小图标展开
24.如果你想看O_led_out总线的模拟波形,那么你可以双击Bus Plot标签,在弹出的界面中选中O_led_out总线就可以了。
25、到这里ChipScope的教程就讲完了。