文档库 最新最全的文档下载
当前位置:文档库 › FPGA实验报告

FPGA实验报告

FPGA实验报告
FPGA实验报告

FPGA系统设计实验报告

学院:计算机与通信工程学院

班级:电信10

学号:41050204

姓名:陈小慧

指导教师:

2013年3月27日

FPGA系统设计实验报告

陈小慧

计算机与通信工程学院,电信10,学号:41050204

【摘要】本文第一部分主要介绍了FPGA;第二部分为实验的内容和结果;第三部分为根据实验二设计的拓展实验;最后部分为实验报告总结。

【关键字】FPGA ;SOPC;20nm

1 引言

FPGA 自1984年Xilinx公司发明以来,逐渐一起全球集成电路格局的变化。从一开始仅仅实现粘合逻辑到后来的数字信号处理以及目前的系统级解决方案,FPGA 不断蚕食着微处理器、DSP以及ASIC的市场,成为目前发展最为迅猛的热门技术之一。本文便在高校学习的基础上,简单介绍了一些FPGA的概念和应用,并在完成实验的基础上写了实验的过程和总结。

2 FPGA简介

2.1 FPGA的概述

单片机可以理解为集成在单一芯片上的微型计算机系统,麻雀虽小可是五脏俱全,也有运算器、控制器、存储器、总线及输入输出设备,采用也是存储程序执行的方式,对单片机的编程就是对其中的ROM写入程序,在加电后ROM中的程序会像计算机内存中的程序一样得到逐条的执行。当今的单片机还集成了A/D、D/A转换,并串口等多种与外界进行数据交换的手段。单片机计算速度和性能有限,但在一些基本控制上搓绰绰有余。FPGA则是操控层次更低,所以自由度更大的芯片,对FPGA的编程在编译后是转化为FPGA内的连线表,相当于FPGA内提供了大量的与非门、或非门、触发器(可以用与非门形成吧)等基本数字器件,编程决定了有多少器件被使用以及它们之间的连接。只要FPGA规模够大,这些数字器件理论上能形成一切数字系统,包括单片机甚至CPU。FPGA在抗干扰,速度上有很大优势。

2.2 FPGA的发展前沿

2.2.1 FPGA向SOPC方向发展

System-on-a-Programmable-Chip,即可编程片上系统。用可编程逻辑技术把整个系统放到一块硅片上,称作SOPC。可编程片上系统(SOPC)是一种特殊的嵌入式系统:首先它是片上系统(SOC),即由单个芯片完成整个系统的主要逻辑功能;其次,它是可编程系统,具有灵活的设计方式,可裁减、可扩充、可升级,并具备软硬件在系统可编程的功能。

SOPC是SOC与FPGA相结合的产物。SOC(System-On-a-Chip)的定义,是指在一个芯片上包含了计算机引擎、存储器和逻辑电路的集成电路,其在本质上具备作为一个系统的基本要素。Soc

采用单一芯片的形式实现了系统的功能,把系统从原来的整机、电路板缩小到芯片,不仅有利于实现系统的小型化、一体化,减少板级和整机对电路的干扰,同时还有助于降低产品成本。SOPC 可以在一块现成的可编程芯片上提供系统集成。可编程系统级芯片还具有掩膜ASIC的高集成度及FPGA的低风险、灵活和快速上市的特性[1]。

相关成品为2012年10月中旬,Microsemi公司宣布推出其新一代SmartFusion2 SoC FPGA 系列产品。该系列产品是市场上最安全的FPGA;还具备高可靠性、低功耗等优势;应用极其广泛。

2.2.2 20纳米FPGA时代

台积电28nm良率大幅提升的利好还没被市场彻底消化,FPGA业界双雄已争先恐后地发布20nm FPGA战略,在性能、功耗、集成度等方面均大幅跃升,蚕食ASIC之势将愈演愈烈。在45nm 工艺节点,大量ASIC厂商率先量产;而到了28nm工艺时代,率先量产的7家公司中已有两家是FPGA厂商;在20nm时代,FPGA或将拔得头筹。

在28nm工艺节点上,赛灵思率先推出了统All Programmable的7系列FPGA、嵌入ARM cortex-A9的FPGA SoC以及采用3D封装技术的Virtex-7 2000T,赛灵思20nm产品依然是三个产品系列并行发展,分别“进化”成8系列FPGA、第二代FPGA SoC和第二代3D封装FPGA。赛灵思20nm 8系列All Programmable FPGA将有更快的DSP、BRAM(Block RAM)、DDR4及收发器,有最高的带宽(100个33Gb/s收发器),可以实现更高的带宽总线和更快的设计收敛。

FPGA另一重要供应商Altera在20nm工艺也导入了三项新技术。Altera高级副总裁、首席技术官Misha Burich介绍,Altera的20nm工艺FPGA一是可将芯片间的数据传输速度提高至40Gbps,而现行的28nm工艺FPGA为28Gbps。为了实现高速化,20nm工艺FPGA提高了收发器电路使用的晶体管性能,同时导入了根据在芯片间交换信号的波形来修正信号、改善信号干扰及衰减程度的电路技术。二是配备浮点运算性能达到5TFLOPS(每秒5万亿次浮点运算)以下的可变精度DSP模块。为了提高性能,将原来用软件实现的DSP部分运算处理改为了硬件操作。三是异构3D IC的应用。Altera的异构20nm FPGA的开发通过全功能高级设计环境得以实现,这一设计环境包括系统集成工具(Qsys)、基于C语言的设计工具(OpenCL)以及DSP开发软件(DSP Builder)。Misha Burich表示,下一代高性能设计DSP开发人员不再需要花费数天甚至几个星期的时间来评估FPGA DSP解决方案的性能。通过集成OpenCL和DSP创新技术,采用业界标准设计工具和软件库,Altera产品能够实现5 TFLOPS的单精度DSP能力,这将重新树立业界TFLOPS/W硅片效率的标准。

参考文献

[1]刘皖、何道君、谭明,FPGA设计与应用,清华大学出版社,2006年6月第1版,P201

3 FPGA实验

实验一 LED实验

1.1实验目的

●学习Xilinx公司ISE8.2i软件设计流程;

●熟悉SEED-XDTK XUPV2PRO实验环境;

●了解Verilog语言在FPGA中的使用;

●FPGA管脚与外设的配置;

●了解时钟分频的Verilog实现。

1.2实验内容

●定时时钟设计;

●LED点亮。

1.3实验步骤

1.3.1创建工程

1. 双击桌面Xilinx ISE8.2 快捷方式或者选择【开始】/【所有程序】/【Xilinx ISE 8.2i】/【Project Navigator】打开 ISE 工程管理器(Project Navigator)。

2. 打开Project Navigator后,选择File → New Project,弹出新建工程对话框建立文件名和路径。器件族类型(Device Family)选择“Virtex2P”,器件型号(Device)选“XC2VP30ff896-7”,综合工具(Synthesis Tool)选“XST(VHDL/Verilog)”,仿真器(Simulator)选“ISE Simulator”

1.3.2新建Verilog源代码

新工程创建完在【Sources】面板右击,选【New Source】命令打开新建代码智能向导,输入源代码;

选【Add Source】命令调用以给源代码程序。如果以有源代码,则选择.v.文件,自动添加到窗口中。

选择【Verilog Module】新建一个Verilog源代码,然后在【File name】栏中输入文件名称led(区别大小写)。

单击Next按钮进入模块定义页面,这个页面的【Port Name】栏中可以输入相应的端口名称(可在程序中定义);。直接点【Next】按钮进入新建代码总结页面单击【Finish】按钮完成新建代码过程。ISE将自动打开源代码视图以及设计总结视图,选择源代码视图。

1.3.3编辑Verilog源代码。

编辑led.v源代码成如下形式。

module led(led_cona,led_conb,reset,clk,led_data);

input reset;

input clk;

output led_cona;

output led_conb;

output [7:0]led_data;

reg [7:0]led_data;

reg clk_1k;

reg [15:0]cnt_1k;

reg [11:0]cnt_led;

parameter freq_1k=16'h3a98;

assign led_cona=0;

assign led_conb=1;

initial

begin

cnt_1k<=0;

clk_1k<=0;

end

always@(posedge clk) begin

if(reset==0)

begin

cnt_1k<=0;

clk_1k<=0;

end

else

if(cnt_1k==freq_1k)

begin

cnt_1k<=0;

clk_1k<=~clk_1k;

end

else

cnt_1k<=cnt_1k+1; end

always@(posedge clk_1k) if(reset==0)

begin

cnt_led<=0;

led_data<='h01;

end

else

begin

case(cnt_led)

'h001: led_data<='h01;

'h07D: led_data<='h02; 'h0FA: led_data<='h04;

'h177: led_data<='h08;

'h1F4: led_data<='h10;

'h271: led_data<='h20;

'h2EE: led_data<='h40; 'h36B: led_data<='h80;

'h3EC:

begin

led_data<='hff;

cnt_led<='h000;

end

default: cnt_led<=cnt_led; endcase

cnt_led<=cnt_led+1;

end

输入完毕保存。

1.3.4综合(Synthesize –XST)

(1)确保源代码【led.v】在【Synthesis/Implementation】模式下

(2)在【Sources】窗口中选择【led】模块,然后在相关的程序窗口【processes】中双击【Synthesize-XST】。

1.3.5添加约束

在【Sources】窗口选中led.v文件,

【Processes】窗口单击【User Constraints】左边的“+”号展开,双击【Assign Package Pins】,弹出新建一个UCF文件的对话框,点“yes”后就可以打开PACE。在【Design Object List-I/O pins】窗口的【Lo c】栏输入连接FPGA的管脚名,在【Device Architecture】窗口放大即可以看清管脚分配。

管脚分配完毕,点击保存。退出PACE。

在【Sources】窗口选中led.v文件,【Processes】窗口双击【User Constraints】下的【Edit Constrains】即可查看UCF文

本实例的管脚约束文件(*.UCF文件)如下:

NET "clk" LOC = "AH15" ;

NET "led_cona" LOC = "R3" ;

NET "led_conb" LOC = "V1" ;

NET "led_data[0]" LOC = "U8" ;

NET "led_data[1]" LOC = "Y2" ;

NET "led_data[2]" LOC = "Y1" ;

NET "led_data[3]" LOC = "V5" ;

NET "led_data[4]" LOC = "V4" ;

NET "led_data[5]" LOC = "U7" ;

NET "led_data[6]" LOC = "U9" ;

NET "led_data[7]" LOC = "W1" ;

NET "reset" LOC = "AH5" ;

即clk连接FPGA的AH15管脚,led_cona连接FPGA的R3管脚……

1.3.6FPGA的实现和下载配置

Place&Route之后,进入配置FPGA阶段

展开【Implement Design】左边的“+”号,自动执行FPGA实现阶段的过程。双击【Generate Programming】生成可下载的*.bit文件展开【Processes】栏的【Generate Programming】旁的“+”号,双击【Configure Device】打开iMPACT下载程序。

弹出【iMPACT—Welcome to iMPACT】对画框,选中【Configure devices using Boundary —Scan(JTAG)】,单击【FINISH】。

弹出【Assign New Configuration File】对话框,即给器件指定配置文件,其中前两个器件为PROM和CPLD,都选择【Bypass】按钮,最后一个器件为FPGA,选择led.bit文件,选择【Open】按钮,弹出的对话框单击【OK】,弹出一个警告信息,再单击【OK】按钮。右击最后一个器件,单击【Program…】弹出的对话框单击【OK】,如果下载成功则出现Program Succeed。

1.4实验结果

会看到实验箱的LED灯闪烁,证明结果正确。

实验二 LED点阵实验

2.1实验目的:

熟悉ISE8.2开发环境,掌握工程的生成方法;

熟悉SEED-XDTK XUPV2Pro实验环境;

了解Verilog语言在FPGA中的使用。

了解定时器的Verilog实现。

2.2实验内容

定时时钟设计;

LED点阵亮点的控制。

2.3实验步骤:

2.3.1创建工程

双击桌面Xilinx ISE8.2快捷方式或者选择【开始】/【所有程序】/【Xilinx ISE 8.2i】/【Project Navigator】打开 ISE 工程管理器(Project Navigator)。

打开P roject Navigator后,选择File → New Project,弹出新建工程对话框,选择工程存放的目录单击确定,Project Name(工程名称)输入工程名lab2。点击【Next】按钮,弹出器件特性对话框。器件族类型(Device Family)选择“Virtex2P”,器件型号(Device)选“XC2VP30ff896-7”,综合工具(Synthesis Tool)选“XST(VHDL/Verilog)”,仿真器(Simulator)选“ISE Simulator”,单击【Next】直到【Finish】。

2.3.2添加源代码

在【Sources】面板右击,选【Add Source】按钮,指向工程存放的目录文件夹下,打开dot.v 文件。在弹出的【Adding Source Files…】对话框单击【OK】,

2.3.3综合

双击dot.v打开源代码视图,双击【Synthesize-XST】进行综合。

2.3.4添加约束

本实例的管脚约束文件(UCF文件)如下:

NET "clk" LOC = "AH15" ;

NET "cpld_cona" LOC = "R3" ;

NET "cpld_conb" LOC = "V1" ;

NET "dot_con[0]" LOC = "AA3" ;

NET "dot_con[10]" LOC = "R4" ;

NET "dot_con[11]" LOC = "T2" ;

NET "dot_con[12]" LOC = "R7" ;

NET "dot_con[13]" LOC = "P4" ;

NET "dot_con[14]" LOC = "R2" ;

NET "dot_con[15]" LOC = "P5" ;

NET "dot_con[1]" LOC = "AB1" ;

NET "dot_con[2]" LOC = "Y4" ;

NET "dot_con[3]" LOC = "W4" ;

NET "dot_con[4]" LOC = "V8" ;

NET "dot_con[5]" LOC = "W5" ;

NET "dot_con[6]" LOC = "AA1" ;

NET "dot_con[7]" LOC = "AA2" ;

NET "dot_con[8]" LOC = "R6" ;

NET "dot_con[9]" LOC = "U1" ;

NET "dot_data[0]" LOC = "M4" ;

NET "dot_data[10]" LOC = "U7" ;

NET "dot_data[11]" LOC = "V4" ;

NET "dot_data[12]" LOC = "V5" ;

NET "dot_data[13]" LOC = "Y1" ;

NET "dot_data[14]" LOC = "Y2" ;

NET "dot_data[15]" LOC = "U8" ;

NET "dot_data[1]" LOC = "N2" ;

NET "dot_data[2]" LOC = "P9" ;

NET "dot_data[3]" LOC = "L4" ;

NET "dot_data[4]" LOC = "M2" ;

NET "dot_data[5]" LOC = "N5" ;

NET "dot_data[6]" LOC = "L5" ;

NET "dot_data[7]" LOC = "N6" ;

NET "dot_data[8]" LOC = "W1" ;

NET "dot_data[9]" LOC = "U9" ;

NET "reset" LOC = "AH5" ;

在【Sources】窗口选中dot.v文件,【Processes】窗口单击【User Constraints】左边的“+”号展开,双击【Assign Package Pins】弹出新建一个UCF文件的对话框,点“yes”后就可以打开PACE。

在【Design Object List-I/O pins】窗口的【Loc】栏输入连接FPGA的管脚名,在【Device Architecture】窗口放大即可以看清管脚分配。

管脚分配完毕,点击保存。退出PACE。

在【Sources】窗口选中dot.v文件,【Processes】窗口双击【User Constraints】下的【Edit Constrains】即可查看*.UCF管脚约束文件。

2.3.5配置下载文件

双击【Generate Programming】生成可下载的bit文件。展开【Processes】栏的【Generate Programming】旁的“+”号,双击【Configure Device】打开iMPAC T下载程序。

弹出【iMPACT—Welcome to iMPACT】对画框,选中【Configure devices using Boundary—Scan (JTAG)】,单击【finsh】。

弹出【Assign New Configuration File】对话框,即给器件指定配置文件,其中前两个器件为PROM和CPLD,都选择【Bypass】按钮,最后一个器件为FPGA,选择dot.bit文件,选择【Open】按钮

弹出的对话框单击【OK】,弹出一个警告信息,单击【OK】按钮。右击最后一个器件,单

击【Program…】右击FPGA,选中Program…弹出的对话框单击【OK】,如果下载成功则出现Program Succeed。

2.4实验结果

实验结果可以看到合众达的图标(如图2-1)

图2-1

实验三键盘实验

3.1实验目的:

主模块调用子模块接口程序

了解子模块数码管显示程序显示的特点

了解子模块键盘控制程序的特点

3.2实验内容

时钟分频设计;

键盘数据读取;

数码管点亮;

蜂鸣器驱动。

3.3实验例程介绍

3.3.1例程流程图如图3-1

图3-1

3.3.2例程包含文件

1. main.v:程序主模块,通过调用各功能模块实现键盘数据的读取、蜂鸣器的驱动以及数码管的显示 (主模块包含调用子模块的接口语句,但个子模块程序还未调用)

2. v2_dcm.xaw:系统输入时钟处理文件,将外部输入时钟(100M)进行10 分频

3. CLK_DIV.v:系统运行时钟分频文件,将系统运行时间进行分频,通过重载提供 100K 及1K 的模块处理时钟

4. KEY_SCAN.v:键盘读取程序,包含键盘去抖处理

5. DEBOUNCE.v:键盘去抖延时程序

6. THAN_HEX_LED.v:数码管点亮程序

7. main.ucf:FPGA 管脚分配程序

3.4实验步骤

3.4.1创建工程

1.双击桌面Xilinx ISE8.2 快捷方式或者选择【开始】/【所有程序】/【Xilinx ISE 8.2i】/【Project Navigator】打开ISE工程管理器(Project Navigator)。

2.打开Project Navigator后,选择File → New Project,弹出新建工程对话框,在工程路径中单击“…”按钮,选择工程存放的目录单击确定,Project Name(工程名称)输入工程名lab3。点击【Next】按钮,弹出器件特性对话框。器件族类型(Device Family)选择“Virtex2P”,器件型号(Device)选“XC2VP30ff896-7”,综合工具(Synthesis Tool)选“XST(VHDL/Verilog)”,仿真器(Simulator)选“ISE Simulator”。单击【Next】直到【Finish】。

3.4.2添加源代码

在【Sources】面板右击,选【Add Source】按钮,指向工程存放的目录文件夹下,打开main.v 文件在弹出的【Adding Source Files…】对话框单击【O K】,

用【Add Source】命令接着添加【CLK_DIV.v】,【v2_dcm.v】,【THAN_HEX_LED.v】,【KEY_SCAN.v】,【DEBOUNCE.v】文件,方法和添加顶层模块相同。

展开【KEY_SCAN.v】旁的“+”号,展开后会发现此文件关联的文件有“?”号,继续添加【DEBOUNCE.v】文件。共添加了五个程序模块.

3.4.3综合

双击main.v打开源代码视图,双击【Synthesize-XST】进行综合。双击进行综合

3.4.4添加约束

在【Sources】面板右击,选【Add Source】按钮,指向工程存放的目录文件夹下,打开【main.ucf】文件。弹出的对话框单击【OK】。

3.4.5配置下载文件

双击【Generate Programming】生成可下载的bit文件。如图3-13。展开【Processes】栏的【Generate Programming】旁的“+”号,双击【Configure Device】打开iMPACT下载程序弹出【iMPACT—Welcome to iMPACT】对画框,选中【Configure devices using Boundary—Scan (JTAG)】,单击【FINISH】。

弹出【Assign New Configuration File】对话框,即给器件指定配置文件,其中前两个器件为PROM和CPLD,都选择【Bypass】按钮,最后一个器件为FPGA,选择【main.bit】文件,选择【Open】按钮

弹出的对话框单击【OK】,弹出一个警告信息,单击【OK】按钮。右击最后一个器件,单击【Program…】

弹出的对话框单击【OK】,如果下载成功则出现Program Succeed。

3.5实验结果

按下按键,观察数码管的显示,在按键按下的同时可听见蜂鸣器的声音。按下“5”按键,实验结果如图3-1:

图3-1 实验四 LCD显示实验

4.1实验目的:

闪频显示

4.2实验内容:

系统时钟DCM核的调用和编写时钟分频设计;

LCD文字显示;

FPGA的memory IP 核调用。

4.3实验例程介绍:

4.3.1例程流程图如图4-1所示。

图4-1

4.3.2例程包含文件:

1.main.v:程序主模块,实现功能将AD 输入波形还原至 DA 输出

2. v2_dcm.xaw:系统输入时钟处理文件,将外部输入时钟(100M)进行10 分频

3. CLK_DIV.v:系统运行时钟分频文件,将系统运行时间进行分频,提供100K的模块处理时钟

4. LCD_DISPLAY.v:LCD初始化,以及数据显示

4.1. LCD_WRITE.v:LCD写操作函数

5. MEMORT_LCD.v:汉字字库存储空间 (IP核)

6. main.ucf:FPGA管脚分配程序

4.4实验步骤:

4.4.1创建工程

1.双击桌面Xilinx ISE8.2快捷方式或者选择【开始】/【所有程序】/【Xilinx ISE 8.2i】/【Project Navigator】打开ISE工程管理器(Project Navigator)。

2.打开Project Navigato r后,选择File → New Project,弹出新建工程对话框。

在工程路径中单击“…”按钮,选择工程存放的目录工程存放的目录,单击确定,Project Name (工程名称)输入工程名lab4。点击【Next】按钮,弹出器件特性对话框。器件族类型(Device Family)选择“Virtex2P”,器件型号(Device)选“XC2VP30ff896-7”,综合工具(Synthesis Tool)选“XST(VHDL/Verilog)”,仿真器(S imulator)选“ISE Simulator”。单击【Next】直到【Finish】。

4.4.2添加源代码

在【Sources】面板右击,选【Add Source】按钮,指向工程存放的目录文件夹下,打开main.v 文件。如图4-4所示。

在弹出的【Adding Source Files…】对话框单击【OK】。会发现main模块为顶层模块,单击【sources】栏中的main.v旁边的“+号,

用【Add Source】命令接着添加【CLK_DIV.v】,【LCD_DISPLAY.v】,【LCD_WRITE.v】文件,方法和添加顶层模块相同。

【v2_lcd_ziku.xco】文件为存储器核,看源代码【v2_lcd_ziku.v】,该文件已放在lcd文件夹下。

【Add Source】命令接着添加【v2_dcm.xaw】文件的过程,方法和添加顶层模块相同。

此时只显示主程序(main)等待编译。用同样的方法添加约束文件main.ucf。

4.4.3配置下载文件

双击【Generate Programming】生成可下载的bi t文件。如图4-10。运行中

展开【Processes】栏的【Generate Programming】旁的“+”号,双击【Configure Device】打开iMPACT下载程序。

弹出【iMPACT—Welcome to iMPACT】对画框,选中【Configure devices using Boundary—Scan (JTAG)】,单击【Finish】

弹出【Assign New Configuration File】对话框,即给器件指定配置文件,其中前两个器件为PROM和CPLD,都选择【Bypass】按钮,最后一个器件为FPGA,选择【main.bit】文件,选择【Open】按钮,如图4-12。

弹出的对话框单击【OK】,弹出一个警告信息,单击【OK】按钮。右击最后一个器件,单击【Progr am…】

弹出的对话框单击【OK】,如果下载成功则出现Program Succeed。

4.5实验结果

观察LCD,合众达刷屏显示,如下图4-1为当前时刻的显示,图4-2为几秒之后的显示。

图4-1

图4-2 实验五RTC读取实验

5.1实验目的:

熟悉ISE8.2开发环境,掌握工程的生成方法;

熟悉SEED-XDTK XUPV2PRO实验环境;

了解Verilog语言在FPGA中的使用;

了解RTC操作的Verilo g实现

5.2实验内容:

系统时钟设计

数码管点亮

I2C实现

5.3实验例程介绍

5.3.1例程流程图如图5-1

图5-1

5.3.2例程包含文件

1.main.v:程序主模块,实现功能将AD 输入波形还原至DA 输出

2. v2_dcm.xaw:系统输入时钟处理文件,将外部输入时钟(100M)进行10 分频

3. CLK_DIV.v:系统运行时钟分频文件,将系统运行时间进行分频,通过重载提供100K 及1K 的模块处理时钟

4. I2C_FUNC.v:I2C功能实现

5. LED_DISPLAY.v:RTC时钟信息写操作函数

6. TRAN_HEX_LED.v:数码管显示函数

7. main.ucf:FPGA管脚分配程序

5.4实验步骤:

5.4.1创建工程

1.双击桌面Xilinx ISE8.2快捷方式或者选择【开始】/【所有程序】/【Xilinx ISE 8.2i】/【Project Navigator】打开ISE工程管理器(Project Navigator)。

2.打开Project Navigato r后,选择File → New Project,弹出新建工程对话框。

在工程路径中单击“…”按钮,选择工程存放的目录工程存放的目录,单击确定,Project Name (工程名称)输入工程名lab4。点击【Next】按钮,弹出器件特性对话框。器件族类型(Device Family)选择“Virtex2P”,器件型号(Device)选“XC2VP30ff896-7”,综合工具(Synthesis Tool)选“XST(VHDL/Verilog)”,仿真器(S imulator)选“ISE Simulator”。单击【Next】直到【Finish】。

5.4.2添加源代码

在【Sources】面板右击,选【Add Source】按钮,指向工程存放的目录文件夹下,打开main.v

文件。如图5-4所示。

用【Add Source】命令接着添加【v2_dcm.xaw】【CLK_DIV.v】【I2C_FUNC.v】【TRAN_HEX_LED.v】【LED_DISPLAY.v】以及约束文件【main.ucf】文件,方法和添加顶层模块相同。

5.4.3配置下载文件

双击【Generate Programming】生成可下载的bit文件。

展开【Processe s】栏的【Generate Programming】旁的“+”号,双击【Configure Device】打开iMPACT下载程序。

弹出【iMPACT—Welcome to iMPACT】对画框,选中【Configure devices using Boundary—Scan (JTAG)】,单击【FINISH】。

弹出【Assign New Configuration File】对话框,即给器件指定配置文件,其中前两个器件为PROM和CPLD,都选择【Bypass】按钮,最后一个器件为FPGA,选择【main.bit】文件,选择【Open】按钮。

弹出的对话框单击【OK】,弹出一个警告信息,单击【OK】按钮。右击最后一个器件,单击【Program…】

弹出的对话框单击【OK】,如果下载成功则出现Program Succeed。

5.5实验结果

数码管将显示RTC时钟,如图5-1所示显示为“23”秒,图5-2显示“28”秒,反应时钟在变化。

图5-1

图5-2

4 FPGA实验拓展

4.1实验目的:

深入理解实验二的内容

了解16*16LED点阵的控制程序

通过LED点阵设计自己喜欢的图案

4.2实验内容

定时时钟设计;

LED点阵亮点显示“陈小慧”三个汉字和一个笑脸图案。

4.3实验步骤:

实验步骤与实验二的一样,只是将dot.v源文件代码改为如下:

module my_hart(cpld_cona,cpld_conb,reset,dot_data,dot_con,clk); output cpld_cona;

output cpld_conb;

input reset;

output [15:0]dot_data;

output [15:0]dot_con;

input clk;

reg dot_con;

reg dot_data;

reg [15:0]cnt_1k;

reg clk_1k;

reg [3:0]cnt;

parameter freq_1k=16'h3a98;

///////////////////////////////////cpld pins assign cpld_cona=1;

assign cpld_conb=1;

///////////////////////////ini

initial

begin

clk_1k=0;

cnt_1k=0;

cnt=0;

end

///////////////////////////freq

always@(posedge clk)

begin

if(reset==0)

begin

cnt_1k<=0;

clk_1k<=0;

end

else

if(cnt_1k==freq_1k)

begin

cnt_1k<=0;

clk_1k<=~clk_1k;

end

else

cnt_1k<=cnt_1k+1;

end

//////////////////

always@(posedge clk_1k)

if(reset==0)

cnt<=0;

else

begin

case(cnt)

'h0:

begin

dot_con<='h8000;

dot_data<='hD17F;

end

'h1:

dot_con<='h4000; dot_data<='hEAE3; end

'h2:

begin

dot_con<='h2000; dot_data<='hE0D5; end

'h3:

begin

dot_con<='h1000; dot_data<='hF0AA; end

'h4:

begin

dot_con<='h0800; dot_data<='hE0BE; end

'h5:

begin

dot_con<='h0400; dot_data<='hC42A; end

'h6:

begin

dot_con<='h0200; dot_data<='hC45D; end

'h7:

begin

dot_con<='h0100; dot_data<='hC463; end

'h8:

begin

dot_con<='h0080; dot_data<='hEEFF; end

相关文档