武汉理工大学FPGA实验报告范本辉辉.
学生学号 实验课成绩
学 生 实 验 报 告 书
实验课程名称
开 课 学 院
指导教师姓名
学 生 姓 名
学生专业班级
200 200 学年 第 学期 --
1
实验教学管理基本
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
实验是培养学生动手能力分析解决问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
能力的重要环节;实验报告是反映实验教学水平与质量的重要依据。为加强实验过程管理,改革实验成绩考核方法,改善实验教学效果,提高学生质量,特制定实验教学管理基本规范。
1、 本规范适用于理工科类专业实验课程,文、经、管、计算机类实验课程可根据具体情况参
照执行或暂不执行。
2、 每门实验课程一般会包括许多实验项目,除非常简单的验证演示性实验项目可以不写实验
报告外,其他实验项目均应按本格式完成实验报告。
3、 实验报告应由实验预习、实验过程、结果分析三大部分组成。每部分均在实验成绩中占一
定比例。各部分成绩的观测点、考核目标、所占比例可参考附表执行。各专业也可以根据
具体情况,调整考核内容和评分
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
。
4、 学生必须在完成实验预习内容的前提下进行实验。教师要在实验过程中抽查学生预习情况,
在学生离开实验室前,检查学生实验操作和记录情况,并在实验报告第二部分教师签字栏
签名,以确保实验记录的真实性。
5、 教师应及时评阅学生的实验报告并给出各实验项目成绩,完整保存实验报告。在完成所有
实验项目后,教师应按学生姓名将批改好的各实验项目实验报告装订成册,构成该实验课
程总报告,按班级交课程承担单位(实验中心或实验室)保管存档。 6、 实验课程成绩按其类型采取百分制或优、良、中、及格和不及格五级评定。 附表:实验考核参考内容及标准
观测点 考核目标 成绩组成
1( 预习报告 对实验目的和基本原理2( 提问 实验预习 的认识程度,对实验方20% 3( 对于
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
型实验,着重考查设计
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
的案的设计能力 科学性、可行性和创新性
1( 是否按时参加实验
2( 对实验过程的熟悉程度 着重考查学生的实验态
3( 对基本操作的规范程度 度、基本操作技能;严实验过程 30% 4( 对突发事件的应急处理能力 谨的治学态度、团结协
5( 实验原始记录的完整程度 作精神
6( 同学之间的团结协作精神
1( 所分析结果是否用原始记录数据 考查学生对实验数据处2( 计算结果是否正确 理和现象分析的能力;结果分析 3( 实验结果分析是否合理 50% 对专业知识的综合应用4( 对于综合实验,各项内容之间是否有分能力;事实求实的精神 析、比较与判断等
2
实验课程名称:FPGA原理及应用实验 实验项目名称 全局时序约束实验 实验成绩 实 验 者 高增礼 专业班级 通信1104 组 别 17 同 组 者 实验日期 2014年5月10日 第一部分:实验预习报告(包括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等)
1. 实验目的
1)学习使用约束编辑器(Constraints Editor)设置全局时序约束; 2)学习分析映像后的静态时序报告来检验时序约束的实现;
3)学习分析布局布线后静态时序报告来确认实际的设计效果。
2. 实验要求
通过设置全局时序约束来提高系统时钟频率,用映像后的静态时序报告和布线布局后的静态时序报告来分析设计的性能。
3. 实验背景知识
(1)约束编辑器简介
在Xilinx开发环境中,映射前输入的约束称为逻辑约束,逻辑约束保存在UCF文件中。创建和修改约束时可以直接编辑UCF文件,但要熟悉UCF文件的语法以及设计中各触发器、网线、PAD等组件的命名。使用约束编辑器(Constraints Editor)来创建和修改约束,可以降低这方面要求,提高效率。 FPGA设计中的约束文件有3类:用户设计文件(.UCF文件);网表约束文件(.NCF文件);物理约束文件(.PCF文件)。
这些文件可以完成时序约束、管脚约束以及区域约束,这三类约束文件的关系为:用户在设计输入阶段编写UCF文件, UCF文件经设计综合后生成NCF文件,最后再经过实现而生成PCF文件。下面的实验过程中要注意这三种文件的生成步骤。
(2) 本实验中的 PicoBlaze 系统原理
在这个实验中,与一些外设结合设计实现一个PicoBlaze系统,硬件设计原理框图如下:
3
LOOPBACK
PROGRAM ROM
INPUT OUTPUT LEDS SWITCHES PORTS PORTS
PICOBLAZE
UARUART UART
(RX) (TX) TT RS232_RX RS232_TX
图3-1 硬件设计原理框图
这个实验的主要任务是在 PicoBlaze 汇编编译系统中编程实现一个回路测试(loopback test),这个回路测试是首先发射一个信号到某设备,然后从该设备返回信号,以此来测试该设备是否正常工作。
4. 实验准备
(1) 将光盘下03. Examples of Program 实验程序目录下的01. ISE9.1 文件夹拷贝到E:盘根目录下;
(2)将 USB 下载电缆与计算机及 XUPV2Pro 板的 J8 连接好; (3)将 RS232 串口线一端与计算机连接好,另一端与板卡的 J11 相连接; (4)启动计算机后,将 XUPV2Pro 板的电源开关 SW11 打开到 ON 上。观察 XUPV2Pro 板上的,2.5V,,3.3V,,1.5V 的电源指示灯是否均亮,若有不亮的,请断开电源,检查电源。
4
第二部分:实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)
5. 实验步骤
(1) 编译范本中的汇编
1) 选择 Start ? Programs ? Xilinx ISE 9.1i ? Project Navigator,进入 ISE 的 Project Navigator 环境;
2) 选择 File ? Open Project,并指向如下目录,选择 time_const.ise 打开工程;
Verilog 使用者: E: \01. ISE9.1\xupv2pro\labs\ verilog\lab 3\time_const
VHDL 使用者: E: \01. ISE9.1\xupv2pro \labs\ vhdl\lab 3\time_const 3) 选择 Start ? Programs ? Accessories ? Command Prompt,打开命令提示符,
并使用cd 命令指向如下的汇编编译器的目录下, 如图所示。
E:
〉cd E:\01. ISE9.1\xupv2pro\labs\vhdl\lab3\Assembler
图3-2 操作示意
输入> kcpsm3 program.psm 命令,执行完后的结果如图所示。
图3-3 操作示意
4) 执行完命令后,会看到在 Assembler 下生成了一些文件,其中包括 VHDL
5
(program.vhd) 和 Verilog (program.v),这就是汇编编译系统将编写的汇编源文
件 program.psm 自动生成了用于程序内存的 VHDL/Verilog 格式文件,来用于
综合和仿真。将生成的 program.vhd/v 文件添加到工程中; 5) 单击工程 Sources 窗口中的顶层文件 loopback.vhd,然后双击 Processes 窗口中的 Synthesis- XST 目录下的“Check Syntax”,检验添加的文件是否有语法错误。 (2)输入全局时钟约束
1) 单击工程 Sources 窗口中的顶层文件 loopback.vhd,然后双击 Processes 窗口中的 User Constraints 目录下的 Create Timing Constraints;
图3-4 操作示意
2) 本工程若没有 UCF 文件,则弹出提示对话框,单击 Yes 按钮,将自动生成 UCF 文件为 loopback.ucf,并添加到工程中;
图3-5 操作示意
3) 当打开约束编辑器时,选中“Globle”全局约束窗口;
6
图3-6 操作示意
4) 双击 Period 列下的单元格,弹出 Clock Period 对话框,可以设置 Period 约束。如图输入 10ns,单击 OK 按钮;
图3-7 操作示意
5) 双击 Pad to Setup 列下的单元格,弹出对话框并输入 6ns,单击 OK 按钮,完
7
成输入延迟(OFFSET IN)约束设置;
图3-8 操作示意
6) 点击 Clock to Pad 列下的单元格,弹出对话框并输入 7.5ns,单击 OK 按钮,
完成输出延迟约束设置;
图3-9 操作示意
7) 选择 File ? Save 保存,然后选择 Exit 退出约束编辑器。
图3-10 操作示意
8
(3)输入引脚位置约束
大部分的 FPGA在设计完成前就进行了引脚分配。在这个实验中,通过 UCF文件手动输入来分配输入/输出引脚的位置,也可以采用实验二中使用 PACE 进行引脚位置分配。区域约束的主要目的是关联耦合逻辑,减少后续布线压力;其次是加大资源利用率,距离近的信号延迟不一定就小,信号线上延迟主要是来自线与线之间的转接(如LUT,switch-box)。由于FPGA内部连接的结构是横纵两向的,斜向的连接延迟会大于横纵方向上最大跨度连接。所以,在做位置约束时尽量避免斜向;而区域约束要宽松,如果没有资源上的顾虑,约束面积建议为所需的3倍以上。需要注意的是,区域约束对时序的改善贡献很小,紧的约束甚至有恶化时序的可能。
通过PACE软件,可将设计中的所有逻辑资源,包括全局时钟缓冲器、硬核乘加器、块RAM、硬核处理器、高速收发器以及数字时钟管理模块等模块放入器件架构(Device Architecture)的任何位置。
1) 单击工程 Sources 窗口中的顶层文件 loopback.vhd,然后双击 Processes 窗口中的 User Constraints 目录下的 Edit Timing Constraints(Text),打开 loopback.ucf文件;
2) 打开 XUP Virtex-II Pro 使用手册,关于设置 IO 引脚位置如下表所示。
表3-1 IO 引脚位置图
引脚位置约束语法如下:
信号:NET "alarm" LOC = "K12";
总线:NET "led<0>" LOC = P12;
NET "led<1>" LOC = P13;
按照表中的位置及语法格式进行引脚分配,在 loopback.ucf 文件的“#PACE: Start of PACE I/O Pin Assignments”注释下方输入以下引脚分配内容,输入完后保存loopback.ucf 文件。若找不到“#PACE: Start of PACE I/O Pin
9
Assignments”注释,直接添加需要添加的内容即可。
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)实现设计并进行时序分析
执行此步骤是通过映像实现设计来生成映像后时序报告,在时序分析器(Timing Analyzer)中打开此报告。通过此报告可以验证时序约束是否实现,以此避免浪费布局布线的时间。
1) 单击工程的 Sources 窗口中的顶层文件 loopback.vhd 文件,展开 Processes 窗口中的 Implement Design,然后再展开 Map 目录下的 Generate Post-Map Static Timing,右键单击 Analyze Post-Map Static Timing (Timing Analyzer)并选择 Rerun All;
2) 单击“Analyze Against Timing Constraints”按钮,映像如下表。
表3-2 映像表
引脚位置约束语法如下:
信号:NET "alarm" LOC = "K12";
总线:NET “led<0>” LOC = P12;
10
NET “led<1>” LOC = P13;
按照表中的位置及语法格式进行引脚分配,在 loopback.ucf 文件的“#PACE: Start of PACE I/O Pin Assignments”注释下方输入以下引脚分配内容,输入完后保存loopback.ucf 文件。
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" ;
3) 在时序报告窗口中可以看到时序约束报告,分析每个时序路径约束注意线网延迟后;
4) “e”代表评估。实际的线网延迟是在布局布线后计算出来的;
5) 退出时序分析器后,在 Processes 窗口,展开 Place & Route 目录下的 Generate Post-Place & Route Static Timing,双击 Analyze Post-Place & Route Static
11
Timing (Timing Analyzer),并完成下表,与上表进行比较;
表3-3 对照表
6) 分析每个时序路径约束,注意真实的线网延迟已经被计算出来。
(5)生成软件并进行 HDL 仿真
1) 打开本实验的 Assembler 文件包内的 program.psm 文件,此汇编范本的汇编代码含有三部分:
12
2) 在汇编范本 Task #1 部分中,添加如下汇编语句,编写完后,则要重新用汇编编译系统把编写的汇编源文件 program.psm 自动生成用于程序内存的 VHDL/Verilog格式文件。在汇编范本涉及到的端口值的常量,参考 PicoBlaze 的指南,而代码的编写参考 KCPSM3 的使用手册;
INPUT s1, switch_in ;read value of switches
OUTPUT s1, leds_out ;write value of s0 to LEDs
3) 在工程中选择 Project 下拉菜单中的 Add Sourc,选择 lab3 目录下的 testbench.vhd文件(testbench主要是为了对电路进行仿真验证,测试设计电路的功能,部分性能是否与与其的目标相符),此文件为测试激励文件,仿真结果波形如下。
13
图3-11 仿真结果
六(小结、建议及体会
FPGA设计一般使用同步时序电路。同步时序电路基于时钟触发沿设计,对时钟的周期、占空比、延时和抖动提出了很高的要求。为了满足同步时序设计的要求,一般在FPGA设计中采用全局时钟资源驱动设计的主时钟,以达到最低的时钟抖动和延迟。 FPGA全局时钟资源一般使用全铜层工艺实现,并设计了专用时钟缓冲与驱动结构,从而使全局时钟到达芯片内部的所有可配置单元(CLB)、I/O单元(IOB)和选择性块RAM(Block Select RAM)的时延和抖动都为最小。为了适应复杂设计的需要,Xilinx的FPGA中集成的专用时钟资源与数字延迟锁相环(DLL)的数目不断增加。
教师签字__________
14
实验课程名称:FPGA原理及应用实验 实验项目名称 综合技术实验 实验成绩 实 验 者 高增礼 专业班级 通信1104 组 别 17 同 组 者 实验日期 14年5月15 第一部分:实验预习报告(包括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等)
1. 实验目的
(1)学习使用保留层次和扇出综合这些选择来提高调试和综合结果;
(2)学习读取 XST 软件的综合报告来确认综合结果质量。 2. 实验内容
(1)修改 XST 综合选项;
(2)分析综合报告。
3. 实验背景知识
Synplify/Synpliy Pro 是 Synplicity 公司出品的综合工具,以综合速度快、优化效果好备受关注。本实验介绍的是 XST 的使用,XST(Xilinx Synthesis Technology)是 Xilinx ISE内嵌的综合工具,虽然XST 与Synplify/Synpliy Pro 等业界流行的这工具相比特点并不突出,功能也不全面,但是 Xilinx 对自己的 FPGA/CPLD 内部结构最为了解,所以 XST 对 Xilinx器件的支持也最为直接,更重要的是 XST 内嵌在 ISE 中,安装 ISE 后可以直接使用。
4. 实验准备
(1)将光盘下03. Examples of Program 实验程序目录下的01. ISE9.1 文件夹拷
贝到E:盘根目录下;
(2)将 USB 下载电缆与计算机及 XUPV2Pro 板的 J8 连接好;
(3)将 RS232 串口线一端与计算机连接好,另一端与板卡的 J11 相连接;
(4)启动计算机后,将 XUPV2Pro 板的电源开关 SW11 打开到 ON 上。观
察 XUPV2Pro 板上的,2.5V,,3.3V,,1.5V 的电源指示灯是否均亮,若有
不亮的,请断开电源,检查电源;
(5)打开超级终端。
15
第二部分:实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)
5. 实验步骤
(1)浏览设计并生成软件
1) 选择 Start ? Programs ? Xilinx ISE 9.1i ? Project Navigator,进入 ISE 的 Project Navigator 环境;
2) 选择 File ? Open Project,并指向如下目录,选择 synth_lab.ise 打开工程;
Verilog 使用者: E: \01. ISE9.1\xupv2pro \labs\ verilog\lab4\synth_lab
VHDL 使用者: E: \01. ISE9.1\xupv2pro \labs\ vhdl\lab 4\ synth_lab 3) 用文件编辑器打开在 lab4 目录下的 Assembler 文件包中的 program.psm,在此汇编范本的 task #2 部分添加如下代码:
cold_start: LOAD s0, all_clear ; zero out reg s0
; LAB TASK #2
; Write code to output a short (10 characters
; or less) message to the serial port.
LOAD s0, ascii_X ;
OUTPUT s0, uart_data_tx ;
LOAD s0, ascii_i ;
OUTPUT s0, uart_data_tx ;
LOAD s0, ascii_l ;
OUTPUT s0, uart_data_tx ;
LOAD s0, ascii_i ;
OUTPUT s0, uart_data_tx ;
LOAD s0, ascii_n ;
OUTPUT s0, uart_data_tx ;
LOAD s0, ascii_x ;
OUTPUT s0, uart_data_tx ;
LOAD s0, ascii_SPACE ;
OUTPUT s0, uart_data_tx ;
16
LOAD s0, ascii_R ;
OUTPUT s0, uart_data_tx ;
LOAD s0, ascii_u ;
OUTPUT s0, uart_data_tx ;
LOAD s0, ascii_l ;
OUTPUT s0, uart_data_tx ;
LOAD s0, ascii_e ;
OUTPUT s0, uart_data_tx ;
LOAD s0, ascii_s ;
OUTPUT s0, uart_data_tx ;
LOAD s0, ascii_EXCLAIM ;
OUTPUT s0, uart_data_tx ;
LOAD s0, ascii_CR ;
OUTPUT s0, uart_data_tx ;
4)在开始菜单中的所有程序的附件,点击命令提示符,使用 cd 命令指向汇编编译器的目录下,输入> kcpsm3 program.psm ,命令如图 5-49。
cd E:\01. ISE9.1\labs\ verilog\lab4\Assembler
图4-1 操作示意
5) 汇编编译系统把编写的汇编源文件 program.psm 自动生成的用于程序内存的VHDL/Verilog 格式文件 program.vhd/v 添加到工程中。
(2) 默认选项进行综合和实现
1)在工程的 Sources 窗口单击顶层文件 loopback.vhd/v 文件,双击 Processes 窗口中的 Synthesize – XST 进行综合;
2)综合完成后,双击 View Synthesis Report,在此报告中会看到“Timing Summary”,时钟频率评估值为 395.749MHz,(注意这些结果会因为每个 PC 系统的不同而不
17
一样);
图4-2 操作示意
2)在此报告中找到“Device utilization summary”,信息如下:
(3) 改变选项进行综合和实现
1)右击 Synthesize 选择 Properties,弹出 Process Properties 对话框,将“Keep Hierarchy”值选为“Yes”,然后点击 OK 按钮,重新双击 Processes 窗口中的Synthesize – XST 进行综合;
18
图4-3 操作示意
2)综合完成后,双击 View Synthesis Report,在此报告中会看到“Timing Summary”,时钟频率评估值为 375.023MHz,可以比较默认选项时候的结果;
图4-4 操作示意
3)在此报告中找到“Device utilization summary”,信息如下,可以比较默认选项时候的结果;
19
4) 在此报告中也可看到线网最多的扇出( Fan out:“一逻辑门的输出需要驱动多个等效门的输入,称输出端接的需要驱动的等效门数为扇出F”)为 71,如图5-53。扇出会引起布线问题,因此综合会通过复用门或者嵌入缓存来限制扇出数。这个限制不是技术上的限制,而是作为 XST 的指导,当这个限制很小时可以忽略(小于 30时);
图4-5 操作示意
5)右击 Synthesize 选择 Properties,弹出 Process Properties 对话框,单击 Category窗口的 Xilinx Specific Options,将“Max Fanout”值改为 50,单击 OK 按钮。重新双击 Processes 窗口中的 Synthesize – XST 进行综合;
20
图4-6 操作示意
6)综合完成后,双击 View Synthesis Report,则在此报告中也可看到线网最多
的扇出为 40;
图4-7 操作示意
7)在此报告中找到“Timing Summary”,时钟频率评估值为 378.146MHz;
21
图4-8 操作示意
(4)下载并测试系统
1)在工程的 Sources 窗口单击顶层文件 loopback.vhd/v 文件,展开 Processes 窗口中的 Generate Programming File,双击 Configure Device (iMPACT); 2)弹出 Welcome iMPACT 对话框后, 选 择 “ Configure devices using
Boundary-Scan(JTAG)”,单击 Finish 按钮,按照 ISE9.1 程序下载过程,将loopback.bit 文件下载到 FPGA 中后,超级终端显示如图所示。
图4-9 超级终端显示
22
六(小结、建议及体会
本实验介绍的是 XST 的使用,XST(Xilinx Synthesis Technology)是 Xilinx ISE内嵌的综合工具,虽然XST 与Synplify/Synpliy Pro 等业界流行的这工具相比特点并不突出,功能也不全面,但是 Xilinx 对自己的 FPGA/CPLD 内部结构最为了解,所以 XST 对 Xilinx器件的支持也最为直接,更重要的是 XST 内嵌在 ISE 中,安装 ISE 后可以直接使用。
教师签字__________
23
24
实验课程名称:FPGA原理及应用实验 实验项目名称 IP 核生成工具使用实验 实验成绩 实 验 者 高增礼 专业班级 通信1104 组 别 17 同 组 者 实验日期 14年5月20日 第一部分:实验预习报告(包括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等)
1(实验目的
(1)学会使用 IP 核生成工具(CORE Generator);
(2)例化组件到工程中。
2. 实验背景知识
IP 核生成器(CORE Generator)是 Xilinx FPGA 设计中的一个重要设计输入工具,它将原有验证过的设计模块重新利用,也就是一般的IP复用工具。它提供了大量成熟、高效的 IP 核为用户使用,这些IP核直接用 Xilinx FPGA 底层硬件原语描述。该工具可以生成用户所需的IP核,在实际工程中例化。
Core Generator 可生成的 IP 核大致分为:基本模块、通信与网络模块、数字信号处理模块、数学功能模块、内存模块、微处理器、控制器与外设模块、标准与协议数据单元到复杂功能样机的众多设计,这些 IP 核是根据 Xilinx 的 FPGA 器件特点和结构而设计的,直接用 Xilinx FPGA 底层硬件原语描述,充分发挥了 FPGA 的功能。(本实验是在VHDL环境下实现的)
3. 实验内容
(1)IP 核生成工具(CORE Generator)生成双口 BlockRAM;
(2)将生成的内存例化到工程中;
(3)进行行为仿真并在板卡上验证设计;
4.实验准备
(1)将光盘下03. Examples of Program 实验程序目录下的01. ISE9.1 文件夹拷
贝到E:盘根目录下;
25
(2)将 USB 下载电缆与计算机及 XUPV2Pro 板的 J8 连接好; (3)将 RS232 串口线一端与计算机连接好,另一端与板卡的 J11 相连接; (4)启动计算机后,将 XUPV2Pro 板的电源开关 SW11 打开到 ON 上。观
察 XUPV2Pro 板上的,2.5V,,3.3V,,1.5V 的电源指示灯是否均亮,
若有不亮的,请断开电源,检查电源;
(5)打开超级终端。
26
第二部分:实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过
程发现的问题等)
5(实验步骤
(1) 生成 ROM 初始化文件
1)选择 Start ? Programs ? Xilinx ISE 9.1i ? Project Navigator,进入 ISE 的
Project Navigator 环境;。
2)选择 File ? Open Project,并指向如下目录,选择 coregen_lab.ise 打开工程;
Verilog 使用者: E:\labs\ verilog\lab5\ coregen_lab
VHDL 使用者: E:\labs\ vhdl\lab 5\ coregen_lab
3)用文件编辑器打开lab5 目录下的Assembler 文件包中的program.psm 汇编范本
文件。在 task #3 部分写段代码,来完成响应来自按键的信号:
LOAD s1,ascii_CR;
OUTPUT s1,uart_data_tx;
LOAD s1,ascii_LF;
OUTPUT s1,uart_data_tx;
;lab task #2
;write code to output a short(10 characters
; or less ) message to the serial port.
loop: INPUT s1,switch_in ;
OUTPUT s1,leds_out ;
rs232_echo: INPUT s1,data_present;
XOR s1,s0;
JUMP Z,loop;
INPUT s1,uart_data_rx;
OUTPUT s1,uart_data_tx;
JUMP loop;
27
并使用 cd 命令指向如下的汇编编译器的目录下,输入> kcpsm3 program.psm 命令,如图所示。完成后汇编编译器生成了一些文件,包括“.COE”的文件,是用来
初始化 Core Generator 产生的内存;
〉cd E:\01. ISE9.1\xupv2pro\labs\vhdl\lab5\Assembler
图5-1 操作示意
(2) 生成 BLOCK RAM IP 核
1) 单击工程 Sources 窗口中的顶层文件 loopback.vhd,然后双击 Processes 窗口
中的 Create New Source,弹出的新资源对话框,选择 IP (CoreGen & Architecture Wizard),在 File Name 栏输入文件名称 program;
图5-2 操作示意
2)单击 Next 按钮后,在选择 Core Type 对话框中,展开 Memories &
Storage Elements, 展开 RAMs & ROMs, 选择 Block Memory Generator
v2.1,单击 Next按钮;
28
图5-3 操作示意
3) 弹出核信息窗口,单击 Finish 按钮后,弹出 CORE Generator? system GUI 对
话框,并按照以下要求配置双口存储块核,并单击 Next 按钮;
Component Name: program Memory Type: Dual Port ROM
图5-4 操作示意
4)选择以下参数,然后单击 Next 按钮;
Read Width: 18
Read Depth: 1024
Enable: Always Enabled
29
图5-5 操作示意
5)选择以下参数,然后点击 Next 按钮;
Read Width: 18
Read Depth: 1024
Enable: Always Enabled
图5-6 操作示意
6)选择 Load Init File ,单击 Browse 按钮打开 lab5 目录下的 Assembler 文
件包中program.coe 文件, 单击 next 按钮,然后单击 finish 按钮;
30
图5-7 操作示意
7) 在 ISE 工程窗口生成以下信息;
图5-8 信息显示
(3) Block RAM 核的例化
1) 双击工程Sources 窗口的loopback.vhd 文件,并选择Edit 下拉菜单中的
Language Templates;
31
图5-9 操作示意
2) 在弹出的 Language Templates 窗口展开 COREGEN,然后展开 VHDL
Component Instantiation 并选择 program,右端则出现相应的模板;
图5-10 操作示意
3) 在此模板上拷贝组件声明(从 component program 到 end component;)并粘贴到
loopback.vhd 代码中的“--Insert component declaration for the Memory
32
block here”注释的下方;
4) 拷贝组件例化(从 your_instance_name : program 到最末)并粘贴到 loopback.vhd
代码中的“-- insert component instantiation for the Memory here”注释的下方,然后按照如下内容,修改添加的例化来完成此组件在本工程的例化;
my_program : program
port map (
clka => clk50MHz,
addra => address,
douta => instruction,
clkb => '0',
addrb => "0000000000",
doutb => open
);
5) 完成后选择 File 下拉菜单中的 Save 保存,从工程的 Sources 窗口会看到program.xco 作为一个模块加入到顶层设计文件中;
图5-11 操作示意
33
(4) 进行行为仿真并下载测试
1)在工程的 Sources 窗口,Sources for 选择 Synthesis/Implementation,选择工程的program.xco,然后在 Processes 窗口展开 COREGEN, 并双击 View Verilog/VHDL Functional Model。这个文件所涉及的模块在进行行为仿真的时候是自动从 ISE 的Project Navigator 软件的 XilinxCoreLib 的仿真库中调用的; 2)在工程的 Sources 窗口,Sources for 选择 Behavioral Simulation,并双击打开testbench.vhd/v 测试激励文件。展开 Processes 窗口中的 Xilinx ISE Simulator,右键单击Simulate Behavioral Model,并选择Properties,弹出的对话框将“Property display level ”选项选择“Advanced”,“Proterty Name” 选项中 Simulation Run Time 输入 50000 ns,如下图所示。单击 OK 按钮;
图5-12 操作示意
3)双击 Simulate Behavioral Model,观察生成的波形是否正确,是否与所写测试激励所要的结果相符合;
4)在工程的 Sources 窗口,单击工程顶层文件 loopback.vhd/v 文件,展开 Processes窗口中的 Generate Programming file,然后双击 Configure Device (iMPACT)。弹出 iMPACT 对话框后,选择 Configure Devices using Boundary-Scan (JTAG),然后单击 Finish 按钮。
34
图5-13 操作示意
5)当等到弹出 Assign New Configuration File 对话框后,前两个器件都选择 bypass按钮,最后一个器件单击 loopback.bit 文件选择 Open 按钮,然后再点击 OK 按钮后弹出一个警告信息,单击 OK 按钮后如图:
图5-14 操作示意
6)在iMPACT 窗口右键点击xc2vp30,选择Program 后弹出Programming Properties
窗口单击 OK 按钮。如果下载成功则出现 Program Succeeded;
35
图5-15 操作示意 7)在超级终端窗口则会看到
图5-16 显示示意
36
六(小结、建议及体会
介绍的是 IP 核生成器(CORE Generator)是 Xilinx FPGA 设计中的一个重要设计输入工具,它将原有验证过的设计模块重新利用,也就是一般的IP复用工具。它提供了大量成熟、高效的 IP 核为用户使用,这些IP核直接用 Xilinx FPGA 底层硬件原语描述。该工具可以生成用户所需的IP核,在实际工程中例化
教师签字__________
37
38
实验课程名称:FPGA原理及应用实验 实验项目名称 8位计数器实验 实验成绩 实 验 者 高增礼 专业班级 通信1104 组 别 17 同 组 者 实验日期 14年5月28日 第一部分:实验预习报告(包括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等)
1(实验目的
(1) 熟悉 ISE9.1 开发环境,掌握工程的生成方法;
(2) 熟悉 SEED-XDTK XUPV2Pro 实验环境;
(3) 了解 Verilog HDL语言在 FPGA 中的使用;
(4) 通过掌握8位计数器的Verilog HDL设计,了解数字电路的设计。
2. 实验原理
所涉及的8位计数器有一个时钟输入端,1个同步清0端。输出为8位并行输出,每来一个脉冲,所输出的八位二进制数加一,当由00000000计数到高增礼高增礼时,计数器返回到00000000重新开始计数。
其代码如下:
module count8(out,reset,clk);
output[7:0] out;
input reset,clk;
reg[7:0] out;
always @(posedge clk)
begin
if (reset) out<=0; //同步复位
else out<=out+1; //计数
end
endmodule
本实验采用 Chipscope-Pro 生成 ILA/ICON 核,并插入到 8位计数器设计中,在线进行观测和调试。
3. 实验内容
(1) 用Verilog HDL语言设计8位计数器,进行功能仿真验证; (2) 使用chipscope-Pro 生成 ILA/ICON 核,在线观测调试。
39
4. 实验准备
(1) 将 USB 下载电缆与计算机及 XUPV2Pro 板的 J8 连接好; (2) 将 RS232 串口线一端与计算机连接好,另一端与板卡的 J11 相连接; (3) 启动计算机后,将 XUPV2Pro 板的电源开关 SW11 打开到 ON 上。观察 XUPV2Pro 板上的,2.5V,,3.3V,,1.5V 的电源指示灯是否均亮,若有不亮的,请断开电源,检查电源;
40
第二部分:实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过
程发现的问题等)
5(1) 创建工程 及设计输入
1) 在E:\project\目录下,新建名为count8的新工程; 器件族类型(Device Family)选择“Virtex2P” 器件型号(Device)选“XC2VP30 ff896 -7”
综合工具(Synthesis Tool)选“XST (VHDL/Verilog)” 仿真器(Simulator)选“ISE Simulator”
2)设计输入 ,输入上面所提到的代码,保存后如下图所示。
图8-32设计输入
(2) 功能仿真
1)在sources窗口sources for中选择Behavioral Simulation; 2)由Test Bench WaveForm 添加激励源,由于本工程中源代码比较简单,只需要
对reset信号进行适当的设置就可以了;
41
图8-33仿真波形
从图中可以验证由Verilog HDL语言设计的8位计数器的工作是正确的,在reset=0时,数据输出在每一时钟上升沿到来时加1,而在reset=1时,数据的输出为0.
(3) 添加引脚约束
1)首先对生成的工程进行综合;
2)添加引脚约束。双击User Constraints 下的Assign Package Pins,由于采用chipscope进行调试,因此引脚约束只需要添加时钟引脚的约束就可以了,如图所示:
图8-34 引脚约束
(4) 添加chipscope核
由于要对模块进行实时的控制,因此在这里需要2个ICON核,1个ILA核,
42
1个VIO核。采用核生成法,生成核的声明分别如下: //------------------------------------------------------------------- // ICON core module declaration
//------------------------------------------------------------------- module icon
(
control0,
control1
);
output [35:0] control0;
output [35:0] control1;
endmodule
/------------------------------------------------------------------- // ILA core module declaration
//---------------------------------------------------------------- module ila
(
control,
clk,
trig0,
trig1
);
input [35:0] control;
input clk;
input [7:0] trig0;
input [0:0] trig1;
endmodule
//------------------------------------------------------------------- // VIO core module declaration
//------------------------------------------------------------------- module vio
(
control,
async_in,
async_out
);
input [35:0] control;
input [7:0] async_in;
output [0:0] async_out;
endmodule
将模块声明加到源代码中endmodule后面,然后分别将icon_xst_example,
43
ila_xst_example,vio_xst_example示例中例化模块所用到的代码加到count8相应的
位置,并进行修改,最后得到的代码如下:
module count8(out,clk);
output[7:0] out;
input clk;
reg[7:0] out;
wire reset;
// ICON core wire declarations
wire [35:0] control_ila;
wire [35:0] control_vio;
// ILA Core wire declarations
wire clk;
wire [7:0] trig0;
wire [0:0] trig1;
assign trig0 = out;
assign trig1 = reset;
// VIO Core wire declarations
wire [7:0] async_in;
wire [0:0] async_out;
assign reset = async_out; assign async_in = out;
//count8
always @(posedge clk)
begin
if (reset) out<=0; //同步复位 else out<=out+1; //计数
end
// ICON core instance
icon count8_icon
(
.control0(control_ila),
.control1(control_vio)
44
);
// ILA core instance
ila count8_ila
(
.control(control_ila),
.clk(clk),
.trig0(trig0),
.trig1(trig1)
);
// VIO core instance
vio count8_vio
(
.control(control_vio),
.async_in(async_in),
.async_out(async_out)
);
endmodule
(5) 在线调试
1)设计实现。在工程的资源操作窗(Processes),双击 Implement Design;
2)在实现步骤成功后,点击Generate Programming Files ,生成bit流文件;
3)双击Analyze Design Using Chipscope,出现chipscope Pro Analyzer 窗口。双击
图标,出现以下对话框,点击OK。
图8-35 操作示意 然后下载bit流文件,右击DEC:2 myDevice2,选择Configure...
45
图8-36操作示意
选择count8.bit文件,点击OK。
(6) 观测调试
双击VIO console,可以看到异步输入信号在不停的变化着,如图所示:
图8-37 调试结果
将异步输出信号即reset信号设为1,则异步输入都变为0;
图8-38 调试结果
将异步输入信号设为总线形式,并重命名,可以更加直观的观测信号,如图所示:
46
图8-39 调试结果
双击按钮,出现ILA核捕获的数据波形,如下图所示。
图8-40 数据波形
对相应信号设为总线形式并重命名,可以更好的观测信号,如下图所示。
图8-41数据波形
47
六(小结、建议及体会
熟悉 ISE9.1 开发环境,掌握工程的生成方法;熟悉 SEED-XDTK XUPV2Pro 实验环境;了解 Verilog HDL语言在 FPGA 中的使用;通过掌握8位计数器的Verilog HDL设计,了解数字电路的设计
教师签字__________
48
实验课程名称:FPGA原理及应用实验 实验项目名称 七人投票表决器实验 实验成绩 实 验 者 高增礼 专业班级 通信1104 组 别 17 同 组 者 实验日期 14年6月4日 第一部分:实验预习报告(包括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等)
1(实验目的
(1) 熟悉 ISE9.1 开发环境,掌握工程的生成方法;
(2) 熟悉 SEED-XDTK XUPV2Pro 实验环境;
(3) 了解 Verilog HDL语言在 FPGA 中的使用;
(4) 通过掌握七人投票表决器的Verilog HDL设计,了解数字电路的设计。 2. 实验原理
此实验是用七个开关作为表决器的7个输入变量,输入变量为逻辑“1”时表示表决者“赞同”;输入变量为逻辑“0”时,表示表决者“不赞同”。输出逻辑“1”时,表示表决“通过”;输出逻辑“0”时,表示表决“不通过”。当表决器的七个输入变量中有4个以上(含4个)为“1”时,则表决器输出为“1”;否则为“0”。
七人表决器设计方案很多,比如用多个全加器采用组合电路实现。用verilog语言设计七人表决器时,也有多种选择。我们可以用结构描述的方式用多个全加器来实现电路,也可以用行为描述。采用行为描述时,可用一个变量来表示选举通过的总人数。当选举人大于或等于4时为通过,绿灯亮;反之不通过时,黄灯亮。描述时,只须检查每一个输入的状态(通过为“1”,不通过为“0”),并将这些状态值相加,判断状态值的和即可选择输出。
3. 实验内容
(1) 用Verilog HDL语言设计七人投票表决器,进行功能仿真验证; (2) 使用chipscope-Pro 生成 VIO/ICON 核,在线观测调试。 4(实验准备
(1) 将 USB 下载电缆与计算机及 XUPV2Pro 板的 J8 连接好; (2) 将 RS232 串口线一端与计算机连接好,另一端与板卡的 J11 相连接;
49
(3) 启动计算机后,将 XUPV2Pro 板的电源开关 SW11 打开到 ON 上。观察 XUPV2Pro 板上的,2.5V,,3.3V,,1.5V 的电源指示灯是否均亮,若有不亮的,请断开电源,检查电源;
50
第二部分:实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过
程发现的问题等)
5. 实验步骤
(1) 创建工程 及设计输入
1) 在E:\project\目录下,新建名为voter7的新工程;
器件族类型(Device Family)选择“Virtex2P”
器件型号(Device)选“XC2VP30 ff896 -7”
综合工具(Synthesis Tool)选“XST (VHDL/Verilog)”
仿真器(Simulator)选“ISE Simulator” 2)设计输入:在ISE中文本编辑中输入如下的代码 module voter7(pass,vote);
output pass;
input[6:0] vote;
reg[2:0] sum;
integer i;
reg pass;
always @(vote)
begin
sum=0;
for(i=0;i<=6;i=i+1) //for语句
if(vote[i]) sum=sum+1;
if(sum[2]) pass=1; //若超过4人赞成,则pass=1 else pass=0;
end
endmodule
(2)功能仿真
1)在sources窗口sources for中选择Behavioral Simulation; 2)由Test Bench WaveForm 添加激励源。仿真结果如图所示。
51
图8-82 仿真波形
从图中可以验证由Verilog HDL语言设计的七人投票表决器的工作是正确的,只要超过4个人投票表决,则输出pass为1。
(3)生成核并添加核
本实验内容为七人投票表决器,不需要使用ILA核。因此下面使用核生成法生成一个ICON核,一个VIO核就可以了。
1)首先对生成的工程进行综合;
2)生成核:
点击开始—>程序—>chipscope pro 9.1i—>xilinx chipscope pro core generator 弹出如下对话框:
图8-83操作示意
52
点击Next,在下面的对话框中选择生成文件的保存路径,将文件保存到生成的工程目录下,器件系列选择Virtex2P,然后点击Next;
图8-84操作示意
在下一个对话框中选择HDL language 为Verilog点击Generator core
图8-85操作示意
然后生成一个VIO核;
53
图8-86操作示意
选择Enable Asynchronous Input Port 和Enable Asynchronous Output Port ,宽度都设为8. 之后分别点击Next,Generator core 和Start over 就可以生成VIO核了。生成核之后要将代码分别添加到原来的程序中去;
3) 添加核:
在ISE窗口中,点击File,>open,分别打开icon_xst_example和vio_xst_example。
将icon和vio核声明分别添加到源代码endmodule之后,再对源代码做相应的修改。修改完成后的代码如下:
module voter7(pass);
output pass;
wire[6:0] vote;
reg[2:0] sum;
integer i;
reg pass;
//-----------------------------------------------------------------
// ICON core wire declarations
//-----------------------------------------------------------------
wire [35:0] control0;
//-----------------------------------------------------------------
// VIO Core wire declarations
//-----------------------------------------------------------------
wire [7:0] async_in;
wire [7:0] async_out;
assign vote[6:0]=async_out[6:0];
54
assign async_in[0]=pass;
always @(vote)
begin
sum=0;
for(i=0;i<=6;i=i+1) //for语句
if(vote[i]) sum=sum+1;
if(sum[2]) pass=1; //若超过4人赞成,则pass=1 else pass=0;
end
//-----------------------------------------------------------------
// ICON core instance
//-----------------------------------------------------------------
icon i_icon
(
.control0(control0)
);
//-----------------------------------------------------------------
// VIO core instance
//-----------------------------------------------------------------
vio i_vio
(
.control(control0),
.async_in(async_in),
.async_out(async_out)
);
endmodule
//------------------------------------------------------------------- // ICON core module declaration
//------------------------------------------------------------------- module icon
(
control0
);
output [35:0] control0;
endmodule
//------------------------------------------------------------------- // VIO core module declaration
//------------------------------------------------------------------- module vio
(
control,
async_in,
async_out
55
);
input [35:0] control;
input [7:0] async_in;
output [7:0] async_out;
endmodule
(4) 在线调试
1) 设计实现。在工程的资源操作窗(Processes),双击 Implement Design; 2) 在实现步骤成功后,点击Generate Programming Files ,生成bit流文件; 3) 双击Analyze Design Using Chipscope,出现chipscope Pro Analyzer 窗口。双击图标,出现以下对话框,点击OK。
图8-87操作示意
然后下载bit流文件,右击DEC:2 myDevice2,选择Configure...,配置文件voter7.bit后点OK。
(5) 观测调试
双击VIO console,可以看到异步输入信号和异步输出信号,如图所示:
图8-88调试结果
将异步输出信号按照在代码中设定的改为总线形式并重命名,以便更加直观的观测信号。也可以右键单击各个信号选择Bus Radix 后的Binary...将各个信号以十
56
进制的形式显示。
图8-89调试结果
图8-90 调试结果
当然,可以通过修改voter7为不同的二进制数值然后与正确的结果比较进行验证。
六(小结、建议及体会
通过掌握七人投票表决器的Verilog HDL设计,了解数字电路的设计。 熟悉了ISE9.1 开发环境,掌握工程的生成方法;
熟悉了SEED-XDTK XUPV2Pro 实验环境;
了解了Verilog HDL语言在 FPGA 中的使用;
教师签字__________
57