【设计经验】2、ChipScope使用教程

一、软件与硬件平台

软件平台:

    操作系统:Windows 8.1

    开发套件:ISE14.7

硬件平台:

FPGA型号:XC6S45X-CSG324

二、ChipScope介绍

  ChipScope是Xilinx提供的一个校验FPGA设计的工具。它的本质是一个虚拟的逻辑分析仪,能调用FPGA内部的逻辑资源对代码中的各个变量进行抓取分析。与ModelSim等一些其他的FPGA仿真工具不同的是,ChipScope可以直接反映代码在实际硬件上的执行情况,从而能够更加有效的定位设计中的问题。

三、目标任务

本文会以一个4-bit的计数器为例来给大家演示如何使用ChipScope来校验这个计数器的功能。对于一个4-bit的计数器来说,计数器的最低位bit0是时钟信号的2分频,bit1是时钟信号的4分频,bit2是时钟信号的8分频,最高位bit3是时钟信号的16分频。接下来,我们就利用ChipScope来验证这个逻辑的正确性。

我的开发板上有四个LED灯和四个按键,所以我会把计数器的4-bit分别绑定到四个LED灯上面,然后在逻辑里面设计一个异步复位按钮用来复位这个计数器,同时设计这个异步复位还有一个目的就是用来设置初始的触发条件,这一点后面会详细介绍。

四、待测代码

module led_top
(
input                I_clk            ,
input                I_rst_n          ,
output  reg [3:0]    O_led_out
);                               

always @(posedge I_clk or negedge I_rst_n)
begin
       if(!I_rst_n)
         O_led_out <=      4‘d0 ;
       else
         O_led_out <= O_led_out + 1‘b1 ;
end  

endmodule

写好待测代码,并添加物理约束文件绑定好管脚,我的开发板上的约束文件如下

##

NET I_clk LOC = V10 | TNM_NET = sys_clk_pin | IOSTANDARD = "LVCMOS33";

TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 50000 kHz;

##

##

NET I_rst_n           LOC = N4 | IOSTANDARD = "LVCMOS15"; ## SW2 pushbutton

##

########LED Pin define#####################

NET O_led_out<0>    LOC = V5 | IOSTANDARD = "LVCMOS33";       ## LED1

NET O_led_out<1>    LOC = R3 | IOSTANDARD = "LVCMOS33";       ## LED2

NET O_led_out<2>    LOC = T3 | IOSTANDARD = "LVCMOS33";       ## LED3

NET O_led_out<3>    LOC = T4 | IOSTANDARD = "LVCMOS33";       ## LED4

五、ChipScope使用完整流程

1、利用上面的待测代码和约束文件在ISE14.7中建立一个新工程。然后点击Synthesize-XST把整个工程综合一遍。

2、选中顶层模块名led_top,然后鼠标右键选择New Source选项,在弹出的New Source Wizard界面中选择第二个ChipScope Definition and Connection File选项,并取名字ChipScope_LED(名字可以随便取),然后点击Next

3、点击Next以后在弹出的一下对话框中点击Finish

4、Finish点击完毕以后,等一段时间,工程的层次目录就多出来了一个后缀为.cdc的ChipScope文件

5、双击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后弹出如下界面,这个界面保持默认设置

7、继续点击Next弹出如下界面。在这个界面中选择触发端口(Trigger Ports)的数目和它们各自的宽度(Trigger Width),

  说明:

  a、这里建议先把触发宽度(Trigger Width)选择为最大值256,后面等信号添加完毕以后在回来修改为信号的总宽度。这么做是因为在一个比较复杂的设计中,你事先根本不知道自己要抓多少信号,所以等你把要抓的信号都设置好了以后在回来修改这个参数是比较好的选择。

  b、Match Type的类型一共有6种,每种支持的值类型与功能见下表


Match Type


Bit Values


Functions


Basic


0,1,X


=,<>


Basic w/edges


0,1,X,R,F,B,N


=,<>


Extended


0,1,X


=,<>,>,>=,<,<=


Extended w/edges


0,1,X,R,F,B,N


=,<>,>,>=,<,<=


Range


0,1,X


=,<>,>,>=,<,<=,in range,not in range


Range w/edges


0,1,X,R,F,B,N


=,<>,>,>=,<,<=,in range,not in range

  表中各参数的含义如下:


参数


含义


0


低电平


1


高电平


X


不定值


R


上升沿(Rising)


F


下降沿(Falling)


B


双边沿(Both Edge)


N


非边沿(No Edge)


=


等于


<>


不等于


<


小于


<=


小于等于


>


大于


>=


大于等于


in range


在某个范围内


not in range


不在某个范围内

  由于本例比较简单,所以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的顺序把时钟信号连上

11、连好时钟信号以后点击OK,返回到Net Connections界面,发现CLOCK PORT已经由红色变成了黑色,说明时钟设置成功,接着双击红色的TRIGGER PORTS,在弹出的界面中设置要抓取的信号

12、要抓取的信号设置完毕以后点击OK返回Net Connections选项页,发现TRIGGER PORTS还是红色的,这是因为我们先前设置的要抓取信号的总宽度是256,而这里我们只抓了5个信号,所以需要返回Trigger Parameter页把Trigger Width设置为5

13、设置正确的Trigger Width以后,在回到Net Connections选项页可以发现TRIGGER PORTS已经变成黑色的了,然后点击Return To Project Navigator

14、在弹出的Save Project对话框中选择“是”

  至此,整个.cdc文件的设置过程全部设置完毕。

15、接着双击Generate Programming File生成bit文件

16、连接好开发板的Jtag线并上电。双击Analyze Design Using ChipScope打开ChipScope界面如下所示

17、如果Jtag连接正常的话,会弹出下面的窗口,这个窗口表示找到了开发板使用的FPGA型号为XC6SLX45

18、点击OK,左上角的P标签变成了绿色,Jtag Chain多出了FPGA型号这个标签

19、左键单击选中DEV:0 MyDevice0 (XC6SLX45),然后右键弹出菜单栏,在菜单栏中选择Configure..

20、在弹出的界面中勾选Import Design-level CDC File和Auto-create Buses两个选项

21、点击OK,bit文件就被下载到了开发板中,然后进入以下界面

22、双击Trigger Setup和Waveform分别打开设置触发的窗口和波形窗口

  触发窗口中的Depth就是我们之前在.cdc文件中设置要抓取的数据深度,Position这个参数默认情况是0,但是建议最好设置一个偏移量,这里我设置的是100,它表示的是把触发条件满足之前的100个数据和触发条件满足之后的924(1024-100)个数据显示到波形窗口中,这样我们就可以捕捉到在触发之前的一部分信息,更有助于问题的定位。Storage Qualification这个参数就是之前在.cdc文件勾选了Enable Storage Qualification这个选项后才有的,一般选择默认的All Data。

波形窗口是显示要抓取的波形的窗口,这里还没开始抓取,所以显示为空。

23、点击右上角的1号图标,把Trigger Setup窗口放大,然后设置触发条件为I_rst_n为R(R表示上升沿触发),接着点击3号图标进入等待触发状态

24、等待触发状态

25、按一下开发板上I_rst_n信号绑定的按钮,使触发条件满足,波形窗口出现了抓到的波形

  上图中红色的T标尺代表的触发的起始位置,它的位置不能移动;绿色的O和蓝色的X是两个可移动标尺,他们两个的绝对位置以及差值均显示在波形窗口的右下角,有时候需要测量两个关键点的差值就可以拖动这两个标尺来直接得出结果

26、用鼠标在波形窗口中画一个矩形框可以把波形窗口放大,可以看到更多的波形细节

27、如果我想让O_led_out为4’b0010的时候触发,那么修改触发条件为如下图所示,然后点击触发按钮

28、由于我们设置的O_led_out一直在自增,所以不需要按按键,等O_led_out为4’b0010触发条件满足就可以触发了,触发以后的波形如下图所示

  显然触发位置在O_led_out为4’b0010的位置,和之前设置的相同。

29、如果你想查看O_led_out总线每一个bit的波形情况,可以点击一下信号名前面的小图标展开

30、如果你想看O_led_out总线的模拟波形,那么你可以双击Bus Plot标签,在弹出的界面中选中O_led_out总线就可以了

30、更多的功能大家有空可以多多尝试。至此ChipScope的教程就完毕了。

六、如何防止信号被优化

在一个复杂的设计中,我们往往会抓大量的信号,而ISE14.7编译代码的时候会把一些有相同逻辑的信号给优化掉,这会导致我们在选择信号的时候找不到想要抓取的信号,针对这种情况给大家提供两个解决办法。

方法一:

1、在你想要抓取的所有信号前面加上(*KEEP = “TRUE”*)

(*KEEP = "TRUE"*)reg [3:0] R_cnt;

2、选中Synthesize-XST,鼠标右键在弹出的菜单栏中选择Process Properties...

3、在弹出的窗口中选择-keep_hierarchy为Soft,(Yes和Soft的区别我暂时不清楚,但是我习惯于选择Soft,希望有网友能提供答案以及来源,谢谢)

4、设置完毕以后重新综合,然后重新在.cdc选择要抓取的信号

方法二:

上面一种方法根据我的经验并不能100%的保证信号不被综合掉,所以还有另外一种方法是写一段冗余逻辑把信号进行运算然后赋值给一个输出,并把输出引到顶层绑定一个空闲的管脚,这种情况我的处理方法是:

假设要抓取的信号是(*KEEP = "TRUE"*)reg [3:0] R_cnt;

1、定义1个输出信号O_test;

Output O_test;

2、把要抓取的信号各位相或然后赋值给O_test

assign O_test = | R_cnt ;

R_cnt前面的“|”表示把R_cnt的每一bit按位相或

3、把O_test引到顶层并在约束文件中分配一个空余管脚

通过这种增加冗余逻辑的方式,R_cnt信号一般不会被综合掉,我自己在平时的使用中会先使用第一种方法,如果发现第一种方法还是把我想看的关键信号综合掉了的话就采用第二种方法。

七、采用例化ILA核的方式抓信号

除了采用.cdc文件抓取信号以外,还有一种方式是采用例化ILA核的方式抓信号的时序。这种方式的详细操作流程如下:

1、添加一个新的ICON IP核

2、一般情况下保持所有的参数默认就可以了

3、再添加一个ILA 的IP核

4、在第一页设置好相关的参数,这些参数的含义核.cdc文件中参数的含义一模一样,这里不再过多解释

5、第二页主要是设置要抓取的信号宽度,指的注意的是这里可以设置大一点没关系,因为这种方法不要求信号宽度和要抓的信号数目完全相同

6、生成这个两个IP核以后,把这两个IP核例化到代码中

module led_top
(
input             I_clk            ,
input             I_rst_n          ,
output  reg [3:0] O_led_out
);                               

always @(posedge I_clk or negedge I_rst_n)
begin
  if(!I_rst_n)
    O_led_out <=      4‘d0 ;
  else
    O_led_out <= O_led_out + 1‘b1 ;
end  

wire [35:0]     CONTROL0;
wire [7:0]      TRIG;

icon icon_debug (
    .CONTROL0(CONTROL0) // INOUT BUS [35:0]
);

ila ila_debug (
    .CONTROL(CONTROL0), // INOUT BUS [35:0]
    .CLK(I_clk),      // IN
    .TRIG0(TRIG)      // IN BUS [7:0]
);

assign  TRIG[0]=I_rst_n;
assign  TRIG[4:1]=O_led_out;   

endmodule

  接下来就是生成bit文件并用ChipScope抓取信号了,和前一种方法一样。

  这种方法和前一种方法的区别在于这种方法只能抓取一个.v文件中的信号,而且速度生成IP核的比较慢,进入ChipScope中以后还需要自己修改端口的名字,比较浪费时间;好处就是可以100%保证抓到想抓的信号,所以对于逻辑不太复杂的单文件代码可以采用这种方式。不过我个人还是比较喜欢用.cdc文件的方式来抓信号。

八、总结

1、用ILA逻辑分析仪抓信号有两种方式:.cdc文件方式(推荐)和例化ILA核方式

2、在cdc文件中防止信号被优化有两种方式:keep_hierarchy选为Soft,增加冗余逻辑

欢迎关注我的微信公众号:FPGA之禅

原文地址:https://www.cnblogs.com/liujinggang/p/9813863.html

时间: 2024-10-28 12:12:37

【设计经验】2、ChipScope使用教程的相关文章

框架模块设计经验总结

转自:http://www.cnblogs.com/zgynhqf/archive/2011/07/15/2107593.html 这是原创,尊重原创............ 框架模块设计经验总结 三个月没写日志了,比较懒散--下半年准备做OEA 的 B/S 版本,比较复杂,需要从架构设计开始认真入手.正好今天到了部门反思的时间,今天先把原来的一些设计经验总结一下,以方便将来回顾. 直入主题,这篇日志主要用于总结一些框架级别的模块设计经验. 总述 一个大型的框架,必然由多个较独立的子系统/子模块

用户界面设计经验分享:界面设计技巧分享

如此有用的文章我已记不得是什么时候发现的了,但在看完的那一刻便想将之翻译,分享给大家自己也受用. 时间过了很久,来到了2014年,终于静下心来花了大把时间连同图片一起译成了中文.像我这样业余的翻译六级分数只够及格的程序员,不敢说做到信雅达,但求意思到位. 1 尽量使用单列而不是多列布局 单列布局能够让对全局有更好的掌控.同时用户也可以一目了然内容.而多列而已则会有分散用户注意力的风险使你的主旨无法很好表达.最好的做法是用一个有逻辑的叙述来引导用户并且在文末给出你的操作按钮. 2 放出礼品往往更具

一个硬件高手的设计经验分享

一个硬件高手的设计经验分享 一:成本节约 现象一:这些拉高/拉低的电阻用多大的阻值关系不大,就选个整数5K吧 点评:市场上不存在5K的阻值,最接近的是 4.99K(精度1%),其次是5.1K(精度5%),其成本分别比精度为20%的4.7K高4倍和2倍.20%精度的电阻阻值只有1.1.5.2.2. 3.3.4.7.6.8几个类别(含10的整数倍):类似地,20%精度的电容也只有以上几种值,如果选了其它的值就必须使用更高的精度,成本就翻了几倍,却不能带来任何好处. 现象二:面板上的指示灯选什么颜色呢

移动端网页设计经验与心得

原文:移动端网页设计经验与心得 智能手机发展确实很迅速,像今年,我的大部分工作就都在移动端网页上. 再往前些年,看到的手机版/移动版网页,限制于浏览器与手机性能,2g网络速度等 网页设计无非是蓝.黑.白,界面单调,并且要尽可能的设计简单. 现在情况就大不相同了,软件上webkit内核浏览器大行其道,硬件突飞猛进,网速来说,4g正炒得火热. 下面就和大家分享一下我的一些移动端网页设计经验与心得. ⒈ 分辨率这应该是移动端网页最关心的问题了,因为移动设备五花八门,各种分辨率都有.要想在这些设备上都能

JEECG开源社区邀请有工作流设计经验的朋友

社区急需熟悉Activiti开发的朋友 社区急需熟悉微信开发的朋友 截止日期:20140615 联系人:scott (445654970) jeecg微云快速开发平台 JEECG开源社区邀请有工作流设计经验的朋友

移动端网页设计经验与心得(转)

智能手机发展确实很迅速,像今年,我的大部分工作就都在移动端网页上. 再往前些年,看到的手机版/移动版网页,限制于浏览器与手机性能,2g网络速度等 网页设计无非是蓝.黑.白,界面单调,并且要尽可能的设计简单. 现在情况就大不相同了,软件上webkit内核浏览器大行其道,硬件突飞猛进,网速来说,4g正炒得火热. 下面就和大家分享一下我的一些移动端网页设计经验与心得. ⒈ 分辨率这应该是移动端网页最关心的问题了,因为移动设备五花八门,各种分辨率都有.要想在这些设备上都能有良好的浏览体验,得花一番功夫.

数据可视化表格-设计经验分享!

 前言 表格是数据可视化中最入门的数据图,也最为实用,在网页后台几乎是必不可少的元素,数据可视化大屏中也常常出现.表格的设计似乎所有人都会,但为什么总有一些表格看起来很舒服,用起来也方便,而有些则不然!今天就跟大家分享一下表格的设计经验!  案例优化    上图的表格样式常常在网页后台,PPT中看到,似乎也看不出什么问题,俗话说了,没有对比就没有伤害,接下来我们就找找它的问题,并一步步优化它,最后对比就知道它有什么问题了! 排版第一原则“文字左对齐,数字右对齐” 我们阅读文字的习惯是从左到右,文

跑酷游戏的角色控制设计经验

你可能想制作一款超现实主义基于立体像素的第一人称的跑酷游戏.你正努力制定一个产品计划.哪个环节最耗时?图像?声音?还是关卡设计?我打赌一定是角色控制.我还打赌这会耗费4年半的时间,为什么? 跑酷游戏的玩家移动极为重要,需要大量时间才能摸准正确的感觉. 每款游戏都有自己的特点,你绝对找不到解释如何针对你自己的游戏展开设计的文章或攻略.你只能自己摸着石头过河. 也就是说,每款游戏都有一些值得借鉴的智慧和经验.在此以我自己的亲身经历为例. 制作角色 你是一名程序员,但在处理GIMP的时候也能如鱼得水,

大数据可视化大屏设计经验,教给你!

 前言    大数据产业正在用一个超乎我们想象的速度蓬勃发展,大数据时代的来临,越来越多的公司开始意识到数据资源的管理和运用,大数据可视化大屏展示被更多的企业青睐,身为UI设计师的我们,也要紧跟时代的步伐学习这方面的设计. 今天要跟大家分享我一年多设计大数据可视化大屏的经验和观点,下面从UI设计.交互设计.动效设计三个方面来分享.  UI设计   设计大屏一样要谨记要以展示数据为核心,在任何炫酷屌炸天表现都要建立在不影响数据的有效展示上!   下图是天猫可视化大屏设计,图中屌炸天的3D地球围绕粒