大容量串行e-Flash的FPGA配置方案
时间:09-02
来源:互联网
点击:
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仅需数秒,可以应用在对设备开机时间要求不高的场合。本方案已经应用在某电力测量设备中,效果理想,运行可靠。
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仅需数秒,可以应用在对设备开机时间要求不高的场合。本方案已经应用在某电力测量设备中,效果理想,运行可靠。
FPGA Xilinx 电子 MCU 电压 CMOS 总线 电路 嵌入式 C语言 单片机 ARM 相关文章:
- 基于FPGA的片上系统的无线保密通信终端(02-16)
- 基于Virtex-5 FPGA设计Gbps无线通信基站(05-12)
- 基于FPGA的DVI/HDMI接口实现(05-13)
- 基于ARM的嵌入式系统中从串配置FPGA的实现(06-09)
- 采用EEPROM对大容量FPGA芯片数据实现串行加载(03-18)
- 赛灵思:可编程逻辑不仅已是大势所趋,而且势不可挡(07-24)