OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6567|回复: 0

[XILINX] 【正点原子FPGA连载】第四章 ISE软件的安装和使用--摘自【正点原子】超越者之FPGA开发指南 V1.1

[复制链接]

1107

主题

1118

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4615
金钱
4615
注册时间
2019-5-8
在线时间
1218 小时
发表于 2021-1-6 12:12:58 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2021-1-18 16:22 编辑

1)实验平台:正点原子超越者FPGA开发板
2)平台购买地址:https://item.taobao.com/item.htm?&id=631660290421
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/fpga/zdyz-chaoyuezhe.html
4)正点原子FPGA交流群:905624739 点击加入:
5)关注正点原子公众号,获取最新资料更新



第四章ISE软件的安装和使用

ISE是由著名的可编程器件开发公司Xilinx提供的集成化开发平台。ISE具有界面良好、操作简单的特点,再加上Xilinx的FPGA芯片占有很大的市场,使得ISE成为了非常通用的FPGA工具软件。ISE提供了包括代码编写、库管理以及HDL综合、仿真、下载等几乎所有FPGA开发所需的功能。
下面将详细的为大家介绍如何使用ISE软件。本章包括以下几个部分:
1            
1.1            ISE软件的安装
1.2            ISE软件的使用
1.3            Chipscope在线调试工具的使用
1.4            程序固化


1.1       ISE软件的安装
ISE作为一款非常强大的Xilinx FPGA开发工具一直以来广受工程师们的欢迎,目前已经更新到了14.7版本,虽然根据Xilinx官方的回应,ISE暂时已经不再更新了,但是相关的FPGA芯片却依旧畅销,这使得ISE依旧拥有很强的生命力,值得我们去学习和使用。我们在光盘中提供了最新14.7版本的ISE安装包.
首先在超越者FPGA开发板资料盘(B盘)→ISE 14.7文件夹下找到ISE14.7版本安装包,解压后(解压后的文件夹路径不能带有中文和特殊字符)的文件列表如图 4.1.1所示:
image001.png
图 4.1.1 双击“xsetup.exe”
双击上图中的“xsetup.exe”进入ISE安装界面如图4.1.2所示:
image003.png

4.1.2安装引导界面
点击”Next >”按钮进入条款协议界面如图4.1.3所示:
image005.png

4.1.3条款协议界面一
这里我们选择accept并点击“Next >”进入下一个协议界面如图4.1.4所示:
image007.png

4.1.4条款协议界面二
继续选择accept并点击“Next >”进入软件选型界面如图4.1.5所示:
image009.png

4.1.5软件选型
在该界面我们选择第五个(ISEDesign Suite System Edition)如上图所示并点击“Next >”进入安装选项界面如图4.1.6所示:
image011.png

4.1.6安装选项界面
这个界面我们可以选择自己所需要的安装选项,如果不知道怎么选择就按照上图所示的默认选择,然后点击“Next >”进入安装路径选择界面如图4.1.7所示:
image013.png

4.1.7安装路径选择
安装路径选择可以根据自己的实际情况去选择,这里我将ISE安装在了D盘Xilinx目录下(D:\Xilinx),选择好安装路径后我们继续点击“Next >”进入安装信息总结的界面如图4.1.8所示:
image015.png

4.1.8安装信息总结
这个界面我们可以看到我们本次安装的一个大致信息,我们点击“Install”进入安装进程界面如图4.1.9所示:
image017.png

4.1.9安装进程
当进入安装进程的时候我们就可以耐心等待它安装了,这里根据电脑配置的不同在等待时间上会有所差异,但是有一点要提醒大家特别注意当进程差不多到88%的时候会跳出来一个WinPcap的界面如图4.1.10所示:
image019.png

4.1.10 WinPcap询问界面
这里我们直接点击“确定”按钮,然后安装进程会继续进行,然后出现一个让你断开USB和JTAG接口的界面如图 4.1.11所示:

image021.png

4.1.11断开USBJTAG接口
这里我们将电脑上的USB和JTAG连接全部断开然后点击确定,安装进程会继续进行,在之后会跳出一个与MATLAB关联的选项界面如图4.1.12所示:
image023.png

4.1.12 MATLAB关联选项
这里我们可以直接点击“OK”按钮跳过,以后再关联,如果电脑已经安装了适合版本的MATLAB,可以在这里选择“Find MATLAB”按钮进行关联。到这一步之后我们的ISE就安装完成了,安装完成后会进入License配置管理界面如图 4.1.13所示:
image025.png

4.1.13 License选择
我们可以去购买相关的License然后进行激活就可以使用我们的ISE了。这里我要着重的提醒大家一下,ISE和Win10的兼容性不是很好,如果你发现你的ISE出现闪退的情况,那么请尝试根据以下步骤去做:
第一步:寻找Xilinx ISE的安装目录下的文件夹:X:\Xilinx\14.7\ISE_DS\ISE\lib\nt64(X代表自己的安装磁盘路径,以本章为例,文件夹路径为D:\Xilinx\14.7\ISE_DS\ISE\lib\nt64)
对文件夹下的两个文件进行如下操作:
1.将文件libPortability.dll重名为libPortability.dll.orig;
2.将文件libPortabilityNOSH.dll复制一份,将这个复制文件重命名为libPortability.dll,并重新粘贴到与libPortabilityNOSH.dll相同的路径下;
3.修改后如下图所示:
image027.png

4.1.14 文件名修改1
第二步:寻找Xilinx ISE的安装目录下的文件夹:X:\Xilinx\14.7\ISE_DS\common\lib\nt64(X代表自己的安装磁盘路径)在该文件夹下进行如下操作:
1.将文件libPortability.dll重名为libPortability.dll.orig;
2.然后将第一步中的文件libPortabilityNOSH.dll复制到该文件夹下,并重命名为libPortability.dll;
3.修改后如下图所示:
image029.png

4.1.15文件名修改2
进行这两步操作后,ISE将不再出现打开文件闪退的情况了。
1.2       ISE软件的使用
在开始使用ISE软件之前,大家有必要了解一下ISE软件的使用流程,如下图所示:
image030.png

4.2.1软件使用流程图
从上图可以看出,首先打开ISE软件,新建一个工程,在新建工程的时候,大家可以通过新建工程向导的方式来创建工程。工程建立完成后,需要新建一个Verilog顶层文件,然后将设计的代码输入到新建的Verilog顶层文件中。HDL源代码输入完毕之后,就是对设计文件进行分析与综合了。
在代码输入以及设计分析阶段,ISE软件会检查代码,如果代码出现语法错误,那么ISE软件将会给出相关错误提示。在FPGA设计中,综合(Synthesis)就是将RTL设计转变为由FPGA器件中的查找表(LUT)、触发器(FF)等各种底层电路单元所组成的网表,在这个过程中综合器也会对设计进行优化,例如删除多余的逻辑等等。
综合完成后,我们就需要进行约束的输入。约束表达了设计者期望满足的时序要求,规范了设计的时序行为,并在综合与实现阶段来指导工具进行布局和布线,工具会按照你的约束尽量去努力布局和布线,以满足设计的时序要求,并在时序报告中给出结果。常用的约束包括时序约束、引脚约束等等。
接下来就可以实现整个设计了,包括布局和布线等。如果实现成功,则ISE会给出提示结果。此时,就可以生成用于下载到器件中的比特流文件了。最后我们通过下载器来将这个比特流文件下载到FPGA中,完成整个开发流程。
在这里只是简单的介绍了一下上述的流程图,让大家有个大致的了解,接下来将以流水灯实验的工程为例,对每个流程进行详细的操作演示,一步步、手把手带领大家学习使用ISE软件。
1.2.1        新建工程
在创建新工程之前我们需要先创建一个文件夹用来专门存放我们的所有工程,防止以后工程多了出现混乱,作为一个工程师,学会管理自己的工程也是一项非常重要的技能。
本教程笔者是在桌面创建了一个命名为Spartan_prj的总文件夹用来存放我们的所有工程,现在我们以流水灯为例,在这个总文件夹下创建一个子文件夹并命名为flow_led用来存放我们的流水灯工程。到这里我们是不是就可以去创建工程了呢?还不可以,作为一个优秀的工程师我们不仅要学会管理我们的工程,还要对我们工程中的文件做一个合理的分类,不然创建完工程后你会发现flow_led文件夹里会生成一大堆文件,挤成一团显得乱糟糟的,不利于我们后期维护,那怎么办呢?在flow_led文件夹下我们分别再创建四个子文件夹:doc文件夹(用来存放一些参考资料或者工程描述文档)、prj文件夹(用来存放工程文件和时序约束文件)、rtl文件夹(用来存放设计输入文件即Verilog源文件)、sim文件夹(用来存放仿真文件),如图 4.2.2所示:
image032.png
4.2.2工程文件夹规范
将文件夹全部创建好后,我们就可以去创建我们的新工程了。第一步大家先点击桌面上的ISE Design Suite 14.7图标打开我们的ISE软件,然后会进入如图 4.2.3所示的界面。
image034.png

4.2.3 ISE初始界面
当我们进入ISE初始界面的时候会跳出一个“Did you know…”的提示框,主要是告诉你怎么创建一个新的工程,这里我们直接点击“OK”按钮就可以了,然后我们可以看到标注序号2的方框,这里记录了一些笔者之前打开过的工程,如果读者是第一次打开ISE那么这里就会是空白。这里还要提醒读者一点,当第二次打开ISE的时候它会默认自动打开你上一次打开的工程,如果你想关掉它默认打开的工程可以点击我们序号3方框标注的“File”菜单然后选择“closeproject”,这样就可以关闭当前工程。下面我们以流水灯为例来创建一个全新的工程。
首先我们点击“File”菜单选择“New Project”选项,如图 4.2.4所示
image036.png

4.2.4创建新工程
之后会进入新工程的创建向导界面如图 4.2.5所示:
image038.png

4.2.5新工程向导界面
在向导界面里我们需要给我们新建的工程命名,这里我们以流水灯为例,所以工程命名为flow_led,然后再选择我们的工程路径,这里笔者选择的路径是D:\desktop\Spartanprj\flow_led\prj。当我们把工程命名和路径都输入完成后就可以点击”Next >”按钮了,点击”Next >”按钮之后我们就会进入器件选型选项栏如图 4.2.6所示:
image040.png

4.2.6器件选型界面
在器件选型界面我们重点需要选择的就是FPGA芯片的家族(Family)、型号(Device)、封装(Package)和速度(Speed)。由于我们的开发板上搭载的是一块Spartan6家族XC6SLX16型号FTG256封装速度等级为2的FPGA芯片,所以选型结果如图 4.2.6所示。将对应的信息选择正确后,点击”Next >”按钮进入工程信息总结界面如图 4.2.7所示:
image042.png
4.2.7工程信息总结界面
通过工程信息总结界面我们可以检查一下我们所创建的工程是否是符合我们预期要求的,如果某一步我们做错了,此时还可以点击“< Back”按钮返回重新选择,如果确认工程创建的没有问题,我们点击”Finish”按钮完成我们新工程的创建,如图 4.2.8所示。
image044.png

4.2.8工程创建完成界面
1.2.2        设计输入
在上一小节当中我们已经创建了一个全新的工程,只是这个工程还是个空壳子,没有任何的设计,在本小节我们就来看一看如何给一个新工程添加设计输入。
image046.png

4.2.9设计输入
如图 4.2.9所示,我们找到Design窗口中序号1标注的flow_led,这个就是我们上一节中创建的新工程,右击它会跳出一个菜单栏如图中序号2所示,这里我们可以选择第一个选项“New Source”来创建一个全新的设计输入文件(Verilog源文件),也可以选择第二个选项“Add Source”来添加一个现成的设计输入文件。此处我们选择第一个选项创建一个全新的设计输入文件如图 4.2.10所示:
image048.png

4.2.10创建Verilog源文件
我们按照上图中序号1、2、3、4的步骤来操作。先选择设计输入类型为Verilog Module,然后给源文件起个名字,我们命名为“flow_led”,然后选择路径,我们选择D:\desktop\Spartan prj\flow_led\rtl路径,最后点击”Next>”按钮进入下一个界面如图 4.2.11所示:
image050.png

4.2.11特殊port类型界面
这个界面我们保持默认即可,直接点击”Next >”按钮进入源文件信息总结界面如所示:
image052.png

4.2.12源文件信息总结界面
我们再次检查一下所创建的源文件是否符合我们的预期要求,如果发现有误可以点击”< Back”按钮返回,如果没有问题就可以点击”Finish”按钮完成源文件的创建如图 4.2.13所示:
image054.png

4.2.13完成源文件创建
到这一步就可以在flow_led源文件中编写我们的代码了,本节教程是以流水灯为例,我们写入流水灯的代码如下(注释可不写):
  1. <font size="4">module flow_led (
  2.     input              sys_clk  ,  //系统时钟
  3.     input              sys_rst_n,  //系统复位,低电平有效
  4.     output  reg  [3:0  led         //4个LED灯
  5.     );
  6. //reg define
  7. reg [23:0 counter;
  8. //*****************************************************
  9. //**                    main code
  10. //*****************************************************
  11. //计数器对系统时钟计数,计时0.2秒
  12. always @(posedge sys_clk or negedge sys_rst_n) begin
  13.     if (!sys_rst_n)
  14.         counter <= 24'd0;
  15.     else if (counter < 24'd5000000)//开发板上的晶振是50MHZ,周期为20ns,20*5000000=100_000000ns=100ms
  16.         counter <= counter +1'b1;
  17.     else
  18.         counter <= 24'd0;
  19. end
  20. //通过移位寄存器控制IO口的高低电平,从而改变LED的显示状态
  21. always @(posedge sys_clk or negedge sys_rst_n) begin
  22.     if (!sys_rst_n)
  23.         led <= 4'b0001;
  24.     else if(counter == 24'd9)
  25.         led[3:0 <= {led[2:0,led[3]};
  26.     else
  27.         led <= led;
  28. end
  29. endmodule</font>
复制代码
本章我们只是带领大家熟悉ISE软件的使用流程,不对代码做讲解,在后面的例程中,再来对代码做详细的介绍。
代码编写完成后,软件中显示的界面如图 4.2.14所示:
image056.png

4.2.14流水灯代码
我们写完代码后一定要养成习惯点击保存,如果你觉得字体比较小的话可以按住Ctrl键滚动鼠标滑轮调节字体大小,到这里我们整个设计输入就完成了。
1.2.3        ISE工具栏介绍
当我们把设计输入源文件写好后,就可以对我们的工程进行语法编译、综合仿真、时序约束、管脚分配到最后生成下载文件进行板级验证。那么要想进行这些步骤就要求我们能对ISE软件的各种工具能够熟练使用,所以接下来本教程将对ISE工具栏里常用的工具作一个详细的介绍。
image058.png

4.2.15工具栏介绍
当我们打开一个工程后会出现如图 4.2.15所示的界面,此处笔者用红色方框框出了六个常用界面,我们首先来简要介绍一下这六个框都有哪些用处,然后我们再逐一的去细看每个框里的具体工具或者显示信息。
编号1:菜单栏,包含了文件管理菜单(File)、编辑菜单(Edit)、视图菜单(View)、源文件菜单(Source)、过程处理菜单(Process)、工具菜单(Tools)、窗口菜单(Window)、布局菜单(Layout)和帮助菜单(Help)。
编号2、编号3:这两个方框里的工具是我们最常用的,也是最重要的工具,并且是需要相互配合的。我们可以看到其实编号2和编号3都属于设计栏(Design),但是又有区别。其中编号2栏有两种模式,图中我们选择的是Implementation模式,可以显示我们的工程名称、器件型号、设计源文件、时序约束UCF文件等等,当我们选择Simulation模式时就可以显示仿真文件。我们鼠标点到编号2栏里的任一文件,编号3栏就会出现对应的工具选项,比如上图中我们鼠标点击了流水灯工程的顶层文件led_top,编号3栏就出现了处理这个顶层文件的相关工具选项(Processes:led_top),如果我们换成Simulation模式点击里面的仿真文件时编号3栏就会出现对应的仿真工具,关于整个Design工具栏我们下文会详细讲解,这里先简单介绍一下。
编号4、编号5、编号6:整个工程的信息查看栏,其中编号4栏里我们可以选择想要查看的工程信息,有设计信息总览(Design Overview)、工程错误和警告信息(Errors and Warnings)、分析综合细节报告(DetailedReports)、仿真信息报告(Secondary Reports),当我们选择了对应的信息查看后,在编号5和编号6栏就会显示对应的信息,当然有些信息显示的时候5号栏和6号栏是会合并成一个窗口的。我们上图中查看的是工程信息的总结(Summary),可以看到5号栏里显示了工程名、器件型号、软件版本等等信息,6号栏显示了本工程所占用的FPGA内部资源情况,如寄存器资源、LUT资源等等,这样可以让我们很方便的了解整个工程的基本情况。
到这里我们就把ISE的大致工具栏浏览了一遍,下面我们来着重的讲解几个我们平时常用的工具。
image060.png

4.2.16 Design设计栏
首先我们先来介绍我们最重要的设计栏(Design)。我们的语法编译、综合分析、仿真、生成bit流文件、生成固化文件等一系列处理都要使用这个设计栏里的工具来完成。设计栏如图 4.2.16所示,在它(图 4.2.16的最下方)两边还有Start、Files、Libraries三个工具栏,其中Start主要用来新建工程或者打开历史工程,Files和Libraries主要是用来显示和查看Verilog源文件,这三个工具栏比较简单这里不做过多介绍,本教程重点讲解Design设计栏里的工具。
上文中已经提到过Design工具栏有Implementation和Simulation两种模式,我们先讲解Implementation模式下工具的使用。如图 4.2.16所示,在编号1栏中有工程、器件、源文件,我们右击源文件会得到如图 4.2.17所示的菜单栏:
image062.png

图 4.2.17源文件的选项菜单
下面对常用的选项做出介绍:
New Source:创建新的源文件;
Add Source:添加源文件;
Open:打开当前源文件;
Remove:移除当前源文件;
Manual Compile Order:手动编译命令,可以用来给源文件排序;
Set as Top Module:将当前源文件设置为顶层文件;
SmartGuide:增量设计,当我们编译的工程比较大或者时序紧张时,编译工程会耗费大量时间,每次修改代码后重新编译会浪费很多时间,当使能增量编译后,编译器会对比上次编译结果,只编译你修改的部分,从而节省大量时间;
Implement Top Module:全局编译;
File/Path Display:显示设置,可以显示当前源文件的路径或者只显示名字;
Expand All:全部展开;
Collapse All:全部收起;
Find:查找;
Design Properties:设计属性,点开后如图 4.2.18所示,可以重新对工程属性进行编辑。
image064.png

4.2.18设计属性
介绍完Design(图 4.2.16)工具栏的编号1框的内容后我们再来看编号2框的内容:
Design Summery/Reports:打开工程信息查看栏如图 4.2.15所示;
Create Schematic Symbol:将当前源文件创建成一个原理图模块如图 4.2.19所示,可以被其他原理图模块调用;
View Command Line Log File:查看命令日志;
View HDL Instantiation Template:查看当前源文件HDL例化模板;
Create Timing Constraints:创建时序约束文件(UCF文件);
I/O Pin Planning(PlanAhead)-Pre-Synthesis:打开PlanAhead面板,如图 4.2.20所示,在这里我们主要用来分配引脚;
View RTL Schematic:查看RTL视图;
Check Syntax:检查语法;
Generate Post-Synthesis Simulation Model:生成综合后仿真模型;
Translate:转换;
Generate Post- Translate Simulation Model:生成转换后仿真模型;
Map:映射;
Place&Route:布局布线;
Generate Programming File:生成bit流下载文件;
Configure Target Device:配置目标器件;
Generate Target PROM/ACE File:生成固化文件;
Analyze Design Using ChipScope:在线调试工具。
image066.png

4.2.19原理图模块
image068.png

4.2.20引脚分配
这里本教程是将常用工具拆开一一详细的讲解,实际上我们在使用的时候只需要在Synthesize-XST、Implement Design上右击选择Run All全部运行就可以了,不需要去点开加号一个一个运行,如图 4.2.21所示。
image070.png

4.2.21全编译运行
也可以点击(图 4.2.16)中编号3方框里的快捷按钮,鼠标放上去就会显示对应功能描述,这里就不再赘述了。Implementation模式下的Design工具就介绍到这里了,下面我们再切换到Simulation模式(点击图 4.2.22的Simulation前面的圆框)看看仿真模式下的工具有哪些。
image072.png

4.2.22仿真模式
从上图中可以看到在仿真模式下有一个flow_led_tb(即Testbench文件)的文件,这个就是我们的仿真文件,那么如何得到这个文件呢?如图 4.2.23所示我们右击源文件,在弹出的菜单中选择“New Source”以创建一个新文件。
image074.png

4.2.23创建Testbench文件
之后进入如图 4.2.24所示的界面,我们把文件类型选择为Verilog Test Fixture(仿真文件),文件名取为flow_led_tb(仿真文件命名规范:工程名+下划线+tb)以防止和其他源文件相混淆,文件存放路径放在图 4.2.2所创建的sim文件夹下(这里我们建议在sim文件夹下再创建一个tb文件夹用来专门存放Testbench文件)。这里要注意它是默认将这个仿真文件加入工程的,如果不想加入请将“Addto project”选项前的勾去掉。
image076.png

4.2.24创建Testbench文件
之后我们点击”Next>”按钮进入仿真源文件的选择,如图 4.2.25所示:
image078.png

4.2.25选择需要仿真的源文件
因为我们本次例程就一个源文件,所以没得选,如果是多个源文件,这里请选择你想要仿真的源文件。选中后我们点击”Next >”按钮进入仿真文件信息总结界面如图 4.2.26所示:
image080.png

4.2.26仿真文件信息总结
如果没问题我们点击“Finish”按钮,如果有问题点击“< Back”按钮返回,重新设置。创建完成后就可以生成一个仿真文件模板了,在这个模板里我们可以编写我们的仿真代码,主要是激励的编写。
flow_led_tb文件内容(仿真代码)如下:
  1. <font size="4">`timescale1ns / 1ps
  2. module flow_led_tb;   

  3.     //Inputs
  4.     reg sys_clk;
  5.     reg sys_rst_n;

  6.     //Outputs
  7.     wire [3:0 led;

  8.     //Instantiate the Unit Under Test (UUT)
  9.     led_top uut (
  10.         .sys_clk(sys_clk),
  11.         .sys_rst_n(sys_rst_n),
  12.         .led(led)
  13.     );

  14.     initial begin
  15.         // Initialize Inputs
  16.         sys_clk = 0;
  17.         sys_rst_n = 0;

  18.         // Wait 100 ns for global reset to finish
  19.         #100;
  20.       sys_rst_n=1;  
  21.         // Add stimulus here

  22.     end
  23.    always#10 sys_clk=~sys_clk;
  24.    
  25. endmodule</font>
复制代码
到这里,在仿真模式下创建仿真文件就讲完了,有了仿真文件就可以直接运行仿真工具了,如图 4.2.27所示(此处暂不运行仿真):
image082.png

4.2.27运行仿真工具
这里需要注意的是仿真工具有两种,一种是ISE自带的ISIM仿真工具,另一种是与Modelsim软件进行联合仿真,具体如何调用这两个仿真工具将在后面仿真章节和Modelsim使用章节跟大家详细介绍。本小节对Design设计栏的常用工具就介绍到这了,至于其他的工具在后面例程的学习中再慢慢和大家讲解。
1.2.4        综合分析
在上一节中我们学习了如何使用ISE的Design设计工具,现在掌握了工具之后我们就可以进行综合分析了。我们接着按上面章节的设计输入继续往下做。
我们直接点击全编译的快捷按钮(绿色三角形)如图 4.2.28所示:
image084.png

4.2.28全编译
如果我们的代码没有错误,那么全编译通过后设计实现工具会显示一个绿色小对勾,如图 4.2.29所示,Synthesize-XST有一个黄色感叹号,表示有警告,这是因为我们还没添加时序约束文件,添加后全编译就不会有警告了(编写代码出现普通警告不影响代码功能,但是尽量避免出现大量警告)。
image086.png

4.2.29全编译完成
如果我们代码有错误,如图 4.2.30所示,在Synthesize-XST栏显示综合不通过并出现一个红叉,并且在底下窗口栏会显示相应的错误提示,这需要我们按照错误提示修改代码,直到编译通过。
image088.png

4.2.30全编译不通过
1.2.5        ISIM仿真
当我们代码综合分析通过后仅仅能代表我们的语法和逻辑是没有问题的,但是功能是否能达到我们的预期要求就需要我们进行仿真看看仿真结果了。
在ISE工具栏这节讲解Simulation模式下的仿真工具时已经创建了一个Testbench的模板并写好了仿真代码,如图 4.2.31所示:
image090.png

4.2.31仿真激励代码
从上图中我们可以看到流水灯工程仿真代码的激励文件很简单,就是添加一个复位和一个时钟就可以了,当我们在仿真一个比较复杂的工程时,我们的激励代码会更加的复杂,具体的仿真激励怎么编写大家可以参考语法篇的内容,本章节主要介绍软件的使用方法不过多讲解语法。写好激励文件后我们要保存,保存好后我们就可以调用仿真工具进行仿真了。在上文工具栏介绍章节中笔者提到过仿真有两种工具可以使用,一种是ISE自带的ISIM仿真工具,另一种是和Modelsim软件进行联合仿真,本小节介绍的是ISIM工具仿真,至于Modelsim仿真我们会专门开一个大章节的篇幅去讲解。
下面我们先右击我们的仿真文件flow_led_tb如所示:
image092.png

4.2.32修改工程属性
在这里我们可以修改我们的工程属性主要是将仿真工具改为ISIM,如果一开始创建工程的时候就已经选择好了,那么就不用再次修改,如上图方框圈出来的仿真工具就已经是ISIM了,如果你一开始没有选择好,或者中途想换一个仿真工具那么继上图操作后进入如图 4.2.33所示的界面:
image094.png

4.2.33选择仿真工具
我们找到Simulator选项,可以看到有好几种仿真模式可以选择。我们常用的是ISIM仿真和Modelsim-SE仿真,本小节我们选择ISIM仿真。选好后点击”OK”按钮,回到Design设计界面,选择运行仿真工具如图 4.2.34所示;
image096.png

4.2.34运行仿真工具
运行仿真工具后,就会进入ISIM界面如图 4.2.35所示:
image098.png

4.2.35 ISIM界面
下面我们讲解一下在ISIM界面观察运行结果的几个常用工具,如图 4.2.36所示:
image100.png

4.2.36 ISIM常用工具
编号1:上一步,下一步工具;
编号2:查找工具;
编号3:放大波形、缩小波形、显示全部波形、跳到黄色标识竖线位置;
编号4:添加标记(添加蓝色标识竖线)、跳到上一标记位置、跳到下一标记位置;
编号5:重新开始、连续运行、按步运行;
编号6:按步运行的时间长度;
编号7:跳出连续运行(会回到代码界面,点击代码窗口下方任务栏的Default.wcfg*就可以回到波形界面)。
现在我们以流水灯工程为例来讲解一下如何仿真我们的源文件,看看仿真结果是否符合我们的预期要求。首先进入ISIM界面以后我们先设置单步仿真时间为500ms,如图 4.2.37所示:
image102.png

4.2.37单步运行时间
为什么这里要设为500ms呢,因为我们的预期目的是让四颗LED灯成流水的方式依次亮灭,每次亮的时间为100ms,这在我们的代码中也可以看出,如下图所示:
image104.png

4.2.38流水灯代码
代码中计数器counter每数5000000个时钟周期清零一次(实际多一个时钟周期,因为从零开始计数的,这里忽略),流水灯是每当计数器counter等于9的时候流水(流水就是指切换下一个灯亮)一次,每颗灯所亮的时间刚好是5000000个时钟周期,每个时钟周期为20ns,则灯每持续100ms流水一次。我们将仿真运行时间设置成500ms则刚好可以看到流水灯流水切换四次,如果这四次的值是按照流水的标准从低位向高位流动的,我们就认为仿真结果正确。
设置好单步运行时间后我们先点击Restart按钮,让仿真重新准备开始如图 4.2.39所示:
image106.png

4.2.39重新运行仿真
此时我们看到波形显示栏中漆黑一片,没有任何波形,我们点击单步运行按钮让仿真工具开始仿真,待运行结束后我们再点击显示全部波形按钮,最后观察仿真结果如所示:
image108.png

4.2.40仿真结果
从上图我们可以看到波形窗口有led、sys_clk、sys_rst_n三个波形,其中led的分别是0010、0100、1000、0001、0010,我们看它的高电平1确实是从低位向高位流动的,所以符合我们的预期要求。这里我们还可以将显示的值由二进制换成其他进制,如图 4.2.41所示:
image110.png

4.2.41更换显示方式
如上图所示我们右击需要观察的波形会弹出一个菜单栏,菜单栏中可以对当前波形作出处理,简单的像剪切、复制、删除、查找、更改颜色等等就不说了,这里提两个最常用的,一个是Radix用来更改显示的进制,如上图所示就是选择成10进制,当然也可以选择成其他进制,根据需求来选择。另一个就是Go To Source Code(映射到代码),点击该选项会直接跳到代码界面,告知该信号在代码中对应哪个端口。ISIM讲到这笔者相信大家应该已经学会了如何去简单的使用它了,因为ISIM现在使用的人不是很多,主流都是使用Modelsim去联合仿真,所以ISIM我们就简单讲解到这。
1.2.6        创建约束文件
当我们仿真的结果符合我们预期的要求时基本上代表我们的工程没有什么太大问题了,但是仿真终归是仿真,最终我们还是要下板子去实际验证才行。要想我们的代码能够在物理硬件上运行就必须给我们的工程添加时序约束和引脚约束,我们上文提到过PlanAhead可以用来分配引脚,分配好后点击保存会自动生成一个UCF文件,但是那样操作比较麻烦,我们更习惯于直接创建一个用户约束文件(UCF文件),然后在该文件里手动输入时序约束语句和引脚分配语句。
第一步创建UCF文件,如图 4.2.42所示:
image112.png

4.2.42 创建UCF文件
这里我们选择New Source选项进入文件创建界面,如图 4.2.43所示:
image114.png

4.2.43创建UCF文件
在上图所示界面我们选择“ImplementationConstraints File”实现约束文件选项,然后命名(这里命名最好跟工程名保持一致,方便后期移植)为flow_led,将保存路径放到图 4.2.2创建的prj文件夹下,然后点击”Next >”按钮进入Summary界面,如图 4.2.44所示:
image116.png

4.2.44 Summary界面
然后点击“Finish”按钮会出现一个如图 4.2.45所示的界面:
image118.png

图 4.2.45 覆盖询问提示
出现这个界面是因为在流水灯工程中之前创建过UCF文件,现在虽然被删除了但是ISE仍然存在记忆,所以会询问你是否覆盖,如果是全新创建的一个工程,没有创建过UCF文件,那么就不会出现这个询问提示框。这里我们直接点击Yes完成UCF文件的创建,如图 4.2.46所示;
image120.png

图 4.2.46 UCF文件
从上图我们可以看到在左边工程文件下出现了一个UCF文件,但是这个文件目前是空白的,右边的编辑栏中什么也没写入,下面我们就可以将流水灯工程的时序约束语句和引脚分配语句写到这个空白的UCF文件里了,内容如下:
  1. <font size="4">NETsys_clk      LOC = N8  | IOSTANDARD = "LVCMOS33" | TNM_NET= sys_clk_pin;
  2. TIMESPECTS_sys_clk_pin = PERIOD sys_clk_pin 50000 kHz;

  3. NETsys_rst_n    LOC = G16 | IOSTANDARD ="LVCMOS33";

  4. NETled<0>       LOC = T5 | IOSTANDARD= "LVCMOS33";
  5. NETled<1>       LOC = M6 | IOSTANDARD= "LVCMOS33";
  6. NETled<2>       LOC = M7 | IOSTANDARD= "LVCMOS33";
  7. NETled<3>       LOC = T3 | IOSTANDARD= "LVCMOS33";</font>
复制代码
写好后如下图所示:
image122.png

图 4.2.47 UCF文件
这里简单讲解一下约束语句和引脚分配语句:
NET:端口关键字,用来引出端口如sys_clk、sys_rst_n、led<0>、led<1>、led<2>、led<3>。
LOC:引脚关键字,后面接等于号用来把端口分配到具体引脚如LOC = N8。
IOSTANDARD:电压标准关键字,后面接等于号用来约束引脚的电压如IOSTANDARD = "LVCMOS33"。
TNM_NET(timing name fornets):网络约束,把时钟(sys_clk)选出来赋予命名如TNM_NET= sys_clk_pin,并对整个网络所在路径的所有有效同步元件进行约束,可以穿过IBUFG。
TIMESPEC、PERIOD:周期约束,用来约束时钟周期如TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 50000 kHz。
当写好时序约束和引脚分配语句后点击保存,这个时候我们的工程就算真正意义上的完成了。
1.2.7        下载验证
约束文件完成后我们就可以生成bit流文件进行下载验证了,如图 4.2.48所示:
image124.png

图 4.2.48 生成bit流文件
右击“Generate ProgrammingFile”,在弹出的菜单中选择“Run”运行,会出现如图 4.2.49所示的界面:
image126.png

4.2.49 保存询问窗口
一般运行一个工具前都会跳出这样一个保存询问的窗口,碰到这种窗口直接点击Yes就可以了。然后我们静静等待bit流生成,当bit流生成成功后Generate Programming File工具前会出现一个绿色对勾符号如下图所示:
image128.png

4.2.50 下载文件生成成功
这个时候我们就可以把超越者开发板连接好如图 4.2.51所示:

4.2.51 硬件连接
将下载器USB端连接电脑USB接口,按下电源开关,然后我们回到ISE界面运行硬件连接工具,如图 4.2.52所示:
image132.png

4.2.52 ISE软件界面显示
运行后会出现如图 4.2.53所示的界面,询问我们是否打开iMPACT工具:
image134.png

4.2.53 iMPACT工具提示
我们点击“OK”按钮进入iMPACT界面,如图 4.2.54所示:
image136.png

4.2.54 iMPACT界面
我们双击“Boundary Scan”进入下一个界面,如图 4.2.55所示:
image138.png

4.2.55 iMPACT界面
继续点击上图红色方框所选的按钮进入下一界面,如图 4.2.56所示:
image140.png

4.2.56 iMPACT界面
这里我们直接点击“Yes”按钮,进入加载bit流窗口,如图 4.2.57所示:
image142.png

4.2.57 加载bit流文件
我们先找到刚刚生成的(一般bit流文件就在工程路径下),然后选中bit流文件。点击“Open”会出现如图 4.2.58图 4.2.59所示界面:

image144.png

4.2.58 PROMs询问窗口
这里我们选择“No”。进入下一个界面,如图 4.2.59所示
image146.png

4.2.59 器件型号
点击“Ok”按钮,会发现iMPACT界面左下方出现下载选项,如图 4.2.60所示:
image148.png

4.2.60 下载选项
双击“Program”,当iMPACT界面出现如图 4.2.61所示的“ProgramSucceeded”就代表下载成功,此时板子上流水灯就开始运行了。
image150.png

4.2.61 下载成功
1.3       Chipscope在线调试工具的使用
我们在日常开发代码的时候经常会遇到一些bug是仿真解决不掉的,因为仿真仅仅是对我们设计输入的源文件进行仿真,并没有考虑到时序约束、引脚约束等问题,所以经常会出现仿真没有问题但是下载到板子上就会有问题。这个时候我们就需要用到逻辑分析仪来实际检测我们设计中的一些关键信号了,这种调试方法我们称之为板级调试。传统的FPGA板级调试是由外接的逻辑分析仪连接到 FPGA 的控制管脚,然后将内部信号引出至引脚IO上,进行板级调试。这种方法的缺点是首先我们需要一个逻辑分析仪,而逻辑分析仪一般价格都比较昂贵,且对于需要测试几十个引脚的时候,选择使用外接的逻辑分析仪就比较繁琐了。在线逻辑分析仪克服了以上所有的缺点,其借用了传统逻辑分析仪的理念以及大部分的功能,并利用 FPGA 中的逻辑资源,将这些功能植入到 FPGA 的设计当中。一般地在线逻辑分析仪的应用原理框图如图4.3.1所示:
image152.png

4.3.1 在线逻辑仪原理框图
其中,待测设计(DesignUnder Test,DUT)就是用户逻辑,它与片内的在线逻辑分析仪一起位于FPGA中。在线逻辑分析仪通过一个或多个探针(Probe)来采集希望观察的信号,然后通过片内的 JTAG 硬核组件,来将捕获到的数据传送给下载器,进而上传到ISE上以供用户查看。ISE也能够按照上述数据路径,反向地向片内在线逻辑分析仪传送一些控制信息。由此可见,在线逻辑分析仪不需要将待测信号引出至 I/O 上,也不需要电路板走线或者探点,当然更不需要外部的逻辑分析仪的花费,在 ISE内部就可以将在线逻辑分析仪添加到设计中。但是在线逻辑分析仪会占用一定数量的内部逻辑资源,如块RAM、查找表、触发器等等。
在 ISE 中,在线逻辑分析仪的功能被称为Chipscope,它以 IP 核的形式被加入到用户设计中。ISE 工具提供了两种方法来插入Chipscope IP核,一种是集成逻辑分析仪核(ILA core,Integrate Logic Analyzer core),该核主要用于提供触发核捕获的功能;第二种是集成控制核(ICON core,Integrated Contorller core),负责ILA core核JTAG端口的通信。一个ICON core可以连接1~15个ILAcore。ChipScope工作时,ILA core根据用户设置的触发条件捕获数据,然后在ICON core控制下,通过JTAG端口上传到计算机,最后用ChipScope Pro Analyzer显示信号波形。
1.3.1        集成逻辑分析仪核
下面我们先来介绍第一种插入方法,在正式插入集成逻辑分析仪前先跟大家聊一聊如何防止信号被ISE软件优化掉。在使用ISE软件对代码进行编译的时候软件会自动对我们的代码逻辑进行一定程度上的优化,在这个过程中某些信号就被优化掉了,Chipscope信号列表中压根就没这个信号,而这个信号又恰恰是你想要观察的信号,碰到这种情况怎么办呢?
我们可以在信号前面加(*KEEP= "TRUE"*)语句,如我们要抓取led信号可以写成“(*KEEP = "TRUE"*)reg [3:0] led”这样就可以在一定程度上防止被优化。如果加防止优化语句不管用,还可以把需要抓取的信号赋值给一个冗余输出端口,然后抓取那个输出端口信号,这样就不会被优化了。此外还建议把层次化结构属性勾选上,这样在使用Chipscope的时候可以定位到单个模块,如下图所示:
image154.png

4.3.2 打开属性面板
如上图所示点击Process Properties进入属性面板,如下图所示:
image156.png

4.3.3 属性面板
如上图所示,可以把Keep Hierarchy选项栏选为Yes,这样编译器就会按照层次化去综合,在Chipscope中看信号也会分成层次模块,想添加哪个模块信号就点击哪个模块(流水灯工程就一个模块所以选不选都无所谓)。
接下来我们就来正式创建集成逻辑分析仪核,如图 4.3.4所示,选中源文件后点击鼠标右键选择“New Source”,进入创建文件界面:
image158.png

4.3.4 添加Chipscope IP
在创建文件界面我们找到ChipScopeDefinition and Connection File,创建Chipscope文件,并命名为flow_led(这里命名建议和工程名保持一致),路径放在prj文件夹下,如图 4.3.5所示:
image160.png

4.3.5创建Chipscope文件
然后点击”Next >”按钮进入信息总结界面如图 4.3.6所示:
image162.png

4.3.6 Summary 界面
这里我们可以看到所创建的Chipscope文件的信息总览,如果没问题就点击”Finish”按钮完成Chipscope文件的创建,如果有问题点击”< Back”按钮重新修改。创建好Chipscope文件后我们可以看到在工程下面出现一个后缀为“cdc”的文件,这个就是我们的Chipscope文件,如图 4.3.7所示:
image164.png

4.3.7 完成Chipscope创建
接下来我们双击上图中的cdc文件进入Chipscope IP设置界面如图 4.3.8所示:
image166.png

4.3.8配置Chipscope IP
这里我们要把Use SRLs和Use RPMs都勾选上,其中Use SRLs(SRL = Shift RegisterLUT)选项使编译器用移位寄存器查找表(Shift Register LUTs)代替触发器(flip flops)和乘法器。因此它能有效的减少FPGA内部资源,提高ChipScope性能。Use RPMs(RPM = RelationallyPlaced Macros)包含RLOC约束,RLOC定义了潜在设计原语的顺序与结构。Use RPMs让编译器用FMAP,HMAP,ROM,RAM等相关联的宏模块,使逻辑块布局的更加合理,可以有效的提高速度与性能,并节省FPGA资源。然后我们点击”Next >”按钮进入下一界面,如图 4.3.9所示:
image168.png

4.3.9配置Chipscope IP
这个界面我们保持默认即可,直接点击”Next >”按钮进入下一个界面,如图 4.3.10所示:
image170.png

4.3.10配置Chipscope IP
其中:
Trigger Parameters:触发参数设置栏;
Trigger Ports:触发端口数量选择;
Trigger Width:触发宽度(如果不确定后面想抓取的信号总位宽时,建议先设置为256位宽,这样等后面把想抓取的信号全部添加完成后再回到这一步修改即可);
Match Type:触发类型,这里共有六种触发类型,每种类型(Match Type)能够设置的触发条件(Bit Values)有所不同,相应的功能(Functions)也有所不同,下表将每种类型对应条件及功能都一一列出:
4.3.1 触发类型一览表
Match Type
Bit Values
Functions
  
Basic
  
0,1,X
=,<>
  
Basic w/edges
  
01XRFBN
=<>
  
Extended
  
0,1,X
=,<>,>,>=,<,<=
  
Extended w/edges
  
01XRFBN
=<>>>=<<=
  
Range
  
0,1,X
=,<>,>,>=,<,<=,in range,not in range
  
Range w/edges
  
01XRFBN
=<>>>=<<=in rangenot in range
为了防止大家对上表中的触发条件(Bit Values)和功能(Functions)理解的不明确,我们又做了下面这张表用来作补充说明:
4.3.2 参数解释
参数
含义
  
0
  
低电平
  
1
  
高电平
  
X
  
不定值
  
R
  
上升沿(Rising
  
F
  
下降沿(Falling)
  
B
  
双边沿(Both Edge
  
N
  
非边沿(No Edge)
  
=
  
等于
  
<>
  
不等于
  
<
  
小于
  
<=
  
小于等于
  
>
  
大于
  
>=
  
大于等于
  
in range
  
在某个范围内
  
not in range
  
不在某个范围内
因为本次流水灯例程非常的简单,所以在此我们触发类型选择Basic就可以了,选好后点击”Next >”按钮进入下一个捕获参数(Capture Parameters)设置界面,如图 4.3.11所示:
image172.png

4.3.11 捕获参数设置
其中:
Capture Parameters:捕获参数设置栏;
Data Depth:当触发条件满足以后,采样的数据的个数。这个值设置的越大,那么得到的数据就越多,但相应的占用FPGA内部的资源也越多。
Clock Edge:时钟边沿,这里选择上升沿(Rising);
Data Same As Trigger:抓取的信号既可以作为触发信号,也可以作为数据信号。对于inout信号(双向信号),建议只作为数据信号,不作为触发信号,因为在不同的条件下这个信号的方向会改变,本身就具有不确定性。
捕获参数设置完成后点击”Next>”按钮进入端口连接设置栏,如图 4.3.12所示:
image174.png

4.3.12 端口连接
我们双击红色的CLOCKPORT进入时钟选择界面,如下图所示:
image176.png

4.3.13 选择时钟
这里选择的时钟就是采样时钟,最好选择跟数据处于同一时钟网络下的时钟信号作为采样时钟。我们先找到输入时钟(sys_clk),如上图编号1所示,再点击“Make Connections”,这样采样时钟就设置好了,点击”OK”按钮回到端口连接界面。此时可以看到CLOCK PORT已经由红色变为黑色了,如图 4.3.14所示:
image178.png

4.3.14端口连接
接下来我们再双击红色的“TRIGGERPORTS”对需要抓取的信号进行连接设置,如图 4.3.15所示:
image180.png

4.3.15 抓取信号设置
这里我们先点击上图中编号1标记的Trigger/Data Signals,然后可以看到编号2的位置出现了我们工程中的信号,把我们想要抓取的信号一个一个添加进去(选中一个信号,再点击编号3标记的Make Connections,重复操作,直到把想抓取的信号全部添加完)。添加完成后可以看到编号4标记的位置就出现了我们想抓取的信号后,这个时候点击”OK”按钮完成,回到端口连接界面,会发现TRIGGER PORTS依旧是红色的,因为我们之前在设置触发宽度的时候选择的是256位宽,而我们实际抓取的信号只占用了4位位宽,所以我们要回到触发参数设置界面,把触发位宽改为4位就可以了,如下图所示:
image182.png

4.3.16 触发参数设置界面
然后我们再一次回到端口连接的界面会发现,这时我们的TRIGGER PORTS就变成黑色的了如所示:
image184.png

4.3.17 配置完成
到这里我们就把所有的配置都完成了。点击“Return to Project Navgator”按钮,会出现一个询问是否保存的对话框,如图 4.3.18所示:
image186.png

4.3.18配置完成
选择“是(Y)”按钮,然后回到ISE的Design设计工具栏,重新生成bit流下载文件(生成bit流文件步骤请参考上一节内容)。下载文件生成完毕后,同样在Design设计栏找到Analyze Design Using ChipScope,右击运行,如图 4.3.19所示:
image188.png

4.3.19 运行Chipscope
这个时候ISE就会打开ChipScope Pro界面,如图 4.3.20所示:
image190.png

4.3.20 ChipScope Pro局部界面
然后我们把开发板连接好并打开电源(连接方式与下载bit流文件相同),现在我们就可以点击上图左上角红色方框标记的那个按钮,让ChipScopePro识别到我们的硬件。识别后会出现我们的FPGA型号信息,如图 4.3.21所示:
image192.png

4.3.21 FPGA型号信息
点击”OK”按钮,进入信号观察界面,如图 4.3.22所示:
image194.png

4.3.22 信号观察界面
如上图所示找到编号1标志位置,右击我们的FPGA型号,在出现的选项栏中选择Configure,之后会进入cdc文件加载界面,如图 4.3.23所示:
image196.png

4.3.23 加载cdc文件
按照上图编号1、2、3的步骤把我们之前创建的cdc(prj文件夹下)文件加载进来,然后点击”OK”按钮,出现如图 4.3.24所示的界面就代表加载成功。
image198.png

4.3.24加载cdc文件
加载成功后点击”OK”按钮就可以了,这个时候你会发现代码会下载到板子上并开始运行,Chipscope也会出现触发条件界面和波形界面,如图 4.3.25所示:
image206.png

4.3.25 在线调试界面
如果没有出现触发条件界面和波形界面可以双击上图所示左上角的Trigger Setup和Waveform按钮,如果出现的界面挤成一团可以把鼠标放在边界进行调整。下面对在线调试界面的常用工具做一个说明,如图 4.3.26所示:
image202.png

4.3.26 波形观察界面工具
如上图所示,其中:
编号1:
Trigger Setup:打开触发条件界面(如上图所示);
Waveform:打开波形界面(如上图所示);
Listing:打开数据表格界面,即数据用表格的方式展现出来,并且可以导出(如图 4.3.27所示)。
Bus Plot:打开数据坐标图,主要用来展示数据与时间的关系或者数据与数据的关系(如图 4.3.27所示)。
编号2:
触发模式窗口,有三种模式其中Single表示单次触发,Repetitive表示连续触发以及Startup模式(startup模式不常用,选择这种模式可以脱离ChipScope ProAnalyzer工具,具体可以参考Xilinx官方文档UG029)。
编号3:
从左往右三个按钮分别代表触发、停止触发、实时触发。
编号4、编号12、编号13:
编号4中从左往右四个工具分别是跳转到X标尺、跳转到O标尺、跳转到T标尺(跳转到T标尺有两个,当放大波形后T标尺有可能被移动到窗口左侧隐藏,也有可能移到右侧隐藏,当T标尺在左边的时候就点箭头朝左的按钮,反之点右边的按钮)。这些标尺就对应编号12方框中的三根标尺线,这三根标尺线中红色的T标尺代表的触发的起始位置,它的位置不能移动;绿色的O和蓝色的X是两个可移动标尺,他们两个的绝对位置以及差值均显示在编号13位置的显示栏里,有时候需要测量两个关键点的差值就可以拖动这两个标尺来直接得出结果。
编号5:
从左往右三个按钮分别代表放大波形、缩小波形、波形自适应;
编号6:
Value触发条件设置,可以根据表 4.3.1和表 4.3.2设置成你需要的触发条件;
编号7:
Radix即信号显示的进制,默认是二进制显示方式,也可以改变成其他进制方式来显示;
编号8:
Depth采样深度,在上文设置捕获数据参数的时候已经讲解过了,它就表示一共抓取多少个数据;
编号9:
Position偏移量,这个参数默认情况是0,但是建议最好设置一个偏移量,假如这里我设置的是100,它表示的是把触发条件满足之前的100个数据和触发条件满足之后的1948(2048-100)个数据显示到波形窗口中,这样我们就可以捕捉到在触发之前的一部分信息,更有助于问题的定位。
编号10:
StorageQualification这个参数就是之前在.cdc文件勾选了EnableStorage Qualification这个选项后才有的,一般选择默认的All Data。
编号11:
被观察信号的列表,可以从Signals栏添加,如图 4.3.28所示:
编号14、编号15:
这个小按钮主要用来展开一个信号组或者收起一个信号组,比如图中的led信号就可以展开观察每一个bit位(led_0、led_1、led_2、led_3)。
编号16:
这个是显示栏的边界,把鼠标放上去可以调整显示栏的大小、位置。
image204.png

4.3.27 Listing& Bus Plot

4.3.28 添加观察信号
将Chipscope界面的常用工具栏介绍完后,现在以流水灯工程为例,来给大家演示一遍。假如现在我想观察流水灯第四颗灯亮,那么我把触发条件中led_3设为1作为触发标志,然后偏移量设为100,选择单次触发,点击Run按钮,我们观察一下波形,如下图所示:
image208.png

4.3.29 调试波形
从上图中我们可以看到运行结果如绿色编号5、编号6、编号7所示,偏移了100个数据、四颗led灯只有led_3为高电平点亮其余都是低电平熄灭、led这个信号组总的值为8(因为最高位led_3为1所以整个led的值为8)说明我们的信号是正常的,板子上的流水灯也是在正常运行的。
到这里我们第一种插入ChipscopeIP核的方法就介绍完了。
1.3.2        采用例化ILA核的方式抓信号
下面我们再将另一种方法插入ChipscopeIP核,即集成控制核,如图 4.3.30所示:
image210.png

4.3.30 创建 IP
这次我们按上图所示步骤创建一个可以例化的IP核命名为flow_led_ila,路径同样放在prj文件夹下面,但是这次有个不一样的地方是软件给我们创建了一个ipcore_dir文件夹,然后点击”Next >”按钮进入IP核选择界面,如图 4.3.31所示:
image212.png

4.3.31 创建ILA IP
我们按照上图的步骤找到需要创建的ICON核然后点击”Next >”按钮进入信息总结界面,如图 4.3.32所示:
image214.png

4.3.32 Summary界面
这里点击”Finish”按钮会弹出一个询问框,如图 4.3.33所示:
image216.png

4.3.33 询问窗口
我们点击Yes进入下一个界面,如图 4.3.34所示:
image218.png

4.3.34 ILA创建
这里的设置和上一小节第一种方法是一样的,设置好后点击”Next >”按钮,进入下一个界面,如下图所示:
image220.png

4.3.35 ILA创建
点击Generate,等待ILA创建完成。创建好后工程下面会出现一个后缀为xco的文件,如下图所示:
image222.png

4.3.36 完成创建
到这里我们ILA就创建好了下面我们还需要创建一个ICON的IP核,如下图所示:
image224.png

4.3.37 创建ICON IP
跟创建ILA步骤是一样的,这里我们把命名改为flow_led_ICON,路径都和创建ILA的路径保持一致,然后点击”Next >”按钮进入下一个界面,如下图所示:
image226.png

4.3.38创建ICON IP
这里步骤也是与创建ILA核一模一样,只是在步骤三的时候选择ICON(ChipScope Pro-Integrated Controller),然后点击”Next >”按钮进入Summary界面,如下图所示:
image228.png

4.3.39 Summary界面
检查一下Summary界面,如果没问题就点击”Finish”按钮,如果有问题点击”< Back”按钮返回重新设置。当点击Finish之后会出现如下图所示的界面:
image230.png

4.3.40 创建ICON
这个界面的设置与上一小节集成逻辑分析仪核设置是一样的,设置完成后点击Generate完成ICON核的创建,创建好后如下图所示,在Design设计栏中出现了ICON的xco文件。
image232.png

4.3.41完成 ICON 核创建
这个时候我们找到工程路径下的ipcore_dir文件夹,如下图所示:
image234.png

4.3.42 ipcore_dir文件夹
ipcore_dir文件夹中圈出来的四个文件是可以重复使用的,我们可以把它们复制到一个新的工程路径下,然后将上图中属性是“.v”的两个文件添加到新工程中直接例化就可以了,不用每次都创建一遍IP核。
我们本次以流水灯工程为例,演示一遍如何例化,如下图所示:
image236.png

4.3.43 例化代码
这里要注意一点,上图中编号1的方框中有两个xco文件,相当于两个封装核,已经包含了图 4.3.42中的两个“.v”文件,所以这里不需要再重复添加“.v”文件。例化代码如上图编号2方框所示,然后我们保存代码,重新生成bit流文件。
之后我们打开Chipscope,前面的步骤与上一小节的步骤一样。到达如下图所示这一步的时候需要注意:
image238.png

4.3.44 加载bit
我们不再是选择加载cdc文件了,而是把刚刚生成好的bit流文件加载进来。如上图所示步骤来加载,加载完成后如下图所示:
image240.png

4.3.45加载bit流完成
我们点击”OK”按钮之后可以看到板子上流水灯开始运行了,接下来就可以在Chipscope界面查看波形了,方法与上一小节完全一样,这里就不再赘述了。
1.4       程序固化
在前面的章节我们使用的都是bit流文件,这种文件是直接下载到FPGA的BRAM中去,掉电会丢失。在实际应用中我们往往需要将写好的代码固化到硬件当中以便随时调用,所以我们在开发板中搭载了一个Flash芯片用作固化程序的非易失性存储设备。具体是怎么固化的呢,我们继续往下看。
1.4.1        生成固化文件
先第一步还是打开iMPACT软件(如果不会打开的可以参考4.2.7小节内容),如下图所示:
image242.png

4.4.1 Create PROM File
按照上图的步骤先双击CreatePROM File,然后在跳出的窗口中选择Configure Single FPGA,再点击绿色小箭头进入下一个步骤,如下图所示:
image244.png

图 4.4.2 Create PROM File
如上图步骤所示先选择StorageDevice大小,我们选128M(具体大小由板子搭载的Flash芯片决定),然后点击“Add Storage Device”按钮,会发现白色方框中出现“128M”字样,同时第二个绿色箭头被点亮,再点击第二个绿色箭头进入下一个步骤,如下图所示:
image246.png

4.4.3 Create PROM File
如上图所示我们先给固化文件命名为fiow_led_mcs,然后选择输出路径,这里建议就放在工程路径下,或者在工程路径中专门新建一个文件夹存放,然后固化文件类型选择mcs,全部设置好后点击”OK”按钮,进入下一个界面,如下图所示:
image248.png

4.4.4 Create PROM File
这里点击”OK”按钮进入下一个界面,如下图所示:
image250.png

4.4.5 Create PROM File
该界面主要是让我们把bit流文件加载进来,因为我们的固化文件还是基于bit流文件生成的,按照上图步骤找到我们工程下的bit流文件然后点击“打开”,进入下一个界面,如下图所示:
image252.png

4.4.6 Create PROM File
这里选择No,我们只加载一个bit流文件就行了,点击No之后会弹出一个操作完成的提示框,如下图所示:
image254.png

4.4.7 Create PROM File
点击”OK”按钮返回iMPACT界面,如下图所示:
image256.png

4.4.8 Create PROM File
这个时候我们可以看到iMPACT界面左下方出现了一个绿色箭头Generate File,我们双击它就可以生成固化文件了。固化文件生成成功后iMPACT界面会显示Generate Succeed,如下图所示:
image258.png

4.4.9固化文件成功生成
1.4.2        下载固化文件
在上一节中我们已经生成了固化文件,紧接着上一节的步骤双击Boundary Scan进入Boundary Scan界面,如下图所示:
image260.png

4.4.10 Create PROM File
在Boundary Scan界面我们先点击扫描硬件按钮。当扫描到我们的硬件后空白区域会显示我们的硬件型号,并弹出一个对话框,在弹出的对话框中选择Yes,如下图所示:
image262.png

4.4.11 Boundary Scan界面
点击完Yes之后会弹出加载bit流的选项框,如下图所示:
image264.png

4.4.12加载bit
我们找到工程路径下的bit流文件,先加载bit流。点击Open之后会弹出一个对话框,如下图所示:
image266.png

图 4.4.13 是否添加固化文件询问框
我们点击Yes,进入加载固化文件界面,如下图所示:
image268.png

4.4.14 加载固化文件
我们找到之前生成的固化文件(.mcs文件),选中它然后点击打开,之后进入Flash芯片型号选择界面,如下图所示:
image270.png

4.4.15 Flash芯片型号
这里的Flash芯片型号由开发板上搭载的实际芯片型号决定,超越者开发板的型号如上图所示。选择好之后点击”OK”按钮,之后弹出FPGA芯片型号界面,如下图所示:
image272.png

4.4.16 FPGA型号显示界面
我们直接点击”OK”按钮,完成固化文件的所有配置进入下载界面,如下图所示:
image274.png

4.4.17下载程序
下载界面如上图所示,先单击Flash按钮,它会变成绿色,同时界面左下方出现下载选项,双击Program,之后弹出一个信息框,如下图所示:
image276.png

4.4.18 下载程序
在上图的信息框栏直接点击”OK”按钮,之后我们的固化程序开始下载,如下图所示:
image278.png

4.4.19 等待下载
固化程序下载比较慢,大约要等十几秒的时间,下载完成后会弹出一个“Program Succeeded”的对话框,如下图所示:
image280.png

图 4.4.20下载成功
此时我们就可以将开发板断电重启啦,板子上流水灯开始正常运行。
1.4.3        特别提醒
当我们程序固化完成后你可能会发现每次上电板子都要等一会代码才能跑起来,总感觉它反应比较慢,这个时候我们可以回到工程界面找到生成bit流选项,如下图所示:
image282.png

4.4.21 Gerenate Programming File
如上图所示,右击“GerenateProgramming File”,在弹出的菜单中选择“Process Properties”选项,之后会弹出bit流文件属性框,如下图所示:
image284.png

4.4.22 生成bit流文件属性
找到“ConfigurationOptions”选项,然后将Value栏的数值改大,这里不建议改最大,适中即可。然后重新生成bit流和固化文件,下载到板子中去,此时会发现,上电启动的速度变快了,不再是反应迟钝了。




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-3 16:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表