大容量串行e-Flash的FPGA配置方案

2006-05-30 13:47:26来源: 单片机及嵌入式系统应用 关键字:存储器  配置  芯片

引 言
  现场可编程门阵列FPGA(Field Programmable Gate Array)是一种集通用性强、设计灵活、集成度高和编程方便等诸多优点于一身的现场可编程ASIC。自1985年美国的Xilinx公司推出FPGA产品并取得成功以后,FPGA发展迅猛,门数不断提升,达到数百万门的规模;产品种类日益丰富,性能不断完善,在军事、通信、医疗、消费类电子等各领域发挥了巨大的作用。

  Xilinx公司的FPGA具有很高的性价比,其集成开发环境ISE和Webpack效率高、界面友好,因此在业界有着广泛的应用。通常对Xilinx公司的FPGA配置采用专用的配置芯片,速度较快,其价格也正逐步降低。笔者为配合某电力测量仪表的开发,对Xilinx公司的SpartanII系列FPGA的配置方案进行了探索,总结出一套成本低廉、接口简单、便于移植的方法。该方法采用Megawin公司的1Mb大容量串行e-Flash存储器MM36SB010存放FPGA配置文件,通过MCU在被动串行模式下完成了对XC2S30的在线配置。

1 Spartanll配置简介
  Xilinx公司的SpartanII系列FPGA产品成熟。该系列是采用0.18 μ m工艺的2.5V低电压FPGA芯片,功耗低,可无限次编程。XC2S30是该系列FPGA中的一款,总门数达3万门,可以实现电力测量仪表中采样数据的串行编码和多CPU间的数据交换的功能。

  XC2S30采用CMOS SRAM工艺。由于SRAM的易失性,断电后配置信息消失,因此上电时必须对该芯片重新配置才能使其正常工作。本节将详细介绍XC2S30的配置方式。该配置方式对SpartanlI系列的其它FPGA同样适用。

1.1 配置模式

 
  XC2S30支持4种配置模式:被动串行模式(slave serialmode)、主动串行模式(master serial mode)、被动并行模式(slave parallel mode)和边界扫描模式(boundary-scanmode)。在每次芯片上电初始化完毕后,芯片将采样模式引脚M[2:0]以决定配置模式。配置引脚状态和配置模式的关系如表1所列。(X代表任意状态。)


 


  根据不同的应用场合,用户可以选择不同的配置方式。在XC2S30内部逻辑设计阶段,可采用边界扫描模式进行配置。配置文件可通过Xilinx公司的下载电缆(如Xilinx并行下载电缆)下载到芯片,便于在线调试。但是在产品成品阶段,已经设计好的配置文件必须存储于EEPROM或者Flash等非易失的存储器中。在系统上电时,外围器件通过FPGA配置引脚将配置文件传送至FPGA中,从而使其正常工作。根据用户的需要,可以选择主动串行模式、被动串行模式和被动并行模式。其中串行的两种模式需要的I/O口资源较少,但速度较慢;被动并行模式需要的I/O口资源较多,速度也较快。根据本系统的设计要求,选择了占用I/0口资源较少的被动串行模式对XC2$30进行配置。

1.2 被动串行模式下的配置引脚


  在被动串行模式下,所用到的配置引脚为模式选择M[2:0]、配置时钟CCLK、配置复位PROGRAM、配置完成DONE、配置数据串行输入DIN和初始化状态INIT。

1.3 被动串行模式下的配置步骤及时序


  XC2S30上电后,当内核和I/O口电源引脚电压达到高电平或者用户将PROGRAM引脚置低时,芯片便进入初始化状态。此后芯片将INIT引脚置低,代表芯片正在清空配置存储器,清空完成后INIT引脚将被置高,代表清空完毕。在INIT的上升沿,模式选择引脚M[2:0]被采样,以决定配置模式,若为11x则采用被动串行模式。此后配置文件信息可以通过CCLK和DIN两个配置引脚输入至XC2S30中。配置数据在CCLK的上升沿采样。在配置期间芯片会自动进行CRC错误检验。若发生了CRC校验错误,INIT引脚将被置低,用户可以检测该引脚判断配置过程中是否出现错误。当配置文件成功输入至芯片中,芯片置DONE引脚为高,用户可检测该引脚判断配置是否成功。此后芯片进入正常工作状态。配置流程如图1所示。


 



2 MM36SB010的读写方式

  MM36SB010是Megawin公司生产的大容量SPI串行e-F1ash存储器。该芯片具有低功耗(小于4mA)、宽电压(2.4~5.5V)、高速(8MHz工作频率)、大容量(1Mb)和小页面(每页128B)、低成本等诸多优点,特别适合于消费电子、通信、工业控制等领域的应用。该芯片可工作在2线或者3线串行总线方式。本方案使用该芯片存储FPGA配置文件,读写接口简单,速度快。

  MM36SB010的容量为1Mb,共分1024页,每页128B。芯片内部有1个128B的缓冲区,可以对读写数据进行暂存,内部结构如图2所示。


 


  MM36SB010可工作在2线或者3线串行总线方式,工作方式通过SMC(串行模式控制)引脚来选择。当SMC为高电平时,为2线方式;当SMC为低电平时,为3线方式。本方案采用3线方式,串行数据输入和输出引脚分开,数据输入引脚为SDl0,数据输出引脚为SDO。MM36SB010的状态可通过引脚BUSY来检测,也可以通过访问状态寄存器进行查询。3线工作方式的电路示意如图3所示。

 


  MCU可通过SCLK和SDIO引脚向MM36SB010发送控制命令,实现MM36SB010的软件复位、Flash存储器或缓冲区数据的读写和状态查询等功能。常用的命令有软件复位(SRC)、读状态寄存器(RSE)、读F1ash存储器数据(RME、RMEC)、写缓冲区(WEB、WEBC)、带预擦除功能的写缓冲区数据至Flash存储器(WBMEP)。所有的命令、地址和数据都从最低位(LSB)开始发送。

  在MM36SB010上电后需执行一次软件复位指令,等待20ms后芯片即可正常工作。数据可从Flash存储器中用RME和RMEC:指令直接读取,但写数据至Flash存储器前必须用WEB和WEBC命令将数据送入缓冲区内,再用WBMEP或者WBMP命令将缓冲区内的数据送入Flash存储器。

  虽然MM36SB010的时钟SCLK的频率最高可达8MHz,但是由于每次从Flash读写一个字节数据前必须先送入控制命令,因此实际的读写速度小于4MHz。

3 配置方案

  Xilinx公司针对各款FPGA都设计了专用的配置芯片,如在系统可编程18VXX系列和串行一次性可编程PROM-XCl7V00系列。目前18Vxx系列价格正逐步降低,但是由于其专用性,该ROM很难被系统中其它部分共享;XCl7V00系列虽然价格较低,但只能一次性烧写,只适用于成品阶段。本方案中XC2S30的配置文件存储于MM36SB010,并由MCU完成其读写功能,配置文件通过RS232串口下载。当配置文件下载完毕后,由MCU从MM36SB010中读取并对XC2S30进行配置。MM36SB010中其余存储空间可供其它程序模块使用。

3.1 硬件框图

  MCU通过SCLK、SDIO、SDO完成对MM36SB010的读写,同时MCU通过CCLK、DIN、INIT、PROGRAM、DONE引脚完成对XC2S30的配置。硬件框图如图4所示。

 

 


3.2 MCU程序

  本方案的MCU内部程序主要完成三部分功能:与PC机的串口通信、读写MM36SB010和配置XC2S30。MCU工作在两种状态,在上电时MCU从MM36SB010中读取配置文件并对XC2S30进行配置,完成配置后等待PC机从串口发出的下载命令。接收到该命令后,MCU开始接收配置文件并写入MM36SB010。程序流程如图5所示。


 


  对XC2S30配置的程序部分主要完成被动串行模式的配置时序,配置时序如图6所示。


 


  配置部分程序代码如下:
//函数定义
//从e-Flash中读取配置文件数据void ReadFlashData(unsigned int p_addr,unsigned char b_addr,unsigned char count,unsigned char*buf)
//p_addr为页地址,b_addr为页内地址,buf为MCU内部存储    //器指针{
unsigned int i,temp=0:
send_one_byte(0x9C);                    //送RME指令
send_one byte(b_addr);                   //送页内地址
send_one_byte((unsigned char)(P_addr & 0x00FF));  //送页低字节地址
send_one_byte((unsigned char)p_addr&0xFF00));     //送页高字节地址
buf[0]=read one byte();                 //读取数据
for(i=1;isend_one_byte(RMEC);               //送RMEC指令
buf[i]=read_one_byte();
}
}
                         //向SpartanlI发送配置数据
void SendConfigData(unsigned char count,unsigned char*configdata)
{
unsigned chari,j,temp;
CCLK=0;
for(i=count;i>0;i--){
temp=*configdata++;
for(j=0;j<8;j++){
if((temp&0x80)==0
DIN=O;
else
DIN=1:
tem0=temp<<1;
}
CCLK=I;
CCLK=0;
}
}                              //主程序……
……                            //程序初始化部分
length=FILESIZE;                    //配置文件长度
INIT=1;
PROGRAM=0;                      //清空配置存储器
Delay();                            //延时
PROGRAM=1;
while(INIT==0);                    //等待存储器清空
while(1){
ReadFlashData(page_addr,bit_addr,128,databuf);
                 //从MM36SB010中读取128字节配置文件数据
SendConfigData(128,databuf);        //发送配置文件数据至XC2S30
length-=128;
if(1ength<128)
break;
}
void ReadFlashData(page_addr,bit_addr,length,databuf);
SendConfigData(Iength,databu);
if(DONE==1)……                      //配置成功
else……                          //配置失败

结语
  本方案提出了一种基于大容量串行e-Flash的XilinxSpartanlI系列FPGA在线配置的方法。该方案适用于采用MCU的嵌入式系统中,占用MCU的I/O口资源少,且可以实现ROM的共享。MCU程序采用C语言编写,便于在单片机、ARM等MCU间的移植。经过实际测试,配置XC2S30仅需数秒,可以应用在对设备开机时间要求不高的场合。本方案已经应用在某电力测量设备中,效果理想,运行可靠。

关键字:存储器  配置  芯片

编辑:赵思潇 引用地址:http://www.eeworld.com.cn/FPGA/qt/200605/1689.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于矢量控制的高性能异步电机速度控制器的设计
下一篇:使用Verilog实现基于FPGA的SDRAM控制器

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
存储器
配置
芯片

小广播

独家专题更多

TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来

夏宇闻老师专栏

你问我答FPGA设计

北京航空航天大学教授,国内最早从事复杂数字逻辑和嵌入式系统设计的专家。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved