完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现场可编程门阵列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; CCL K=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仅需数秒,可以应用在对设备开机时间要求不高的场合。本方案已经应用在某电力测量设备中,效果理想,运行可靠。 |
|
|
|
只有小组成员才能发言,加入小组>>
643 浏览 0 评论
1078 浏览 1 评论
2450 浏览 5 评论
2774 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2609 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
634浏览 9评论
630浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
759浏览 6评论
606浏览 5评论
650浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 09:15 , Processed in 1.205592 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号