本发明涉及计算机领域,具体涉及一种fpga配置及在线升级方法。
背景技术:
:目前很多产品都广泛用了fpga,虽然品种不同,但编程方式几乎都一样:利用专用的eprom对fpga进行配置。专用的eprom价格不便宜,且大不跟上都是一次性opt方式编程。一旦更改fpga设计,代价不小。技术实现要素:为解决上述技术问题,本发明的技术方案如下:第一方面,本发明提供一种采用无源串行方式对fpga进行配置的方法,包括以下步骤:ss1:设置nconfig="0"、dclk="0",保持2μs以上;ss2:检测nstatus,如果为"0",表明fpga已响应配置要求,可开始进行配置,否则报错;ss3:设置nconfig="1",并等待5μs;ss4:在data0上放置数据,设置dclk="1",延时;ss5:设置dclk="0",并检测nstatus,若为"0",则报错并重新开始;ss6:准备下一位数据,并重复执行步骤ss4、ss5,直到所有数据送出为止;ss7:检测conf_done是否变成"1",若是,表明fpga的配置已完成,如果所有数据送出后,conf_done不为"1",必须从ss1开始重新配置;ss8:配置完成后,再送出10个周期的dclk,以使fpga完成初始化。进一步的,nconfig="0"后1μs内nstatus将为"0"。进一步的,fpga为altera的fpga。进一步的,使用mpc860作cpu,bootrom采用sst39vf040,fpga型号ep1k30。进一步的,步骤ss8中fpga完成初始化所需要的10个周期的dclk是针对acex1k和flex10ke的,如果是apex20k,则需要40个周期。进一步的,在配置过程中,如果检测到nstatus为"0",表明fpga配置有错误,则应回到步骤ss1重新开始。第二方面,本发明提供一种对fpga的在线升级的方法,步骤包括:ss1:使用编译和连接工具,将fpga的第一个版本与cpu的工作程序连接在一起,分别占用地址为0x70000-0x7ffff和0x00000-0x6ffff的存储空间;;ss2:单板启动时,cpu自动将0x70000-0x7ffff的数据下载到fpga中,完成fpga配置;ss3:当fpga需升级时,将新的rbf配置文件放在后台计算机中;ss4:cpu把bootrom的0x70000-0x7ffff空间当作普通数据存储区,通过后台将新的rbf配置文件放在0x70000-0x7ffff中;ss5:cpu调用bootrom中的fpga配置子程序,对fpga重新下载数据,完成fpga升级。进一步的,使用mpc860作cpu,bootrom采用sst39vf040,fpga型号ep1k30,在mcp860的pb口选5根线与ep1k30连接成ps配置方式,data0也由mpc860输出。进一步的,存放fpga配置数据的区域必须是cpu可重写的。进一步的,如果某些单板bootrom的写功能必须禁止,此时fpga配置数据可放在其它存储器中,如存放应用程序的flash中,升级fpga配置数据可以和升级应用程序一并完成。与configurationeprom方式相比本,本发明的方案有降低硬件成本、可多次编程、实现真正"现场可编程"、减少生产工序等优点。附图说明图1示出configurationeprom方式对fpga进行配置的时序图。图2示出本发明ps配置单片fpga的硬件连接图图3示出本发明ps配置多片fpga的硬件连接图。图4示出本发明采用ps方式对fpga进行配置的时序图。图5示出本发明采用ps方式对fpga进行配置操作流程框图。图6示出本发明对fpga的在线升级的系统结构框图图7示出本发明对fpga的在线升级的系统电路原理图。具体实施方式以下结合说明书附图及具体实施例进一步说明本发明的技术方案。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明的发明构思在于利用板上现有cpu子系统中空闲的rom空间存放fpga的配置数据,并由cpu模拟专用eprom对fpga进行配置,以降低硬件成本并实现fpga的在线升级。ram-basedfpga由于sram工艺的特点,掉电后数据会消失。因此,每次系统上电后,均需对fpga进行配置。对于altera的fpga,配置方法可分为:专用的eprom(configurationeprom)、ps(passiveserial无源串行)、pps(passiveparallelsynchronous无源同步并行)、ppa(passiveparallelasynchronous无源异步并行)、jtag(不是所有器件都支持)。图1为configurationeprom方式对fpga进行配置的时序图。本发明采用ps方式对fpga进行配置,主要是基于如下几个方面的考虑:1.ps方式连线最简单;2.与configurationeprom方式可以兼容(msel0、1设置不变);3.与并行配置相比,误操作的几率小,可靠性高。图2-3本发明采用ps方式对fpga进行配置的系统结构图。图2示出ps配置单片fpga的硬件连接,图3示出ps配置多片fpga的硬件连接。图4为本发明采用ps方式对fpga进行配置的时序图。图5为本发明采用ps方式对fpga进行配置操作流程框图。如图3所示,示出采用ps方式对fpga进行配置的方法流程,cpu按该方法步骤操作i/o口线,即可完成对fpga的配置,方法步骤如下:ss1:nconfig="0"、dclk="0",保持2μs以上。ss2:检测nstatus,如果为"0",表明fpga已响应配置要求,可开始进行配置。否则报错。正常情况下,nconfig="0"后1μs内nstatus将为"0"。ss3:nconfig="1",并等待5μs。ss4:data0上放置数据(lsbfirst),dclk="1",延时。ss5:dclk="0",并检测nstatus,若为"0",则报错并重新开始。ss6:准备下一位数据,并重复执行步骤ss4、ss5,直到所有数据送出为止。ss7:此时conf_done应变成"1",表明fpga的配置已完成。如果所有数据送出后,conf_done不为"1",必须从ss1开始重新配置。ss8:配置完成后,再送出10个周期的dclk,以使fpga完成初始化。根据本发明的一实施例,fpga为altera的fpga。根据本发明的一实施例,步骤ss8中fpga完成初始化所需要的10个周期的dclk是针对acex1k和flex10ke的,如果是apex20k,则需要40个周期。根据本发明的一实施例,在配置过程中,如果检测到nstatus为"0",表明fpga配置有错误,则应回到步骤ss1重新开始。图6-7为本发明对fpga的在线升级的系统结构框图及电路原理图。如图6所示,示出对fpga在线升级的系统。根据本发明的一实施例,使用mpc860作cpu,bootrom采用sst39vf040,一片fpga型号ep1k30qc208-3。我们在mcp860的pb口选5根线与ep1k30连接成ps配置方式,data0也由mpc860输出,信号定义见下表:mpc860引脚i/o信号名称ep1k30引脚pb24odata0156pb25instatus52pb26onconfig105pb27iconf_done2pb28odclk155ep1k30所需要的配置数据为58kb(准确的长度参见生成的rbf文件),由于bootrom比较空,我们将配置数据安排在bootrom的0x70000~0x7ffff区间内。第一次的配置数据可利用编程器将rbf文件当作二进制文件写到bootrom的起始地址为0x70000的区域,也可以通过860仿真器把数据写到指定位置。根据本发明的一实施例,存放fpga配置数据的区域必须是cpu可重写的。根据本发明的一实施例,如某些单板bootrom的写功能必须禁止,此时fpga配置数据可放在其它存储器中,如存放应用程序的flash中,升级fpga配置数据可以和升级应用程序一并完成。对fpga的在线升级的方法包括以下步骤:ss1:使用编译和连接工具,将fpga的第一个版本与mpc860的工作程序连接在一起,分别占用地址为0x70000-0x7ffff和0x00000-0x6ffff的存储空间。ss2:单板启动时,mpc860自动将0x70000-0x7ffff的数据下载到fpga中,完成fpga配置。ss3:当fpga需升级时,将新的rbf配置文件放在后台计算机中。ss4:mpc860把bootrom的0x70000-0x7ffff空间当作普通数据存储区,通过后台将新的rbf配置文件放在0x70000-0x7ffff中。ss5:mpc860调用bootrom中的fpga配置子程序,对fpga重新下载数据,完成fpga升级。以mpc860为例,可以将转换完成的rbf文件作为二进制文件,直接写到mpc860系统的某一rom/flash区域。由于这段数据的起始地址和长度都是已知的,相应的软件编写是很方便的。本发明的cpu源程序如下:voidinitport(void){//初始化pb口相应位://pb24-输出,pb25-输入,pb26-输出,pb27-输入,pb28-输出immr->pip_pbpar=0x00000000;immr->pip_pbdir=0xfffff5af;immr->pip_pbodr=0x00000000;immr->pip_pbdat=0xffffff57;}ubytefpga_download(void){//fpga配置ubyte*bootaddr;uwordcountnum=0x0;ubytefpgabuffer,i;//获得boot区首地址bootaddr=(ubyte*)(immr->memc_or0&immr->memc_br0&0xffff8000);set_nconfig(0);//nconfig="0",使fpga进入配置状态set_dclk(0);delay5us();if(read_nstatus()==1){//检测nstatus,如果为"0",表明fpga已响应配置要求,可开始进行配置。否则报错err_led(1);return0;}set_nconfig(1);delay5us();//开始输出配置数据:while(countnum<=0x0e74e){fpgabuffer=*(bootaddr+0x70000+countnum);for(i=0;i<8;i++){//dclk="0"时,在data0上放置数据(lsbfirst)set_data0(fpgabuffer&0x01);set_dclk(1);//dclk->"1",使fpga读入数据fpgabuffer>>=1;//准备下一位数据if(read_nstatus()==0){//检测nstatus,如果为"0",表明fpga配置出错err_led(1);return0;}set_dclk(0);}countnum++;}//fpga初始化://acex1k和flex10ke需要10个周期,apex20k需要40个周期for(i=0;i<10;i++){set_dclk(1);delay100us();set_dclk(0);delay100us();}set_data0(0);if(read_nconf_done()==0){//检测nconf_done,如果为"0",表明fpga配置未成功err_led(1);return0;}return1;//成功返回}//data0输出voidset_data0(ubytesetting){//pb24if(setting)immr->pip_pbdat|=0x00000080;elseimmr->pio_pbdat&=0xffffff7f;}//读nstatus状态ubyteread_nstatus(void){//pb25if(immr->pio_pbdat&0x00000040)return1;elsereturn0;}//设置nconfig电平voidset_nconfig(ubytesetting){//pb26if(setting)immr->pip_pbdat|=0x00000020;elseimmr->pio_pbdat&=0xffffffdf;}//读nconf_done状态ubyteread_nconf_done(void){//pb27if(immr->pio_pbdat&0x00000010)return1;elsereturn0;}//输出dclkvoidset_dclk(ubytesetting){//pb28if(setting)immr->pio_pbdat|=0x00000008;elseimmr->pio_pbdat&=0xfffffff7;}//结束本发明严格按照fpga的ps配置流程进行,并在配置过程中始终监测工作状态,在完善的软件配合下,可纠正如上电次序导致配置不正常等错误。因此,采用此方法对fpga进行配置,性能将优于configurationeprom方式。与configurationeprom方式相比本设计有如下优点:1.降低硬件成本:省去了fpga专用eprom的成本,而几乎不增加其他成本。以altera的10k系列为例,板上至少要配一片以上的epc1,每片epc1的价格要几十元,容量1m位。提供1mb的存储空间,对于大部分单板来说(如860系统的单板),是不需要增加硬件的。即使增加1mb存储空间,通用存储器也会比fpga专用eprom便宜。2.可多次编程:fpga专用eprom几乎都是otp,一旦更换fpga版本,旧版本的并不便宜的eprom只能丢弃。如果使用本设计对fpga配置,选用可擦除的通用存储器保存fpga的编程数据,更换fpga版本,无须付出任何硬件代价。这也是降低硬件成本的一个方面。3.实现真正"现场可编程":fpga的特点就是"现场可编程",只有使用cpu对fpga编程才能体现这一特点。如果设计周全的话,单板上的fpga可以做到在线升级。4.减少生产工序:省去了对"fpga专用eprom"烧结的工序,对提高生产率,降低生产成本等均有好处。对于双面再流焊的单板,更可省去手工补焊dip器件的工序。尽管在装置的上下文中已描述了一些方面,但明显的是这些方面也表示对应方法的描述,其中块或设备与方法步骤或方法步骤的特征相对应。类似地,在方法步骤的上下文中所描述的各方面也表示对应的块或项目或者对应装置的特征的描述。可以通过(或使用)如微处理器、可编程计算机、或电子电路之类的硬件装置来执行方法步骤中的一些或所有。可以通过此类装置来执行最重要的方法步骤中的某一个或多个。所述实现可以采用硬件或采用软件或可以使用例如软盘、dvd、蓝光、cd、rom、prom、eprom、eeprom、或闪存之类的具有被存储在其上的电子可读控制信号的数字存储介质来执行,所述电子可读控制信号与可编程计算机系统配合(或能够与其配合)以使得执行相应的方法。可以提供具有电子可读控制信号的数据载体,所述电子可读控制信号能够与可编程计算机系统配合以使得执行本文所描述的方法。所述实现还可以采用具有程序代码的计算机程序产品的形式,当计算机程序产品在计算机上运行时,程序代码进行操作以执行该方法。可以在机器可读载体上存储程序代码。以上所描述的仅是说明性,并且要理解的是,本文所描述的布置和细节的修改和变化对于本领域技术人员而言将是明显的。因此,意在仅由所附权利要求的范围而不是由通过以上描述和解释的方式所呈现的特定细节来限制。当前第1页12