《Xilinx FPGA设计基础》课件第7章_第1页
《Xilinx FPGA设计基础》课件第7章_第2页
《Xilinx FPGA设计基础》课件第7章_第3页
《Xilinx FPGA设计基础》课件第7章_第4页
《Xilinx FPGA设计基础》课件第7章_第5页
已阅读5页,还剩170页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章FPGA逻辑设计实验7.1实验一熟悉Xilinx开发工具7.2实验二结构体生成向导和PACE7.3实验三全局时钟约束实验7.4实验四综合技巧实验7.5实验五IP核生成实验7.6实验六Chipscope调试实验

7.1实验一熟悉Xilinx开发工具

7.1.1实验介绍

本实验主要介绍Xilinx的开发工具——ISE的使用。

7.1.2实验目标

●了解FPGA的开发流程;

●熟悉Spartan-3E开发套件的功能特点;

●清楚PicoBlaze8位控制器的特性。7.1.3实验过程

本实验包含五个主要的部分:使用ISE集成环境创建一个新的工程;添加设计文件到工程中;编译设计;仿真设计;实现设计。每个部分都有对应的详细步骤,并有图表辅助说明步骤的内容。读者可以按照详细步骤一步一步完成实验,也可以按照大的实验部分自行完成。

7.1.4实验步骤

首先,阅读PicoBlaze的说明文档,以便熟悉8位微控制器的体系结构和编译系统,可参考“..\KCPSM3\docs\”目录下的KCPSM3_manual.pdf文档。本系列实验将使用基于PicoBlaze处理器的设计,举例说明ISE设计流程及其相关的各个重要工具。

1.启动ISE创建一个新的工程

(1)选择“开始→程序→XilinxISE9.1i”或直接在桌面双击XilinxISE9.1i图标,打开ISE9.1i集成环境。

(2)在ISE中,选择菜单栏中的File→NewProject,打开创建新工程界面,如图7.1所示。图7.1创建新工程界面

(3)在工程名称填写栏里输入Flow_Lab;工程存放位置选择“…”按钮指定到下列目录之一,然后单击OK按钮。

● Verilogusers:c:\xup\fpgaflow\labs\verilog\lab1;

● VHDLusers:c:\xup\fpgaflow\labs\vhdl\lab1。

(4)单击Next按钮,将出现器件和设计工具选择对话框(见图7.2)。图7.2工程属性参数

(5)在图7.2中选择下列参数,并单击Next按钮。

Family(器件类别):Spartan3E;

Device(器件型号):XC3S500E;

Package(封装):FG320;

Speed(速度等级):–4;

SynthesisTool(综合工具):XST(VHDL/Verilog);

Simulator(仿真工具):ISESimulator(VHDL/Verilog);

PreferredLanguage(偏好语言):VerilogorVHDL(selectyourpreference)。单击Next按钮,将会出现创建新文件的对话框,如图7.3所示,在这个对话框里可以通过单击NewSource…按钮,按照用户定义的模块名称、端口属性等信息来创建一个新的HDL源文件,对文件的全部后续修改只能在HDL编辑器中完成。本实验所用到的HDL源文件已被创建好了,故此处不用单击NewSource…按钮创建新文件。图7.3创建新文件对话框

(6)单击Next按钮,将会出现添加已有文件的对话框,如图7.4所示。图7.4添加已有文件对话框

2.添加HDL源文件到工程

(1)单击AddSource,浏览c:\xup\fpgaflow\KCPSM3\VHDLorVerilog目录。

(2)选择VHDL/Verilog文件kcpsm3_int_test和kcpsm3,并单击Open按钮。

(3)单击Next按钮,然后单击Finish按钮,将出现选择源文件类型对话框,如图7.5所示。图7.5选择源文件类型对话框

(4)单击OK按钮,接受默认设置。

注意:在分层显示列表中,会出现带有红色问号标记名为int_test的模块。这个模块是个BlockRAM,它包含PicoBlaze控制器的指令信息,这些指令信息将在随后的步骤中被添加。

3.编译设计

编写MY_AND2实体的VHDL代码。

(1)打开Windows搜索,在KCPSM3子目录(c:\xup\fpgaflow\KCPSM3\Assembler)里找到编译器(见图7.6)。图7.6编译器目录内容

(2)使用诸如写字板这样的文本编辑器打开文件int_test.psm,查看代码,可参考PicoBlaze8-bitEmbeddedMicrocontrollerUserGuide或KCPSM3manual得到技术帮助。这些文档存放在Docs子目录中。

(3)打开命令窗口(开始→程序→附件→命令提示符)。

(4)使用cd命令切换到Assembler目录(见图7.7)。

>cdc:\xup\fpgaflow\KCPSM3\Assembler图7.7命令窗口

(5)在命令提示符下输入以下命令,立即编译代码输出程序ROM文件。

>kcpsm3int_test.psm

注意:在编译器子目录里,现在应该能看到几个以INIT_TEST*开头的文件,包括VHDL(INT_TEST.VHD)和Verilog(INT_TEST.V)程序ROM文件。

(6)在ISE集成环境里,打开Project→AddCopyofSource并找到INT_TEST.VHD或INT_TEST.V文件(c:\xup\fpgaflow\KCPSM3\Assembler路径),如图7.8所示。图7.8添加INT_TEST.HDL程序ROM文件到工程

(7)单击Open按钮,然后单击OK按钮把INIT_TEST当作设计文件添加到工程,如图7.9所示。图7.9PicoBlaze设计的层次浏览窗口

4.仿真设计

添加测试文件testbench.vhd/.v并阅读其代码。使用XilinxiSIM仿真工具完成行为级仿真并检查仿真结果。

(1)在ISE的Sources窗口中,选择Project→AddCopyofSource并找到c:\xup\fpgaflow\KCPSM3\vhdl(orverilog)目录。

(2)选择文件test_bench.vhd(或testbench.v)并单击Open按钮。

(3)选择SimulationOnly并单击OK按钮,添加测试文件到工程,如图7.10所示。图7.10包含testbench的层次浏览窗口

(4)选中testbench测试文件,在Processes窗口中展开XilinxISESimulator仿真工具,右键单击SimulateBehavioralModel并选择属性Properties。

(5)在SimulationRunTime选项下输入值25000ns并单击OK按钮,如图7.11所示。

(6)双击SimulateBehavioralModel仿真设计。仿真结束后会出现两个窗口。一个窗口以波形方式显示仿真结果,另一个以HDL格式显示testbench文件。图7.11iSIM行为级仿真属性

(7)单击waveform标签查看仿真结果。缩放并仔细观察波形以确认模块仿真结果的正确性。(见图7.12和图7.13)

(8)关闭simulatorwindows。单击Yes按钮,确认退出仿真。图7.12中断服务程序产生中断中断确认中断向量中断程序启动计数值图7.13输出波形波形开始波形值写开始

5.实现设计

实现设计过程中将会生成一些报告。

(1)在Sources窗口中,选择Synthesis/Implementation,并选中顶层设计文件kcpsm3_int_test.v,如图7.14所示。图7.14Sources窗口

(2)在Processes窗口中双击ImplementDesign(见图7.15),ISE工具会运行所有需要的过程来实现设计,在实现之前首先运行综合。图7.15Processes窗口

(3)在实现过程中,单击ImplementDesign旁边的“+”展开实现步骤,查看进展。

每个阶段完成后,都会出现一个对应符号:

对号表示正确;

感叹号表示警告;

X表示错误。

对于这个设计,在某些步骤中可能会出现一个感叹号(警告),这里的警告是可以忽略的。

(4)在ISE集成环境的底部消息窗口阅读消息。

(5)实现结束后,在DesignSummary窗口中查看设计的资源利用情况(见图7.16)。图7.16设计概要7.1.5实验总结

在本实验中,我们创建了一个简单的逻辑门模块,这个模块在上层的模块中被调用,模块之间通过信号相连。读者通过这个简单的实验,接触了使用VHDL编程的一些基本技术和方法,这些方法会在后续的工程中经常使用。 7.2实验二结构体生成向导和PACE

7.2.1实验介绍

本实验主要介绍结构体生成向导和PACE的使用。

7.2.2实验目标

●使用结构生成向导配置一个DCM;

●例化DCM;

●使用PACE指定引脚位置;

●实现设计并确认引脚分配生效;

●下载并测试硬件设计。7.2.3实验过程

本实验主要包含四个部分:使用结构体生成向导配置一个DCM;例化DCM到VHDL/Verilog设计中;使用PACE指定引脚位置;实现、下载设计并最终通过硬件测试设计。

7.2.4实验步骤

1.使用结构体生成向导配置一个DCM

打开已有工程,使用结构体生成向导配置一个DCM模块,模块输出55MHz时钟。

(1)选择“开始→程序→XilinxISE9.1i→ProjectNavigator”,打开ISE9.1i集成环境。

(2)在ISE中,选择菜单栏中的File→OpenProject。

(3)指定到以下目录并选择arwz_pace.ise。

Verilogusers:c:\xup\fpgaflow\labs\veriloglab2\arwz_pace;

VHDLusers:c:\xup\fpgaflow\labs\vhdl\lab2\arwz_pace。

(4)单击Open按钮。

(5)在Processes窗口中双击CreateNewSource。

如果没有看到CreateNewSource过程,请检查是否在Sources窗口中选择了一个HDL源文件。

(6)在新文件窗口中,选择IP(CoreGen&ArchitectureWizard)并输入my_dcm作为文件名。

(7)单击Next按钮。

(8)在选择Core类型窗口中,展开FPGAFeaturesandDesign→Clocking→Spartan-3E,Spartan-3A并选择SingleDCMSPv9.1i,如图7.17所示。图7.17结构体类型选择

(9)单击Next按钮,然后单击Finish按钮。

(10)在XilinxClockingWizard–GeneralSetup窗口中设置选项(见图7.18)。

CLK0,CLKFX和LOCKED选项框:选中;

RST选项框:不选;

InputClockFrequency(输入时钟频率):50MHz。图7.18XilinxClockingWizard–GeneralSetup窗口

(11)单击Next按钮。

(12)在XilinxClockingWizard–ClockBuffers窗口(见图7.19)中,接受默认选项并单击Next按钮。图7.19XilinxClockingWizard–ClockBuffers窗口

(13)在XilinxClockingWizard–ClockFrequencySynthesizer对话框(见图7.20)中,输入55MHz作为输出频率,单击Next按钮,然后单击Finish按钮。图7.20定义DCM的输出频率注意:如果在设计层次中没有看到my_dcm.xaw,可以通过Project→AddSource手动添加,新文件(my_dcm.xaw)将被当作源文件加进工程(见图7.21)。这个新文件被例化到HDL文件中之后,才会出现在设计层次中。图7.21DCM出现在层次设计列表

2.例化DCM

上一步骤已经创建了所需的文件,因而现在就可以例化DCM。从例化模板中复制粘贴文本信息到uart_clock.vhd并连接信号。

(1)在Sources窗口中,双击uart_clock.vhd打开文件内容。

(2)在Sources窗口选中my_dcm.xaw。

(3)在Processes窗口中,双击ViewHDLInstantiationTemplate,在文本编辑器里打开例化模板。

(4)在例化模板my_dcm.vhi中,复制componentdeclaration(从COMPONENTmy_dcm开始,到ENDCOMPONENT;结束)并粘贴到文件uart_clock.vhd的注释语句InsertDCMcomponentdeclarationhere之下。

(5)在例化模板my_dcm.vhi中,复制componentinstantiation(从Inst_my_dcm:my_dcm开始直到文件结尾)并粘贴到文件uart_clock.vhd的注释语句InsertDCMcomponentinstantiationhere之下。

(6)如下填写端口连接,完成例化:注意:clkin_ibufg_out输出端口对包含RocketIO™收发器的设计有用。因为本实验针对的不是Virtex-IIPro™器件,所以这个端口被连接到一个虚假信号。

(7)在注释语句SignalsforDCM之下,为DCM的55MHz输出添加一个信号声明,如下所示:

signalclk55MHz:std_logic;

注意:uart_clock.vhd设计已经被更新,因此所有的时钟信号(clk)被改名为(clk55MHz)。

(8)如下所示在实体中添加一个输出引脚lock:

3.使用PACE指定引脚位置

大多数FPGA设计在完成之前都引出了所需引脚。PACE有助于指定引脚和检查所选的引脚定义是否满足有关I/O标准和I/Obanks的DRC规则。

(1)在Sources窗口中,选中顶层设计文件uart_clock.vhd/.v。

(2)在Sources窗口中,展开UserConstraints并双击AssignPackagePins,打开PACE。当要求加入UCF文件到工程时,单击YES按钮。在PACE启动之前,设计必须被综合。

(3)浏览DesignObjectList窗口,查看列出的信号。注意,这些是设计的输入/输出信号。

(4)根据以下需求输入引脚约束。参考DigilentSpartan-3EUsers’Manual,获得模块的引脚和UCF映射信息。

clk:连接到50MHz晶振;

lock:连接到led0;

alarm:连接到led1;

rx:连接到从MaximMAX3232接收串口数据的引脚;

tx:连接到发送数据到MaximMAX3232的引脚;

(5)单击save按钮并选择XSTDefault:<>作为I/O总线分隔符再单击OK按钮。

(6)在DeviceArchitecture窗口中,放大直到看清单个引脚数字(见图7.22)。I/O引脚边上的彩色条指示哪些引脚在相同的I/Obank。可以容易地看到哪些引脚被指定到了相同的bank。

(7)单击eachcoloredI/Opin,在DesignObjectList窗口里的相应引脚会被选中。

(8)在DesignObjectList窗口中,确认引脚指定被更改。

(9)单击File→Save保存这些引脚放置。

(10)单击File→Exit关闭PACE。

(11)在工程浏览器的Processes窗口中,展开UserConstraints并双击EditConstraints(Text),查看文件uart_clock.ucf内的约束信息,查看UCF文件的版本以确认约束是否被写入文件。图7.22器件结构

4.检查Pad报告并启动超级终端会话

实现设计并查看Pad报告,确认引脚指定被接受。开始一个超级终端会话。

(1)确保Sources窗口中的顶层设计文件uart_clock.vhd/.v被选中。

(2)在Processes窗口中,展开ImplementDesign过程并展开Place&Route。

(3)双击PadReport。工程浏览器自动确定哪些过程必须运行,并且会在Place&Route过程完成后打开报告。

(4)查看报告,确认I/O信号的引脚编号与之前指定的一致。

(5)通过开始→程序→附件→通信→超级终端打开一个超级终端会话。

(6)给会话命名,单击OK按钮,并定义COM1作为端口连接。

(7)单击配置按钮并定义下列参数作为端口设置(见图7.23)。完成后单击OK按钮。图7.23串口通信设置● Baudrateof38400(波特率设为38400)

● 8databits(8比特数据位置)

● Noparitybits(无校验位)

● 1stopbit(1位停止位)

● Noflowcontrol(无流控)

(8)单击settings标签,然后单击ASCIISetup标签,选中Appendlinefeedstoincominglineends选项,再单击OK按钮。再次单击OK按钮退出属性对话框(见图7.24)。图7.24串口连接的ASCII设置

5.下载设计

生成bitstream并下载到FPGA。

(1)选中uart_clock.vhd并双击GenerateProgrammingFile生成下载到FPGA的bitstream。

(2)处理过程结束后,展开GenerateProgrammingFile并双击ConfigureDevice(iMPACT)。

(3)选中ConfigureDevicesusingBoundary-Scan(JTAG),单击Finish按钮。

(4)出现AssignNewConfigurationFile对话框时,为xc3s500e(firstdeviceinJTAGchain)器件选择uart_clock.bit文件并单击Open按钮。注意:会出现一个警告信息,提示启动时钟被更改为JTAG时钟,单击OK按钮。

(5)对于其他器件,单击Bypass(见图7.25)。图7.25JTAG下载链

(6)连接JTAG下载电缆和串口通信电缆到Spartan-3E开发板并加电。

(7)在iMPACT窗口中,右键单击xc3s500e,选择Program并在ProgrammingOptions对话框中单击OK按钮。

注意:在超级终端窗口中将看到KCPSM3>提示符(见图7.26)。图7.26与PicoBlaze串口通信

6.操作UART实时钟表

(1)输入指令“time”显示当前时间,时间格式为hh:mm:ss,如图7.27所示。图7.27当前时间显示

(2)输入指令“alarm”显示当前报警时间,时间格式为hh:mm:ss,如图7.28所示。图7.28报警时间和状态显示

(3)输入指令“alarmon”使报警器运行。

(4)输入指令“alarm00:00:30”设置报警器30秒后报警。

(5)输入指令“time00:00:00”设置时间。

注意:一旦开始报警,DigilentSpartan-3E开发板上的led1会点亮。

(6)输入指令“alarmoff”关闭报警器。

注意:led0熄灭,表示报警器被关闭。

7.2.5实验总结

在这个实验中完成了以下内容:使用结构向导配置一个DCM并将其例化到设计中;使用PACE完成引脚分配;实现设计并完成硬件测试。

7.3实验三全局时钟约束实验

7.3.1实验介绍

本实验将使用全局时钟约束来提升系统时钟频率,还可使用Post-MapStaticTimingReport和Post-Place&RouteStaticTimingReport来分析设计的性能。

7.3.2实验目标

●使用XilinxConstraintsEditor输入全局时钟约束;

●查看Post-MapStaticTimingReport报告,检查时钟约束是否可实现;

●查看Post-Place&RouteStaticTimingReport报告,确定每个时钟约束的最长路径延迟。7.3.3实验概要

1.构建硬件系统

本实验将实现一个带有几个外设的嵌入式处理器系统。硬件方面的大多数系统已经具备,但是还需要阅读系统的硬件描述,以便理解系统的结构原理。

这个实验的主要任务是编写PicoBlaze软件程序,编译、实现回路测试。回路测试作为测试器件是否工作正常的一种方式,是通过发送信号给器件并接收由器件返回的信号。

第一个回路测试将把切换开关的设置显示在LEDs。这里,相当于用手指发送信号,用眼睛接收系统返回的信息。第二个回路测试将通过RS232串口接收返回信息。这里,电脑通过自身串口发送,再通过串口接收系统返回的信息。如图7.29所示,系统有许多输入,包括时钟、复位输入,还有4-bit切换开关和串口输入。串口接收信号由开发板上的RS232插座输入并经过电平转换之后到达FPGA。图7.29也给出了输出,包括8-bitLED和串口输出。串口输出信号由FPGA输出并经过电平转换之后到达开发板上的RS232插座。

RS232_TX 串口发送输出信号

LEDS[7:0] 8比特LED输出信号

必须用给定的源文件实现系统,然后开发一个简单的软件程序。软件开发被划分为三个部分,最终的软件需要在复位时发送一个短消息,然后并行完成两个回路测试功能。

●在LEDS上显示切换开关设置

●显示由RS232接口串行接收到的数据

完成这个实验,将会理解如何使用PicoBlaze实现一个简单的嵌入式处理器系统。

2.时序报告分析

时序报告给出了为什么时钟约束失败、哪些路径通过和哪些路径失败的细节信息。

打开时序报告时,TimingAnalyzerutility会启动生成时序报告。

TimingAnalyzerGUI包含三个窗口,如图7.30所示。可以使用左侧的层次浏览界面轻松浏览大报告。

路径细节信息窗口在右下方,它包含了时序报告的实际文本信息。

顶层窗口显示当前在路径细节信息窗口中查看的时序报告部分。图7.30时序分析GUI界面路径分析的细节信息(见图7.31)包含路径延迟信息,包括以下内容:

● Slack:路径的约束长度与实际长度之差(负值slack表示路径约束失败);

● 路径起点与终点(Pathsourceanddestination);

● 路径上的增量延迟列表(abbreviationscorrespondtodatasheetinformation);

● 延迟路径上的每个节点扇出;

● 路径总延迟(Totaldelayonthepath);

● 逻辑和路由延迟占总延迟的百分比:由此可判断出路径的布线是否很差。图7.31详细路径分析7.3.4实验过程

这个实验将创建一个简单的嵌入式系统并输入位置和全局时钟约束,包括三个主要步骤:打开工程;输入全局时钟约束;最后实现设计并分析时序。

7.3.5实验步骤

1.编译一个程序模板

启动ISE工程浏览器并打开time_const工程。编译汇编程序模板program.psm,生成包含指令ROM的文件program.v。

(1)选择“开始→程序→XilinxISE9.1i”,打开ISE9.1i集成环境。

(2)在ISE中,选择菜单栏中的File→OpenProject。

(3)指定到以下目录之一:

VHDLusers:c:\xup\fpgaflow\labs\VHDL\lab3

Verilogusers:c:\xup\fpgaflow\labs\Verilog\lab3

(4)选中time_const.ise,单击Open按钮查看顶层设计。

(5)选择“开始→程序→附件→命令提示符”,打开命令输入窗口。

(6) CD切换到编译器子目录(位于工程目录),其中包括一个程序模板(program.psm)和一个用于编译它的批处理文件。

>cdc:\xup\fpgaflow\labs\verilogl\lab3\assembler(Verilogusers)

>cdc:\xup\fpgaflow\labs\vhdl\lab3\assembler(VHDLusers)

(7)在提示符后输入以下命令,编译程序模板生成一个程序ROM:

>kcpsm3program

注意:这个程序模板只是语法上正确,但不具备什么功能,需要在后面的步骤里编写一个有意义的程序。

(8)在ISE里,添加生成的ROMHDL文件到工程。

(9)选中顶层设计文件并在综合过程下双击运行CheckSyntax进行语法检查。

(10)切换到行为级仿真模式并使用testbench.v/vhd进行仿真,仿真时间设置为35000ns。波形放大后,可以看到如图7.32所示的仿真结果,切换开关上有数值为170的输入,而LEDs上没有输出。后面将输入程序代码以使切换开关的设置显示在LEDs上。图7.32仿真波形

2.输入全局时钟约束

这一步,将使用名为约束编辑器的图形化工具输入PERIOD和OFFSETIN/OUT约束。

(1)在Sources窗口中,选择顶层设计文件loopback.vhd/.v。

(2)在Processes窗口中,展开UserConstraints并双击CreateTimingConstraints,如图7.33所示。图7.33Processes窗口

(3)单击Yes按钮,创建一个名为loopback.ucf的新UCF文件并将其添加到工程。

(4)约束编辑器打开后,单击Global按钮,如图7.34所示。图7.34全局约束编辑器

(5)双击在Period下的空白处,打开时钟周期对话框(见图7.35)。图7.35时钟周期对话框

(6)接受20ns和50%时钟占空比的默认设置并单击OK按钮。

(7)双击PadtoSetup(OFFSETIN)下面的空白处并输入7ns的约束(见图7.36),完成后单击OK按钮。图7.36OFFSETIN约束对话框

(8)双击ClocktoPad(OFFSETOUT)下面的空白处并输入7.5ns的约束(见图7.37),完成后单击OK按钮。图7.37OFFSETOUT约束对话框现在,约束编辑器里应该有如下所示的三个约束,如图7.38所示。图7.38全局时钟约束

3.输入引脚位置约束

大多数FPGA设计在完成之前都需要规划引脚。这部分,将通过从文本文件复制LOC约束到UCF文件来给设计的输入/输出引脚指定位置。

(1)展开UserConstraints并双击EditConstraints(见图7.39),打开UCF文件。图7.39打开UCF文件

(2)在LAB3目录下,使用诸如写字板之类的工具打开pinouts.txt文件,如图7.40所示。

(3)把图7.40中的约束复制到UCF文件,放在约束编辑器输入的时钟约束之下。

(4)保存并关闭UCF文件。图7.40引脚位置约束

4.实现设计并分析时序

实现设计,详细查看Post-MapStaticTimingReport和Post-Place&RouteStaticTimingReport报告,完成Chart1和Chart2图表。

(1)在Processes窗口中,展开ImplementDesign,然后展开Map。

注意:如果看不到ImplementDesign,请确认Sources窗口的loopback.vhd/.v是否被选中。

(2)展开GeneratePost-MapStaticTiming。

(3)双击AnalyzePost-MapStaticTiming。

(4)退出TimingAnalyzer。

(5)在Processes窗口中,展开Place&Route,然后展开GeneratePost-Place&RouteStaticTiming。

(6)双击Post-Place&RouteStaticTimingReport。

5.编译软件程序并完成HDL仿真

硬件满足时序要求之后,就可以开发PicoBlaze汇编程序来满足三个软件需求。程序模板包括许多有用的常量定义并被封装,因而可以独立地完成每个需求。每个需求被列为一个任务,任务1最简单,任务3最复杂。写完一个任务的程序代码后,必须重新运行编译器编译完整的程序。编写任务1的回路测试所需的程序代码并对其编译。生成ROM文件之后,添加testbench到设计中,并执行行为级仿真来测试切换开关和LEDs。

(1)在编译器子目录下编辑program.psm文件完成任务1的代码编写,读取切换开关状态,然后将其写入LED控制端口。

注意:参考汇编模板关于端口值的常量定义和关于指令的PicoBlaze文档。

提示:只需要编写两行代码(refertotheKCPSM3usermanual)。

(2)代码编写完成后,重新编译程序。

(3)切换到BehavioralSimulation模式。

(4)设置停止时间为50000ns,并完成设计的行为级仿真,如图7.41所示。图7.41设置仿真时间

(5)分析波形输出和仿真控制台,完成后关闭窗口(见图7.42)。图7.42仿真波形注意:二进制值10101010(170)施加在PicoBlaze的切换开关输入端口,输出返回到LEDs输出端口,如图7.43所示。图7.43仿真控制台的输出消息

6.生成PlatformFlashPROM文件

XilinxplatformflashPROMs提供了存储大型XilinxFPGA配置比特流的重复编程方法。DigilentSpartan-3E开发板由一个4Mbit的xcf04splatformflashPROM配置,xcf04s可存储一个xc3s500e器件的比特流,需要2270208个配置比特。这一步,将使用iMPACT生成编程PROM的Intel格式MCS文件。

(1)双击GenerateProgrammingFile,生成比特流文件。

(2)展开GenerateProgrammingFile,并双击GeneratePROM,ACE,orJTAG选项。

(3)选择PrepareaPROMfile,并单击Next按钮。

(4)保留默认值(见图7.44),选中XilinxPROM和MCS,可选择提供的一个PROM文件名,然后单击Next按钮。图7.44准备PROM文件

(5)在下拉列表中选择xcf04s,单击Add按钮,然后单击Next按钮,如图7.45所示。图7.45为Spartan-3E开发板定义xcf04sPROM图7.46制作PROM文件

(6)单击Next和Finish按钮,然后添加loopback.bit文件,对话框打开后单击No按钮不再添加其他器件,如图7.46所示。

(7)双击GenerateFile…生成MCS文件,将会显示:“PROMFilegenerationsucceeded”,如图7.47所示。图7.47生成MCS文件

7.配置PROM并运行LoopBack测试

这一步,将切换到配置模式并配置platformflashPROM使用上一步生成的MCS文件,然后通过PROM配置FPGA并测试在Digilent开发板上的loopback应用。

(1)上电并连接Spartan-3E开发板。

(2)在Flows面板中双击BoundaryScan,如图7.48所示。

(3)在空白处单击右键并选择InitializeChain。

(4)在被要求给xc3s500s指定配置文件时单击Bypass。

(5)添加 .mcs文件给xcf04sPlatformFlash器件,然后绕过CPLD。

图7.48选择边界扫描

(6)在iMPACT窗口中右键单击xcf04S并选择Program。

(7)  ProgrammingProperties对话框会被打开,实时显示编程进度。

注意:如果编程失败,取消EraseBeforeProgramming选项然后再次编程。

(8)检查配置模式,跳线被设置,以便上电启动时由PlatformFlash加载bitstream(consultwithDigilentSpartan-3Euserguide)。可重复上电由platformflashPROM重配置Digilent开发板,也可切换拨码开关控制LEDs亮或灭。7.3.6实验总结

在本实验中,使用了XilinxConstraintsEditor输入全局时钟约束,查看了Post-Map和Post-Place&RouteTimingReports报告。

时钟约束是设计期望与实现工具联系的最好方式。

在实现工具第一次布局布线时,必须检查时钟约束是否可以实现。由Post-MapStaticTimingReport报告可以估计出时钟性能。

实现完成后,必须用Post-Place&RouteStaticTimingReport报告或由TimingAnalyzer产生的自定义时序报告来检验时钟约束。 7.4实验四综合技巧实验

7.4.1实验介绍

本实验将介绍如何使用综合选项来提高XilinxFPGA设计的性能。

7.4.2实验目标

●使用保持层次、扇出等综合选项来提高调试和综合结果;

●阅读XST软件生成的综合报告,以便确定综合结果的性能。

7.4.3实验过程

本实验主要包含四个部分:回顾之前的设计;使用默认选项综合;更改综合选项;在RTL浏览器里查看综合结果。7.4.4实验步骤

1.回顾之前设计并编写软件程序

启动ISE并打开工程文件synth_lab.ise,更改实验三中创建的program.psm文件,完成任务2,即显示消息“XilinxRules!”并编译程序,生成ROM文件,将ROM文件加入工

程中。

(1)选择“开始→程序→XilinxISE9.1i”,打开ISE9.1i集成环境。

(2)在ISE中,选择菜单栏中的File→OpenProject。

(3)指定到以下目录之一:

VHDLusers:c:\xup\fpgaflow\labs\VHDL\lab4

Verilogusers:c:\xup\fpgaflow\labs\Verilog\lab4

(4)选择synth_lab.ise并单击Open按钮。

(5)使用文本编辑器打开文件program.psm,加入代码完成任务2。可参考关于PicoBlaze和编译器的技术文档。

提示:所有的ASCII字母都包含在程序顶部的常量列表中,显示一个字母只需要两个指令语句(load和output)。

(6)打开命令窗口并浏览编译器所在目录,此目录下包含有更改后的程序。

(7)输入以下命令编译程序,生成ROM文件。

>kcpsm3program

2.使用默认选项综合实现

综合loopback.v/.vhd文件。

(1)在Sources窗口中,单击loopback.v/.vhd。

(2)在Processes窗口中,双击Synthesize-XST。

(3)在Processes窗口中,展开Synthesize并双击ViewSynthesisReport,查看TimingSummary和DeviceUtilization。

(4)展开ImplementDesign并双击Place&Route。

(5)展开Place&Route并双击View/EditPlacedDesign(Floorplanner)。

(6)查看设计的层次和平面布局(见图7.49和图7.50)。

(7)退出FloorPlanner。图7.49FloorPlanner设计层次浏览图7.50设计的平面版图

3.更改综合选项

如图7.51所示,更改综合属性(KeepHierarchy栏选择Yes),然后重新综合。图7.51综合属性

(1)在Processes窗口中,右键单击Synthesize并选择Properties。

(2)在SynthesisOptions下,设置KeepHierarchy选项为Yes,如图7.51所示。

(3)单击OK按钮,然后重新综合设计。

(4)打开综合报告查看TimingSummary、Fanout和DeviceUtilization。

(5)减少最大扇出。右键单击Synthesize并选择Properties。

(6)在XilinxSpecificOptions标签下,输入50作为MaxFanout的参数值,单击OK按钮,如图7.52所示。图7.52Xilinx特性选项窗口

(7)双击Synthesize-XST重新综合设计。

(8)打开综合报告查找fanout和timingsummary。

(9)展开ImplementDesign并双击Place&Route。

(10)打开Floorplanner查看设计层次(见图7.53和图7.54)。图7.53FloorPlanner设计层次浏览图7.54层次化设计的版图

4.下载测试系统

这一步,将生成bitstream并使用JTAG下载线配置FPGA。

(1)设置配置模式跳线,使JTAG下载模式有效。

(2)连接下载线,然后给Spartan-3E开发板上电。

(3)打开超级终端会话。

(4)展开GenerateProgrammingfile并双击ConfigureDevice(iMPACT)。

(5)配置器件对话框出现时,检查是否选中了Boundary-ScanMode,单击Next按钮后再单击Finish按钮。

(6)出现iMPACT检测到两个器件提示时,单击OK按钮。

(7)指定loopback.bit文件给xc3s500e,忽略其他器件(见图7.55)。图7.55指定配置文件

(8)右键单击xc3s500e器件并选择编程下载。

(9)更改开发板上的切换开关设置,查看LEDs的变化。

7.4.5实验总结

在本实验中,可以通过改变综合选项来提高设计性能,不同的选项设置会改变设计的综合结果。 7.5实验五IP核生成实验

7.5.1实验介绍

本实验介绍使用XilinxCOREGenerator™系统创建IP核,并将IP核加入到设计中实现的过程。

7.5.2实验目标

●使用XilinxCOREGenerator™系统创建一个IP核;

●例化IP核到已有的设计中;

●对包含IP核的设计进行行为级仿真;

●硬件测试。7.5.3实验过程

本实验主要包含三个部分:使用XilinxCOREGenerator™系统创建一个blockRAM,并初始化为软件程序;例化到PicoBlaze设计中;在Spartan-3E开发板上进行测试。

7.5.4实验步骤

1.生成ROM初始化文件

启动ISE集成环境,打开工程文件。

(1)选择“开始→程序→XilinxISE9.1i”,打开ISE9.1i集成环境。

(2)在ISE中,选择菜单栏中的File→OpenProject打开已有工程。

VHDLusers:c:\xup\fpgaflow\labs\VHDL\lab4\coregen

Verilogusers:c:\xup\fpgaflow\labs\Verilog\lab5\coregen

(3)选择coregen.ise,单击Open按钮。

使用之前实验中的程序,编译软件程序生成 .coe文件,用来初始化ROM。

(4)打开位于工程所在目录的program.psm文件。

(5)编写几行代码,用超级终端回显键盘输入信息。

(6)打开命令输入窗口,切换到程序所在目录,输入以下命令编译程序:

>kcpsm3program

2.生成IP核

新建名为program的COREGenIP源文件,IP类型为双端口ROM。

(1)在Processes窗口中,双击CreateNewSource。

(2)在NewSourceWizard对话框中,选择IP(CoreGen&ArchitectureWizard),输入program作为文件名称,如图7.56所示。图7.56NewSource对话框

(3)单击Next按钮,进入DefineModule窗口。

(4)单击Next按钮。

(5)在SelectCoreType对话框中,展开Memories&StorageElements,展开RAMs&ROMs,选择BlockMemoryGeneratorv2.1,如图7.57所示。图7.57SelectCoreType对话框

(6)单击Next按钮,然后单击Finish按钮,打开COREGenerator™systemGUI。

配置如下双端口Block存储器:

● Name(名称):program;

● MemoryType(存储器类型):DualPortROM;

● MemorySize(存储器大小):1024×18。

(7)设置下列参数如图7.58所示,然后单击Next按钮。

ComponentName:program

MemoryType:DualPortROM图7.58Block存储器选项

(8)设置下列参数如图7.59所示,然后单击Next按钮。

● ReadWidth:18;

● ReadDepth:1024;

● OperatingMode:WriteFirst;

● Enable:AlwaysEnabled。图7.59端口A的设计选项和引脚极性

(9)设置下列参数如图7.60所示,然后单击Next按钮。

● ReadWidth:18;

● ReadDepth:1024;

● OperatingMode:WriteFirst;

● Enable:AlwaysEnabled。图7.60端口B的设计选项和引脚极性

(10)单击LoadInitFile,在编译器目录中选择PROGRAM.COE文件(见图7.61)。图7.61初始化存储器

(11)单击Show按钮,从下拉列表框里选择memory_initialization_vector,查看将要下载到存储器的数据内容,如图7.62所示。

(12)单击Next按钮,然后单击Finish按钮。图7.62BlockRAM初始化数据内容

3.例化BlockRAMIP核到VHDL设计中

将第二步生成的IP核例化到fifo_2048x8.vhd。

(1)在Sources窗口中,双击loopback.vhd。

(2)选择Edit→LanguageTemplates。IP核的例化模板位于窗口的COREGEN部分。

(3)展开COREGEN和VHDLComponentInstantiation,如图7.63所示,选择program。图7.63程序模板

4.完成行为级仿真

检查testbench文件,理解测试内容。

(1)在Sources窗口中,双击testbench.v/.vhd。检查testbench的功能。

(2)在Sources窗口中,选择program.xco。

(3)在Processes窗口中,展开COREGEN,双击ViewVerilog/VHDLFunctionalModel。

使用testbench.vhd文件,运行5000ns行为级仿真,查看波形确定IP核是否正确连接。

(4)在Source窗口中,选择BehavioralSimulation并选中testbench.v/.vhd。

(5)在Processes窗口中,展开XilinxISESimulator,右键单击SimulateBehavioralModel并选择Properties。

(6)输入50000ns的仿真时间。

(7)单击OK按钮。

(8)双击SimulateBehavioralModel。

(9)检查仿真波形,验证切换开关设置显示在LEDs上。

5.硬件测试

打开超级终端会话,生成bitstream下载到Spartan-3E开发板上测试。

(1)在工程目录中,双击terminal.ht,打开超级会话。

(2)在Sources窗口中,选中loopback.v/vhd,展开GenerateProgrammingfile,双击ConfigureDevice(iMPACT)。

(3) iMPACT打开时,使用JTAG下载线配置FPGA,确定选择了以下选项后,单击Finish按钮。

● Boundary-ScanMode

● Automatciallyconnectcable

(4)在出现iMPACT检测到两个器件提示时,单击OK按钮。

(5)指定loopback.bit文件给xc3s500e,跳过PROM。

(6)在iMPACT中右键单击Spartan-3E器件,选择编程,单击OK按钮,将会在超级终端窗口中看到如图7.64所示的输出结果。图7.64超级终端窗口输出7.5.5实验总结

在本实验中,我们使用COREGenerator™生成了IP核,并例化到设计中。

7.6实验六Chipscope调试实验

7.6.1实验介绍

本实验介绍如何加入ILA/ICON核到设计,并实现片上验证功能。

7.6.2实验目标

●在ISE中创建Chipscope-Pro源;

●使用Chipscope-Pro创建ILA和ICON核,并将其加入到PicoBlaze设计中;

●在ChipscopeAnalyzer中定义触发条件;

●下载bitstream,硬件运行设计;

●查看ChipscopeAnalyzer的波形显示,实现片上验证。7.6.3实验过程

本实验主要包含两个部分:更改针对PicoBlaze的程序应用;使用Chipscope-Pro实现片上验证。

7.6.4实验步骤

1.创建一个新的Chipscope-Pro源

启动ISE集成环境,打开工程文件。

(1)选择“开始→所有程序→XilinxISE9.1i”,打开ISE9.1i集成环境。

(2)在ISE中,选择菜单栏中的File→OpenProject,打开已有工程。

VHDLusers:c:\xup\fpgaflow\labs\VHDL\lab6\

chipscope

Verilogusers:c:\xup\fpgaflow\labs\Verilog\lab6\chipscope

(3)选择chipscope.ise,单击Open按钮。

(4)选择Project→NewSource,打开新建源对话框,单击ChipscopeDefinitionandConnection,输入名称loopback_cs,再单击Next按钮,如图7.65所示。图7.65新建源对话框

(5)选择loopback作为源,单击Next按钮,然后单击Finish

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论