专利名称:Fpga在线配置方法
技术领域:
本发明属于卫星通信系统中的一种技术方案,具体是一种FPGA在线配置方法。
背景技术:
在当今的通信产品上,产品是否便于现场升级,是否便于灵活使用成为一项关键因素。现在使用的通信设备上广泛的采用了 Altera公司的的FPGA器件,其内部采用SRAM 工艺,它的配置数据存储在SRAM中,而由于SRAM的易失性,每次系统上电时,必须重新配置数据,即ICR (Ιη-Circuit Reconf igurability),只有在数据配置正确的情况下系统才能正常工作。在线配置方式一般有两类一是通过下载电缆由计算机直接对其进行配置,二是通过配置芯片对其进行配置。通过PC机对FPGA进行在系统重配置,虽然在调试时非常方便, 但在应用现场是很不现实的,自动加载配置对FPGA应用来说是必需的。采用配置芯片价格昂贵,且容量有限,对容量较大的可编程逻辑器件,需要多片配置芯片组成菊花链形进行配置,增加系统设计的难度。
发明内容
为了解决现有技术中存在的上述问题,本发明提出一种实现FPGA在线配置的方法,具体技术方案如下一种FPGA在线配置方法,步骤包括先用CPU分别连接存储有FPGA配置数据的存储器和FPGA,所述CPU的GPIO 口连接FPGA的加载数据的PIN脚;再由CPU从存储器器中调取配置数据;最后,在被动串行PS模式下,通过控制GPIO 口的时序关系来完成配置数据加载;对于不同型号的FPGA芯片,相应的配置数据存储于不同的存储器区,由CPU调取相应的配置数据,再通过修改FPGA和CPU的连接(因为CPU的GPIO PIN脚有多个,针对于具体的FPGA,可以对各个GPIO PIN脚进行定义,或者在GPIO PIN脚和FPGA的加载数据的 PIN脚之间的物理连接关系),以及时序关系来完成配置数据加载。不同型号的FPGA可能有不同的时钟沿和不同的配置管脚,只要相对应修改CPU的设置即可完成加载。所述FPGA的加载数据的PIN脚包括状态输出C0NF_D0NE、配置的状态nSTATUS、 配置控制nCONFIG、时钟输入DCLK和数据输入DATA ;配置过程包括当nCONFIG产生下降沿脉冲时,启动配置过程;在DCLK上升沿,开始将配置数据移入目标FPGA ;配置数据全部正确地移入目标芯片内部后,C0NF_D0NE信号跳变为高;DCLK提供时钟,确保目标芯片被正确初始化后,再进入用户工作模式。当在配置过程中,如果出现错误,nSTATUS是低电平,则重新启动配置过程。该方案可以有由CPU、FLASH、FPGA和一些外围电路组成实现,将CPU的数个GPIO口和FPGA加载数据的相关PIN脚相连,通过控制GPIO 口的时序关系,来完成加载。如果要实现配置不同容量的各种芯片,只要通过修改FPGA和CPU的连接和时序关系即可。而FPGA 的数据则由CPU存储于FLASH中,既方便管理也容易更新,最后由CPU选择读取不同存储器区的数据下载到FPGA器件中,实现在线配置。本发明采用的这套配置方案充分结合了卫星通信产品在实际中对FPGA的使用, 满足对设计的保密性和设计的可升级的要求,实现代替价格昂贵的不可擦写和可擦写配置芯片,并且随时方便快捷的升级程序。本发明的有益效果在设计中既降低成本,实现代替价格昂贵的不可擦写和可擦写配置芯片,并使其达到了保密性和可升级的要求,随时通过简单的文件拷贝操作即可完成产品软件的升级更新。
图1是PS配置方式时序示意图。图2是连接电路示意图。
具体实施例方式下面结合附图与具体实施方式
对本发明作进一步说明一种FPGA在线配置方法,步骤包括先用CPU分别连接存储有FPGA配置数据的存储器和FPGA,所述CPU的GPIO 口连接FPGA的加载数据的PIN脚;再由CPU从存储器器中调取配置数据;最后,在被动串行PS模式下,通过控制GPIO 口的时序关系来完成配置数据加载;对于不同型号的FPGA芯片,相应的配置数据存储于不同的存储器区,由CPU调取相应的配置数据,再通过修改FPGA和CPU的连接,以及时序关系来完成配置数据加载,不同型号的FPGA可能有不同的时钟沿和不同的配置管脚,只要相对应修改CPU的设置即可完成加载。所述FPGA的加载数据的PIN脚包括状态输出C0NF_D0NE、配置的状态nSTATUS、 配置控制nCONFIG、时钟输入DCLK和数据输入DATA ;配置过程包括当nCONFIG产生下降沿脉冲时,启动配置过程;在DCLK上升沿,开始将配置数据移入目标FPGA ;配置数据全部正确地移入目标FPGA内部后,C0NF_D0NE信号跳变为高电平;DCLK提供时钟,确保目标芯片被正确初始化后,再进入用户工作模式。当在配置过程中,如果出现错误,nSTATUS是低电平,则重新启动配置过程。本例中,a) FPGA器件的配置方式和配置文件配置方案采用PS配置方式来实现ICR功能,图1是PS配置方式的时序图。PS方式因电路简单,对配置时钟的要求相对较低,而被广泛应用。
工作过程当nCONFIG产生下降沿脉冲时启动配置过程,在DCLK上升沿,将数据移入目标芯片。在配置过程中,系统需要实时监测,一旦出现错误,nSTATUS将被拉低,系统识别到这个信号后,立即重新启动配置过程。配置数据全部正确地移入目标芯片内部后, C0NF_D0NE信号跳变为高,此后,DCLK必须提供几个周期的时钟(具体周期数与DCLK的频率有关),确保目标芯片被正确初始化,进入用户工作模式。配置文件Altera的开发工具可以生成多种配置或编译文件,用于不同配置方法的配置系统,而对于不同系列的目标器件配置数据的大小也不同,配置文件的大小一般有.rbf文件决定。.rbf文件即二进制文件。该文件包括所有的配置数据,一个字节的.rbf 文件有8位配置数据,每一字节在配置时最低位最先被装载。CPU可以读取这个二进制文件,并把它装载到目标器件中。b)软件设计在该配置方案中,软件是CPU控制软件。CPU的软件采用C语言编程。部分软件程
序如下DATAO------------------------GP106输出/配置数据DCLK------------------------GP105输出/配置时钟nCONFIG------------------------GP104输出/器件复位脚(该信号线的上升沿使配置开始)C0NF_D0NE--------------------------GP102输入/状态位(在配置完成后,该信号线为高)nSTATUS------------------------GP103输入/状态位(如果该信号线为低,表明在配置过程中出现错误,需重新配置)*/inline void out_DCLK(unsigned int d){//输出时钟if (d)GPSRO = (1) << (2&0xlf);elseGPCRO = (1) << (2&0xlf) ;}inline void out_DATA(unsigned int d) {//输出数据if (d)GPSRO = (1) << (3&0xlf);elseGPCRO = (1) << (3&0xlf) ;}inline void out_nC0NFIG(unsigned int d) {//输出 nCONFIGif (d)GPSRO = (1) << (4&0xlf);elseGPCRO = (1) << (4&0xlf) ;}inline int get_nSTATUS (void) {//读 nSTATUS 状态0068]return(GPLR0 &(1 << (5&0xlf))) ? 1:0;}
0069]inline int get_C0NF_D0NE(void) {//读 C0NF_D0NE 状态
0070]return(GPLR0 &(1 << (6&0xlf))) ? 1:0;}
0071]void inline download_fpga_byte(char data)
0072]{
0073]char i ;
0074]for(i = 0 ;i < 8 ;i++) {
0075]out_DCLK (0);
0076]out_DATA(data&l);
0077]data = data >> 1 ;
0078]out_DCLK(l);
0079]out_DCLK (0);
0080]} 0081]}
0082]#define FPGA_SIZE 2000000
0083]int download_fpga(char氺filename)
0084]{
0085]char buf[FPGA_SIZE];
0086]int i, j ;
0087]int loop ;
0088]FILE^fp ;
0089]int ret, sizeread ;
0090]ret = 1 ;
0091]sizeread = 0 ;
0092]while (1) {//-----------------------------------读入 FPGA 数据
0093]ret = fread(buf+sizeread, 1,1, fp);
0094]if (ret ! = 1) break ;
0095]sizeread++ ;
0096]}
0097]fclose(fp);
0098]out_nC0NFIG(l);
0099]udelay(l);
0100]out_nC0NFIG(0);
0101]Ioop = O;
0102]while ((get_nSTATUS ())) {//读取状态
0103]udelay(l);
0104]if(loop++ > 200){printf ( 〃 nStatus not going to Low\n 〃 );
return-20 ;}
}
out_nC0NFIG(l);loop = 0 ;while ( ! (get_nSTATUS ())) {// 检测 nSTATUS 状态udelay(l);if (loop++ > 200){printf(“ Error:nSTATUS not going to high\n");return-30 ;}}for(j = 0 ;j < sizeread ;j++) {download_fpga_byte (buf[j]);}Ioop = O;while ( ! get_C0NF_D0NE ()){if (loop++ > 10) {printf(" warning:C0NFIG_D0NE is not high\n");return-40 ;}}for(i = 0 ;i < 50 ;i++) {out_DCLK(l);out_DCLK (0);}printf (" FPGA download 0K\n〃);//下载成功return 0 ;
权利要求
1.一种FPGA在线配置方法,其特征是步骤包括先用CPU分别连接存储有FPGA配置数据的存储器和FPGA,所述CPU的GPIO 口连接 FPGA的加载数据的PIN脚;再由CPU从存储器器中调取配置数据;最后,在被动串行PS模式下,通过控制GPIO 口的时序关系来完成配置数据加载; 对于不同型号的FPGA芯片,相应的配置数据存储于不同的存储器区,由CPU调取相应的配置数据,再通过修改FPGA和CPU的连接,以及时序关系来完成配置数据加载,不同型号的FPGA可能有不同的时钟沿和不同的配置管脚,只要相对应修改CPU的设置即可完成加载。
2.根据权利要求1所述的FPGA在线配置方法,其特征是所述FPGA的加载数据的PIN 脚包括状态输出C0NF_D0NE、配置的状态nSTATUS、配置控制nCONFIG、时钟输入DCLK和数据输入DATA ;配置过程包括当nCONFIG产生下降沿脉冲时,启动配置过程; 在DCLK上升沿,开始将配置数据移入目标FPGA ;配置数据全部正确地移入目标FPGA内部后,C0NF_D0NE信号跳变为高电平; DCLK提供时钟,确保目标芯片被正确初始化后,再进入用户工作模式。
3.根据权利要求1所述的FPGA在线配置方法,其特征是当在配置过程中,如果出现错误,nSTATUS是低电平,则重新启动配置过程。
全文摘要
一种FPGA在线配置方法,步骤包括先用CPU分别连接存储有FPGA配置数据的存储器和FPGA,所述CPU的GPIO口连接FPGA的加载数据的PIN脚;再由CPU从存储器器中调取配置数据;最后,在被动串行PS模式下,通过控制GPIO口的时序关系来完成配置数据加载。使用本方法,可以在设计中既降低成本,实现代替价格昂贵的不可擦写和可擦写配置芯片,并使其达到了保密性和可升级的要求,随时通过简单的文件拷贝操作即可完成产品软件的升级更新。
文档编号H03K19/177GK102377423SQ20101026044
公开日2012年3月14日 申请日期2010年8月23日 优先权日2010年8月23日
发明者魏武 申请人:南京熊猫汉达科技有限公司, 南京熊猫电子股份有限公司, 熊猫电子集团有限公司