FPGA实验报告10912754.docx
《FPGA实验报告10912754.docx》由会员分享,可在线阅读,更多相关《FPGA实验报告10912754.docx(32页珍藏版)》请在冰豆网上搜索。
FPGA实验报告10912754
(此文档为word格式,下载后您可任意编辑修改!
)
序号(学号):
实验报告书
实验类别
FPGA原理及应用
学院
信息工程学院
专业
通信工程
班级
姓名
指导教师
陈适
2014年6月18日
实验课程名称:
FPGA原理及应用
实验项目名称
ArchitectureWizard与PACE实验
实验成绩
实验者
专业班级
组别
同组者
实验日期
2014年4月22日
1.实验目的
(1)熟悉并使用ArchitectureWizard;
(2)掌握如何例化DCM模块单元;
(3)熟悉并使用PACE。
2.实验内容
(1)使用ArchitectureWizard生成DCM模块单元;
(2)将例化DCM模块单元添加到工程;
(3)使用PACE进行引脚位置锁定。
3.实验原理
(1)ArchitectureWizard简介
设计结构向导ArchitectureWizard是ISE集成的设计工具,能辅助设计数字时钟管理模块(DCM,DigitalClockManager)和高速IO收发器(RocketIOTMtransceivers)。
数字时钟管理模块DCM是基于Xilinx的其他系列器件所采用的数字延迟锁相环(DLL,DelayLockedLoop)模块,在时钟的管理与控制方面,DCM与DLL相比,功能更强大,使用更灵活。
DCM的功能包括消除时钟的延时、频率的合成、时钟相位的调整等系统方面的需求。
DCM的主要优点在于:
✧实现零时钟偏移(Skew),消除时钟分配延迟,并实现时钟闭环控制;
✧时钟可以映射到PCB上用于同步外部芯片,这样就减少了对外部芯片的要求,将芯片内外的时钟控制一体化,以利于系统设计。
对于DCM模块来说,其关键参数为输入时钟频率范围、输出时钟频率范围、输入输出时钟允许抖动范围等。
DCM内部是DLL结构,对时钟偏移量的调节是通过长的延时线形成的。
DCM的参数里有一个phaseshift(相移),可以从0变到255。
可以假设内部结构里从clkin到clk_1x之间应该有256根延时线(实际上,由于对不同频率的时钟都可以从0变到255,延时线的真正数目应该比这个大得多)。
DCM总会把输入时钟clkin和反馈时钟clkfb相比较,如果它们的延迟时差不等于所设置的phaseshift,DCM就会改变在clkin和clk_1x之间的延时线数目,直到相等为止。
这个从不等到相等所花的时间,就是输出时钟锁定的时间,相等以后,lock_flag标识才会升高。
当DCM发现clkin和clkfb位相差不等于phaseshift的时候,才去调节clk_1x和clkin之间延时,所以如果clk_1x和clkfb不相关的话,那就永远也不能锁定了.
(2)PACE简介
引脚与区域约束编辑器PACE(PinoutandAreaConstraintsEditor)是一个具有图形化接口的约束输入工具,其主要功能如下:
1)指定引脚分配:
设计者可以使用引脚分配功能指定IO位置、IO组(bank)、IO标准和禁止IO分配至特定引脚、使用DRC检查IO分配是否正确。
2)附加区域约束:
PACE能够以图形化的方式显示器件资源和引脚的分布,设计者可以编辑区域约束并观察逻辑和引脚之间的连接情况。
3)浏览设计层次:
PACEd设计层次浏览器能显示设计的层次,以及各层次的资源占用情况,这对复杂的设计有很重要的作用。
5.实验过程记录
包括DCM模块生成、DCM组件例化、管脚分配、超级终端的使用、UART实时时钟操作等
(1)使用ArchitectureWizard生成DCM模块单元
1)选择Start→Programs→XilinxISE9.1i→ProjectNavigator,进入ISE的ProjectNavigator环境;
2)选择File→OpenProject,并指向如下目录,选择arwz_pace.ise打开工程;
Verilog使用者:
E:
\01.ISE9.1\xupv2pro\labs\verilog\lab2\arwz_pace
VHDL使用者:
E:
\01.ISE9.1\xupv2pro\labs\vhdl\lab2\arwz_pace
3)双击Processes窗口中的CreatNewSource,弹出新资源向导窗口,选择IP(CoreGen&ArchitectureWizard),输入my_dcm;
4)单击Next按钮,弹出SelectIP窗口,展开FPGAFeaturesandDesign和Clocking目录,选择SingleDCM;
5)单击Next按钮,显示新建资源信息,单击Finish按钮则弹出XilinxClockingWizard-GeneralSetup窗口,选中CLK0、CLKFX和LOCKED,不选中RST,输入时钟频率为100MHz
6)单击Next按钮,弹出XilinxClockingWizard–ClockBuffers窗口,保持默认选项;
7)单击Next按钮,弹出XilinxClockingWizard–ClockingFrequencySynthesizer窗口,输入50MHz输出频率;
8)单击Next按钮,显示新建资源信息。
单击Finish按钮则在工程的Sources窗口看到my_dcm.xaw作为资源添加到工程中,但没有作为一个模块加入顶层设计文件中,则需要下一步的例化过程;
(2)DCM组件的例化
1)选中my_dcm.xaw文件,则在工程的Processes窗口双击ViewHDLSource,在HDL编辑器中可以看到由ArchitectureWizard生成的DCM的VHDL源代码。
此代码中包含了一个IBUFG、一个DCM和两个BUFG例化的组件。
输入时钟CLKIN_IN驱动IBUFG,输出的时钟与DCM相接,CLKFX_BUF和CLK0_BUF输出时钟驱动BUFG组件,所有的DCM属性使用VHDLgeneric语句传递;
2)在工程的Sources窗口,双击uart_clock.vhd在HDL编辑器中打开源代码;
3)在工程的Sources窗口,选择my_dcm.xaw,在Processes窗口双击ViewHDLInstantiationTemplate在HDL编辑器中打开例化组件的模板。
在HDL例化范本my_dcm.vhi中,拷贝组件声明(从COMPONENTmy_dcm到ENDCOMPONENT)并粘贴到uart_clock.vhd代码中的--InsertDCMcomponentdeclaration,
CLK0_OUT=>open,
LOCKED_OUT=>lock
);
5)在“--SignalsforDCM,asfollows:
”注释的下方添加DCM的50MHz的信号声明:
signalclk50MHz:
std_logic;
6)在实体说明里添加lock输出管脚如下:
entityuart_clockis
Port(
tx:
outstd_logic;
rx:
instd_logic;
alarm:
outstd_logic;
clk:
instd_logic;
lock:
outstd_logic);
enduart_clock;
7)保存后,my_dcm.xaw作为一个模块加入顶层设计文件中;
图1-1顶层设计文件
(3)使用PACE进行管脚分配
1)在工程的Sources窗口,选择顶层设计文件uart_clock.vhd.v,则在Processes窗口,扩展UserConstraints并双击AssignPackagePins打开PACE,在此过程中弹出询问是否添加UCF文件到工程中对话框,单击“yes”按钮。
用VHDL做实验时,如果PACE没有自动跳出,可把lab2拷到根目录下再打开工程;
注意:
在PACE能启动之前必须先进行综合。
2)在PACE中浏览DesignObjectList-IOPins窗口,可看到所列的信号名称和信号方向是Output还是Input。
在Loc栏里每个信号对应于FPGA的管脚,FPGA的管脚分配需查看光盘数据..02.Schmatic目录下的原理图,信号连接如下:
Clk:
连接管脚BANK4,system_clock,Loc栏中填入AJ15;
Lock:
连接管脚BANK3,led_0,Loc栏中填入AC4;
Alarm:
连接BANK3,led_1,Loc栏中填入AC3;
Rx:
:
连接MAX3232的接收串行数据管脚BANK4,RS232_RX_DATA,Loc栏中填入AJ8;
Tx:
连接MAX3232的发送串行数据管脚BANK4,RS232_TX_DATA,Loc栏中填入AE7。
图1-2管脚图
3)保存后出现BusDelimiter对话框,选择XSTDefault,单击OK按钮。
在DeviceArchitecture窗口放大直到可以看清每个管脚;
Alarm:
连接BANK3,led_1;
Rx:
连接MAX3232的接收串行数据管脚BANK4,RS232_RX_DATA;
Tx:
连接MAX3232的发送串行数据管脚BANK4,RS232_TX_DATA。
注意:
图中粉红色彩条说明管脚在同一个bank中。
单击每个蓝色IO管脚,则对应着DesignObjectList-IOPins窗口相应的管脚。
4)单击工程中Sources窗口中的uart_clock.ucf文件,然后双击Prosesses窗口中UserConstraints目录下的EditConstraints(Text),就可以看到由PACE生成的uart_clock.ucf管脚约束文件;
(4)检查Pad报告并打开超级终端
1)单击工程中的Sources窗口的uart_clock.vhdv文件,然后打开Processes窗口中的ImplementDesign目录下的Place&Route目录,双击PadReport。
当Place&Route完成后,PadReport在HDL编辑器中打开,可以看PadReport来确定IO信号管脚约束是否与分配的管脚相匹配;
2)在开始菜单――所有程序――附件--通讯中单击超级终端,输入名字并单击OK按钮,选择COM1作为端口连接,点击确定按钮后按照下图进行设定,最后点击确定按钮完成设定;
每秒位数:
9600;数据位:
8;奇偶校验:
无;停止位:
1;数据流控制:
无
3)单击超级终端菜单中属性中的设置,单击ASCII设置,选中“将换行符附加到传入行末尾”并单击确定按钮。
再次单击确定按钮退出属性对话框;
5.实验结果
程序的下载并操作UART实时时钟
1)给板卡上电,打开SW11开关;
2)单击工程的顶层文件uart_clock.vhdv文件,然后双击Processes窗口中的GenerateProgrammingFile来生成此工程的Bitstream文件并下载到芯片中去;
3)当这个过程完成后,打开GenerateProgrammingFile目录,双击ConfigureDevice(iMPACT),弹出iMPACT对话框后选择ConfigureDevicesusingBoundary-Scan(JTAG),然后单击Finish按钮;
4)当等到弹出AssignNewConfigurationFile对话框后,前两个器件都选择bypass按钮,最后一个器件单击uart_clock.bit文件选择Open按钮,然后再点击OK按钮后弹出一个警告信息,单击OK按钮;
5)在iMPACT窗口右键点击xc2vp30,选择Program后弹出ProgrammingProperties窗口单击OK按钮,如果下载成功则出现ProgramSucceeded;
6)在超级终端窗口则会看到KCPSM3>提示符如图;
注意:
这里超级终端是否显示成功不仅与下载是否成功有关,而且还与电脑的连接有关。
如果COM1不行的话,可以试一下COM2。
图1-3超级终端显示仿真结果
在KCPSM3>提示符后输入“time”命令,则会以”命令,则警告变成有效,然后输入“alarm00:
00:
30”设定警告时间为30秒,输入“time00:
00:
00”设定时间后,会看到板卡上的LED1灯会在30秒警告后熄灭。
当你输入“alarmoff”命令后则关闭警告,LED1灯则再次亮起。
实验课程名称:
FPGA原理及应用
实验项目名称
全局时序约束实验
实验成绩
实验者
专业班级
组别
同组者
实验日期
2014年4月29日
1.实验目的
1)学习使用约束编辑器(ConstraintsEditor)设置全局时序约束;
2)学习分析映像后的静态时序报告来检验时序约束的实现;
3)学习分析布局布线后静态时序报告来确认实际的设计效果。
2.实验要求
通过设置全局时序约束来提高系统时钟频率,用映像后的静态时序报告和布线布局后的静态时序报告来分析设计的性能。
3.实验原理
FPGA设计一般使用同步时序电路。
同步时序电路基于时钟触发沿设计,对时钟的周期、占空比、延时和抖动提出了很高的要求。
为了满足同步时序设计的要求,一般在FPGA设计中采用全局时钟资源驱动设计的主时钟,以达到最低的时钟抖动和延迟。
FPGA全局时钟资源一般使用全铜层工艺实现,并设计了专用时钟缓冲与驱动结构,从而使全局时钟到达芯片内部的所有可配置单元(CLB)、IO单元(IOB)和选择性块RAM(BlockSelectRAM)的时延和抖动都为最小。
为了适应复杂设计的需要,Xilinx的FPGA中集成的专用时钟资源与数字延迟锁相环(DLL)的数目不断增加,
(1)约束编辑器简介
在Xilinx开发环境中,映射前输入的约束称为逻辑约束,逻辑约束保存在UCF文件中。
创建和修改约束时可以直接编辑UCF文件,但要熟悉UCF文件的语法以及设计中各触发器、网线、PAD等组件的命名。
使用约束编辑器(ConstraintsEditor)来创建和修改约束,可以降低这方面要求,提高效率。
FPGA设计中的约束文件有3类:
用户设计文件(.UCF文件);网表约束文件(.NCF文件);物理约束文件(.PCF文件)。
这些文件可以完成时序约束、管脚约束以及区域约束,这三类约束文件的关系为:
用户在设计输入阶段编写UCF文件,UCF文件经设计综合后生成NCF文件,最后再经过实现而生成PCF文件。
下面的实验过程中要注意这三种文件的生成步骤。
(2)本实验中的PicoBlaze系统原理
在这个实验中,与一些外设结合设计实现一个PicoBlaze系统,硬件设计原理框图如下:
图2-1硬件设计原理框图
这个实验的主要任务是在PicoBlaze汇编编译系统中编程实现一个回路测试(loopbacktest),这个回路测试是首先发射一个信号到某设备,然后从该设备返回信号,以此来测试该设备是否正常工作。
5.实验过程记录
(1)编译范本中的汇编
1)选择Start→Programs→XilinxISE9.1i→ProjectNavigator,进入ISE的ProjectNavigator环境;
2)选择File→OpenProject,并指向如下目录,选择time_const.ise打开工程;
Verilog使用者:
E:
\01.ISE9.1\xupv2pro\labs\verilog\lab3\time_const
VHDL使用者:
E:
\01.ISE9.1\xupv2pro\labs\vhdl\lab3\time_const
3)选择Start→Programs→Accessories→CommandPrompt,打开命令提示符,
并使用cd命令指向如下的汇编编译器的目录下,如图所示。
E:
〉cdE:
\01.ISE9.1\xupv2pro\labs\vhdl\lab3\Assembler
输入>kcpsm3program.psm命令。
4)执行完命令后,会看到在Assembler下生成了一些文件,其中包括VHDL
(program.vhd)和Verilog(program.v),这就是汇编编译系统将编写的汇编源文件program.psm自动生成了用于程序内存的VHDLVerilog格式文件,来用于综合和仿真。
将生成的program.vhdv文件添加到工程中;
5)单击工程Sources窗口中的顶层文件loopback.vhd,然后双击Processes窗口中的Synthesis-XST目录下的“CheckSyntax”,检验添加的文件是否有语法错误。
(2)输入全局时钟约束
1)单击工程Sources窗口中的顶层文件loopback.vhd,然后双击Processes窗口中的UserConstraints目录下的CreateTimingConstraints;
2)本工程若没有UCF文件,则弹出提示对话框,单击Yes按钮,将自动生成UCF文件为loopback.ucf,并添加到工程中;
3)当打开约束编辑器时,选中“Globle”全局约束窗口;
4)双击Period列下的单元格,弹出ClockPeriod对话框,可以设置Period约束。
输入10ns,单击OK按钮;
5)双击PadtoSetup列下的单元格,弹出对话框并输入6ns,单击OK按钮,完成输入延迟(OFFSETIN)约束设置;
图2-2输入延迟(OFFSETIN)约束设置
6)点击ClocktoPad列下的单元格,弹出对话框并输入7.5ns,单击OK按钮,完成输出延迟约束设置;
图2-3输出延迟约束设置
7)选择File→Save保存,然后选择Exit退出约束编辑器。
(3)输入引脚位置约束
大部分的FPGA在设计完成前就进行了引脚分配。
在这个实验中,通过UCF文件手动输入来分配输入输出引脚的位置,也可以采用实验二中使用PACE进行引脚位置分配。
区域约束的主要目的是关联耦合逻辑,减少后续布线压力;其次是加大资源利用率,距离近的信号延迟不一定就小,信号线上延迟主要是来自线与线之间的转接(如LUT,switch-box)。
由于FPGA内部连接的结构是横纵两向的,斜向的连接延迟会大于横纵方向上最大跨度连接。
所以,在做位置约束时尽量避免斜向;而区域约束要宽松,如果没有资源上的顾虑,约束面积建议为所需的3倍以上。
需要注意的是,区域约束对时序的改善贡献很小,紧的约束甚至有恶化时序的可能。
通过PACE软件,可将设计中的所有逻辑资源,包括全局时钟缓冲器、硬核乘加器、块RAM、硬核处理器、高速收发器以及数字时钟管理模块等模块放入器件架构(DeviceArchitecture)的任何位置。
1)单击工程Sources窗口中的顶层文件loopback.vhd,然后双击Processes窗口中的UserConstraints目录下的EditTimingConstraints(Text),打开loopback.ucf文件;
2)打开XUPVirtex-IIPro使用手册,关于设置IO引脚位置如下表所示。
表3-1IO引脚位置图
引脚位置约束语法如下:
信号:
NET"alarm"LOC="K12";
总线:
NET"led<0>"LOC=P12;
NET"led<1>"LOC=P13;
按照表中的位置及语法格式进行引脚分配,在loopback.ucf文件的“#PACE:
StartofPACEIOPinAssignments”注释下方输入以下引脚分配内容,输入完后保存loopback.ucf文件。
若找不到“#PACE:
StartofPACEIOPinAssignments”注释,直接添加需要添加的内容即可。
NET"clk"LOC="AJ15";
NET"leds<0>"LOC="AC4";
NET"leds<1>"LOC="AC3";
NET"leds<2>"LOC="AA6";
NET"leds<3>"LOC="AA5";
NET"rs232_rx"LOC="AJ8";
NET"rs232_tx"LOC="AE7";
NET"rst"LOC="AG5";
NET"switches<0>"LOC="AC11";
NET"switches<1>"LOC="AD11";
NET"switches<2>"LOC="AF8";
NET"switches<3>"LOC="AF9";
(4)实现设计并进行时序分析
执行此步骤是通过映像实现设计来生成映像后时序报告,在时序分析器(TimingAnalyzer)中打开此报告。
通过此报告可以验证时序约束是否实现,以此避免浪费布局布线的时间。
1)单击工程的Sources窗口中的顶层文件loopback.vhd文件,展开Processes窗口中的ImplementDesign,然后再展开Map目录下的GeneratePost-MapStaticTiming,右键单击AnalyzePost-MapStaticTiming(TimingAnalyzer)并选择RerunAll;
2)单击“AnalyzeAgainstTimingConstraints”按钮,映像如下表。
表2-2映像表
引脚位置约束语法如下:
信号:
NET"alarm"LOC="K12";
总线:
NET“led<0>”LOC=P12;
NET“led<1>”LOC=P13;
按照表中的位置及语法格式进行引脚分配,在loopback.ucf文件的“#PACE:
S