admin管理员组

文章数量:1530897

2023年12月30日发(作者:)

实验指导(实验指导(一)

——认识FPGA开发板

一、实验目的

1、了解FPGA开发流程

2、了解Xilinx KC705开发平台

二、实验原理

FPGA是Field Programmable Gate Array的缩写,即现场可编程门阵列。FPGA是在CPLD的基础上发展起来的新型高性能可编程逻辑器件,它一般采用SRAM工艺,也有一些专用器件采用Flash工艺或反熔丝(Anti-Fuse)工艺等。FPGA的集成度很高,其器件密度从数万系统门到数千万系统门不等,可以完成极其复杂的时序与组合逻辑电路功能,适用于高速、高密度的高端数字逻辑电路设计领域。FPGA的基本组成部分有可编程输入/输出单元、基本可编程逻辑单元、嵌入式RAM、丰富的布线资源、底层嵌入功能单元、内嵌专用硬核等。

一般来说,完整的FPGA设计流程包括电路设计与输入、功能仿真、综合优化、综合后仿真、布局布线、布局布线后仿真、板级验证与加载配置调试等主要步骤,如图1所示。

(1) 电路设计与输入。电路设计与输入是指通过某些规范的描述方式,将工程师电路构思输入给EDA工具。常用的设计输入方法有硬件描述语言(HDL)和原理图设计输入方法等。HDL语言中,应用最为广泛的是VHDL和Verilog HDL。

(2)功能仿真。电路设计完成后,要用专用的仿真工具对设计进行

功能仿真,验证电路功能是否符合设计要求。功能仿真有时也被称为前仿真。常用的仿真工具有ModelSim、VCS、g和等。

(3)综合优化。综合优化(Synthesize)是指将HDL语言、原理图等设计输入翻译成由与、或、非门,RAM,触发器等基本逻辑单元组成的逻辑连接(网表),并根据目标与要求(约束条件)优化所生成的网表,输出edf和edn等标准格式的网表文件,供FPGA厂家的布局布线器进行实现。

(4)综合后仿真。综合完成后需要检查综合结果是否与原设计一致,做综合后仿真。在仿真时,把综合生成的标准延时文件反标到综合仿真模型中去,可估计门延时带来的影响。

(5)实现与布局布线。综合结果的本质是一些与、或、非门,触发器,RAM等基本逻辑单元组成的逻辑网表,它与芯片实际的配置情况有较大差距。此时,应该使用FPGA厂商提供的软件工具,根据所选芯片型号,将综合输出的逻辑网表适配到具体FPGA器件上,这个过程叫做实现过程。在实现过程中,最主要的过程就是布局布线。所谓布局(Place)是指将逻辑网表中的硬件原语或者底层单元合理地适配到FPGA内部的固有硬件结构上;所谓布线(Route)是指根据布局的拓扑结构,利用FPGA内部的各种连线资源,合理正确连接各

个元件的过程。

(6)时序仿真与验证。将布局布线的时延信息反标到设计网表中,所进行的仿真就叫时序仿真或布局布线后仿真,简称后仿真。布局布

线后仿真的主要目的在于发现时序违规(Timing Violation),即不满足时序约束条件或者器件固有时序规则(建立时间、保持时间)的情况。

(7)板级仿真与验证。在有些高速设计情况下还需要使用第三方的板极验证工具进行仿真与验证。这些工具通过对设计的IBIS、HSPICE等模型的仿真,能较好地分析高速设计的信号完整性、电磁干扰(EMI)等电路特性等。

(8)对器件下载调试。设计开发的最后步骤是在线调试或者将生成的配置文件写入芯片中进行测试。示波器和逻辑分析仪是逻辑设计的主要测试工具。以上任何仿真或者验证步骤出现问题,就需要根据错误的定位返回到相应的步骤更改或者重新设计。

目前主要的FPGA器件生产厂商有两家,即美国的Altera公司和软件开发平台,其中Altera公司的FPGA产品主要有Cyclone系列和Stratix系列等,软件开发平台为QuartusII,而Xilinx公司的FPGA产品主要有Virtex系列和Spartan系列等,软件开发平台为ISE。

本实验采用的是Xilinx公司的带有Kintex-7 FPGA的KC705开发平台。Xilinx的7系列FPGA包括Artix-7,Kintex-7 和Virtex-7 三个系列。具有超高端连接带宽,逻辑容量和信号完整性,提供低成本,小型尺寸和大容量的要求严格的高性能应用。其中,Kintex-7 FPGA具有较高的性价比,其组成的收发器从600Mbps到最高的6.6 Gbps,达到28.05Gbps。主要用在航空电子、LED背光的平板电视和3D TV、LTE基带、手持超声设备、多模式无线电、Prosumer数码单反照相机和视频IP网关。

图1 FPGA开发流程

Kintex-7 FPGA主要包括以下主要特性:

(1)基于6输入查找表(LUT)技术,可配置为分布式内存的,先进的高性能FPGA逻辑。

(2)36kB双端口RAM块,内置片上数据缓冲的FIFO逻辑。

(3)高性能的Select IO技术,支持高达1866 Mb/s的DDR3接口。

(4)强大的时钟管理瓷砖(CMT),结合锁相环(PLL)和混合模式时钟管理器(MMCM),用于实现高精度和低抖动。

(5)低成本,线焊接,无盖倒装芯片,高信号完整性,倒装芯片封装,可以方便在同一系列产品之间互换。所有型号都具有无铅封装,并具有可选铅封装。

本实验采用的Kintex-7 FPGA的KC705评估板提供了一个硬件环境,用于Kintex-7 XC7K325T-2FFG900C FPGA的设计开发和评估,KC705开发平台如图2所示。

图2 KC705开发平台

从图中可以看出 KC705板提供了许多嵌入式处理系统的共同特性,开发板资源介绍如表1所示。

表1 KC705资源介绍

模块号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

描述

Kintex-7FPGA(风扇下面)

DDR模块

BPI flash存储器

SPI flash存储器

SD卡接口

USB JTAG接口

系统时钟源

用户时钟源

SMA时钟输入

GTX时钟输入

Jitter Attenuated Clock

GTX收发器

PCI插槽

SFP连接器

以太网芯片

GTX收发器时钟源

USB转UART芯片

HDMI接口

LCD显示屏

I2C总线切换开关

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

以太网指示灯

用户GPIO LED灯

用户 GPIO 按键

用户DIP切换开关

旋转按钮

GPIO SMA连接器

电源开关

FPGA下载按钮

Flash配置开关

HPC连接器

LPC连接器

电源管理

XADC模块

JTAG接口

PMBus 连接

12V电压输入

CPU复位按钮

为了了解并掌握FPGA开发流程,本实验在KC705平台设计设计一个分频计数的实验,用FPGA内部逻辑控制LED灯的亮灭。KC705平台自带的8个LED灯原理图如图3所示,当GPIO输入端为高电平时,二极管导通,灯变亮。当输入端为低电平时,二极管截至,灯变暗。本实验通过Verilog代码进行计数分频,控制GPIO_LED_0的周期性变化。

图3 KC705平台LED灯原理图

在Verilog代码设计中,把分频输出信号与GPIO_LED_0管脚相连,大家就可以感受到分频产生的效果了。在代码里,使用的200M的差分时钟,一个周期是5ns,在代码里24位计数器cnt进行循环计数,一个周期有224个时钟周期,大约是80ms,所以LED0以80ms为周期变化。

三、实验步骤

a) 打开ISE软件,新建工程,如图4所示

图4 新建ISE工程

然后输入工程名称和路径,其余选择默认选项,点击finish,如图5所示。

图5 输入工程名称和路径

b) 新建工程结束之后,右击新建的工程名称,选择add new

source,可以向工程中添加源文件,在这里选择verilog module,在左侧对话框输入文件名称和路径,如图6所示

图6 添加verilog源文件

回到设计页面,可以发现在工程下面多了一个.v文件,点开文件,输入下面代码

module clk_div(clk_p,clk_n,rst,clk_div);

input clk_p,rst;

input clk_n;

output clk_div;

reg clk_div;

reg[23:0] count;

wire clk;

always @ (posedge clk)

if(rst)

begin

count <= 1'b0;

clk_div <= 1'b0;

end

else

if ( count==24'hffffff)

begin

count <= count + 1'b1;

end

else

begin

count <= 1'b0;

clk_div <= ~clk_div;

end

//差分时钟例化原语

IBUFDS UUT_IBUFG(.I(clk_p),

.IB(clk_n),

.O(clk));

endmodule

代码输入完成之后对代码进行综合,双击Synthesize-XST,综合成功后会显示对号或感叹号,如图7所示。如果是感叹号,代表有警告,可右击Synthesize-XST查看综合报告,对这里出现的警告可以忽略。

图7 代码综合成功

c) 为了使我们的代码与硬件映射,还需要进行管脚约束,管脚约束文件格式为ucf,与添加verilog module文件相同的方法,添加一个ucf文件,不同的是在图8的左侧界面中选择Implementation

Consraints File。

图8 添加ucf文件

回到设计界面,开始编辑ucf文件,打开KC705的datasheet,我们可以找到要使用的LED0与FPGA管脚AB8相连,如图9所示

图9 LED0与FPGA管脚对应关系

同样的方法,再对时钟和复位信号进行配置。时钟选用200M的system clock source,复位信号选用SW3,确定了管脚对应关系之后,开始编辑ucf文件,输入下列内容,其中IOSTANDARD为电压约束,在KC705的datasheet中可以找到。

NET "clk_p" LOC=AD12 |IOSTANDARD=LVDS; //200M

NET "clk_n" LOC=AD11 |IOSTANDARD=LVDS; //200M

NET "rst" LOC=AG5 |IOSTANDARD=LVCMOS15;//sw3

NET "clk_div" LOC=AB8 |IOSTANDARD=LVCMOS15;//LED0

d) 以上工作做完之后,就要对代码进行布局布线,生成可下载的比特流,如图10所示,双击Generate Programming File。

e) 上面步骤完成之后,开始将生成的比特流下载到FPGA板,如图11所示,连接开发板与电脑

图11 连接FPGA与电脑

点击configure target device,打开Impact,如图12所示

图12 打开iMPACT软件

点击箭头所示按钮,出现图13界面,点击OK

图13 扫描设备

如图14所示,软件识别出所连接设备,点击OK

图14 设别设备

双击设备,找到生成的比特流,出现图15对话框选择no

图15 生成PROM

然后选择program,将比特流下载到FPGA板,下载成功后出现program successed标志,如图16所示

图16 下载比特流成功

f) 观察实验结果。按下SW3,发现LED0是灭的,然后它会由暗到明周期性的变化,如图17,18所示

图17 LED0变亮

图18 LED0变暗

四、思考题

1. 本实验中代码实现的是偶数分频,试编写基数分频,如3分频代码。

2. 本实验中把比特流下载到FPGA开发板是通过USB接口,除了USB之外还有哪些下载方式?

本文标签: 设计输入逻辑综合进行