>
首页 » 业界动态 » 采用AVR单片机对FPGA进行配置

采用AVR单片机对FPGA进行配置

作者:华南理工大学物理科学与技术学院 梁悦明 李想 肖振亮  时间:2007-05-07 18:08  来源:

altera公司的acex、flex等系列的fpga芯片应用广泛,但其fpga基于sram结构,决定电路逻辑功能的编程数据存储于sram中。由于sram的易失性,每次上电时必须重新把编程数据装载到sram中,这一过程就是fpga的配置过程。fpga的配置分为主动式和被动式。在主动模式下,fpga上电后主动将配置数据从专用的eprom(如epc1,epc2等)加载到sram中。被动模式下,fpga为从属器件,由相应的控制电路或微处理器控制配置过程,包括通过下载电缆由计算机控制配置和单片机模拟配置时序配置。其中,专用的eprom价格高,可编程次数少,而计算机配置在现场应用中又很不现实,因此本文提出一种基于avr单片机的被动配置方式。由于avr系列单片机的内嵌闪存的容量为8~128kb,可容纳中小规模(10万门以下)fpga的配置文件并进行配置,另外还可实现多任务配置。以下将以flex10k10为例,介绍单片机对fpga的双任务配置。


atmega系列单片机


atmel公司的atmega系列单片机根据片内闪存的大小分为atmega8、atmega32、atmega128等。本设计采用的是atmega32,该单片机片内含16k×16共32kb的片内可编程rom,可擦写10 000次,能装载2万门以内fpga的配置数据,最高性能可达16mips,可在最短的时间内完成fpga的配置。如需要配置门数更高的fpga,可采用mega128。

硬件电路设计


atmega32内含32kb的闪存,fpga为flex10k10,其配置文件的大小为15kb,因此该方案可实现双任务配置。硬件连接上,采用单片机配置模式时,须将flex10k10的mesl0、mesl1、nce接地,同时将nconfig、dclk、data0、nstatus、conf_done分别与mega32的pa0~pa4相连。mega32的i/o口均是可编程的,根据需要将pa0、pa1、pa2设置为输出口,pa3、pa4设置为输入口。另外,需在单片机的pb0、pb1上连接两个按键以选择配置任务。具体电路如图1所示。

图1 硬件原理框图

配置方式


altera公司fpga器件的配置方式主要有as(主动串行方式)、ps(被动串行方式)、pps(被动并行同步方式)、ppa(被动并行方式)和jtag(边界扫描方式),使用单片机对fpga进行配置主要是采用单片机来模拟ps方式的时序,以实现fpga器件的配置。


被动串行方式的工作过程如下:配置时需要五个引脚,其中nconfig、dclk、data0为单片机的输出引脚,nstatus、conf_done为单片机的输入引脚。系统上电后,由单片机使nconfig上产生一个大于8μs的负脉冲,fpga检测到nconfig的下降沿后将启动配置过程,nstatus和conf_done随之拉低。nconfig抬高1μs内,nstatus抬高,配置数据从data0上由低位到高位依次送出,当所有配置数据全部送出后,conf_done被抬高,当mcu检测到这一变化后即结束配置过程。随后,dclk必须再提供几个周期的时钟(对于flex10k需要10个周期)以供fpga正确完成初始化,进入用户模式。若配置过程出错,nstatus将被拉低,mcu重新启动配置过程。其配置时序如图2所示。

图2 被动串行配置时序图

配置文件


altera公司的开发工具quartus ii和maxplus ii可生成多种配置文件,包括sof、pof、hex、rbf、ttf等。该配置方案中采用的是rbf文件,rbf文件为二进制文件,包含了全部配置数据,1字节的rbf数据包含8bit的配置数据,配置时最低位先由低位到高位依次装入。

软件设计


使用单片机对fpga的设计关键是软件设计。在双任务配置中,两个任务的配置数据分别存放于不同起始地址的连续存储器区域中。单片机上电复位后,进入按键查询状态,检测到按键按下后,单片机从相应起始地址中读出数据并对fpga进行配置。配置过程按照ps方式的时序要求进行,配置完成后重新进入按键查询状态。控制程序流程图如图3所示。

图3 控制程序流程图


在双任务配置中,两个任务的配置数据分别存放于指定的地址中,由引导程序从指定地址中读出数据并对fpga进行配置。引导程序和rbf文件(配置数据)的合并是软件设计的关键,以下详述其处理过程。


(1) 将引导程序在iccavr下编译并生成mcu.hex,hex文件格式是由intel公司定义的,是按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示. 以下是一个例子。


:10008000af5 f67f0602703e0322cfa92007780c361
:1000900089001c6b7ea7ca9200 fe10d2aa00477d81
:0b00a00080fa92006f3600 c3a00076cb
:00000001ff


第一行,“:”符号表明记录的开始。后面的两个字符表明记录的长度,这里是10h。后面的四个字符给出调入的地址,这里是0080h。后面的两个字符表明记录的类型后面则是真正的数据记录, 最后两位是校验和检查,最后一行是结束串,总写成这样;


(2)将fpga1.rbf改为fpga1.bin,使用“超级单片机工具”将fpga1.bin转换成起始地址为0x0273(mcu.hex的数据长度)的fpga1.hex;
(3)将fpga2.rbf改为fpga1.bin,使用“超级单片机工具”将fpga2.bin转换成起始地址为0x3bd7(mcu.hex和fpga1.hex的数据长度和)的fpga2.hex;
(4)将删除结束串后的mcu.hex和fpga1.hex与fpga2.hex依次合并成config.hex;
(5)将config.hex用下载线下载到atmega32单片机中。

结论


以上方案可适用于3.3v和5v系统的fpga配置,无须扩展eeprom,还能实现多任务配置。

相关推荐

没有退路的FPGA与晶圆代工业者

FPGA  晶圆代工  2014-01-03

采用FPGA的可编程电阻的设计结构分析

FPGA  电阻  2013-09-24

从FPGA的制程竞赛看英特尔与Fabless的后续变化

FPGA  Fabless  2013-07-16

物联网融合自动化推动高效生产模式变革

物联网  FPGA  SoC  2013-07-09

14纳米FPGA展现突破性优势

14纳米  FPGA  2013-06-20

高清视频监控FPGA应用迎来小高峰

视频监控  FPGA  2013-06-20
在线研讨会
焦点