嵌入式系统中FPGA的被动串行配置方式
摘要:介绍一种在嵌放式系统中使用微处理器被动串行配置方式实现对FPGA配置的方案,将系统程序及配置文件存在系统Flash中,利用微处理器的I/O口产生配置时序,省去配置器件;讨论FPGA的各种配置方式及各种配置文件的使用;详述被动串行配置的时序及在嵌入式系统中实现的软硬件设计;说明本方案的优越性及应用前景。
关键词:嵌入式系统 ARM7TDMI S3C44B0X FPGA 被动串行配置
随着信息时代的到来,嵌入式系统成为继IT网络技术之后又一个新的技术发展方向。嵌入式系统以其功能强、体积小、功耗低、可靠性高以及面向行业应用的突出特征,广泛应用于各个领域。
javascript:window.open(this.src);" style="cursor:pointer;"/>
现场可编程门阵列FPGA(Field Programmable Gate Array)是一种高密度可编程逻辑器件,其逻辑功能的实现是通过把设计生成的数据文件配置进芯片内部的静态配置数据存储器(SRAM)来完成的,具有可重复编程性,可以灵活实现各种逻辑功能。FPGA的这种特性使其在现代电子系统设计中得到了广泛应用。基于SRAM工艺的FPGA是易失性的,系统掉电以后其内部配置数据将丢失,因此需要外接ROM保存其配置数据。FPGA的配置是有时序要求的,如果FPGA本身不能控制配置时序,就需要有外部配置器件来进行时序控制。以Altera公司的系列FPGA为例,其本身不能控制配置时序,就有专用的EPC系列配置器件供其使用。在含有微处理器(MPU或MCU)的系统中(如嵌入式系统),可以使用微处理器产生配置时序,将保存在系统RO风吹草动的配置数据置入FPGA。与前面一种方案相比,该方案不仅节省了成本,更缩小了系统体积。在对成本和体积敏感的系统中,该方案非常适用。
在某手持式通信设备的设计中,使用了嵌入式系统和FPGA完成了系统功能。嵌入式微处理器采用Samsung公司的ARM7TDMI系列处理器S3C44B0X;FPGA采用Alrera公司的APEX 20K系列EP20K200E,使用S3C44B0X完成了对EP20K200E的配置,取得了良好效果。本文对其实现方法予以介绍。
1 ARM嵌入式处理器S3C4480X简介
S3C44B0X是Samsung公司专为手持设备和一般应用而设计的高性价比和高性能的嵌入式处理器。其突出特点它的CPU核采用ARM公司的16/32位ARM7TDMI RISC内核,0.25μm CMOS工艺制造,主频最高可达66MHz,存储器寻址空间达256MB。由于其成本和功耗低,特别适合对成本敏感和功能敏感的应用场合,如PDA、GPS、LCD Game、E-Book等。
2 APEX 20K系列FPGA配置方式及配置文件
2.1 配置方式介绍
Altera公司的APEX 20K系列FPGA可以使用以下方式进行配;
①使用专用配置器件,如EPC16、EPC8、EPC2、EPC1、EPC1441;
②被动串行方式(PS),使用微处理器的串行步接口或ByteBlaster下载电缆;
③被动并行同步方式(PPS),使用微处理器的并行同步接口;
④被动并行异步方式(PPA),使用微处理器的并行异步接口;
⑤边界扫描方式(JTAG),使用JTAG下载电缆。
使用方式①时,需要首先使用下载电缆将计算机生成的FPGA配置文件烧入EPC配置器件中,然后由EPC配置器件控制配置时序对FPGA进行配置,一次烧写即可重复使用。使用方式②、③、④时,配置文件事先以二进制形式保存在系统ROM中,可以脱离开计算机重复使用。若使用方②、③、④时,配置文件事先以二进制形式保存在系统ROM中,可以脱离开计算机重复使用。若使用方式②,微处理器将配置数据以串行(比特流)方式送给FPGA,在配置时钟驱动下完成配置。若使用方式③,微处理器将配置数据以并行(字节)方式送给FPGA,由FPGA在其内部将并行数据转换成串行数据,该串行化的过程需要外部配置时钟的驱动。在配置时钟速率相同的情况下,方式②、③所用的配置时间几乎相同,但方式②的接口要比方式③简单,若使用方式④,微处理器仍将配置数据以并行方式送给FPGA,在FPGA内部完成数据串行化;与方式③不同的是,该过程不需要外部配置时钟的驱动,但其接口更复杂,并且需要进行地址译码,增加了系统的复杂程度,一般很少采用。使用方式⑤时需要计算机的配合,无法在最终的实际系统中脱机使用,此处不予讨论。
javascript:window.open(this.src);" style="cursor:pointer;"/>
通过上述讨论可以看出,在使用APEX 20K系列FPGA开发实际应用系统,特别是要形成某种产品时,如果系统中不含微处理器,只能使用方式①;若系统中含有微处理器,方式①、②、③、④都可以使用,但②、③、④可以发现,方式②的接口最简单,实现起来比其它两种方式都方便因而在含有微处理器的系统中得到了广泛应用,本通信系统的设计中即采用了该方式。
2.2 配置文件的使用
Altera公司的开发工具Quartus II及MAX+PLUS II可以生成多种格式的配置文件,针对不同的配置方式要使用不同格式的配置文件。设计项目编译以后会自动生成.sof文件和.pof文件。其中.pof文件在配置方式①使用专用配置器件时使用,.sof文件用于通过连接在计算机上的下载电缆直接对FPGA进行配置的场合,配置方式可以是JTAG方式或PS方式中使用ByteBlaster下载电缆的情况。基于.sof文件还可以生成.hex、.rbf和.ttf文件。.hex文件是Intel Hex格式的ASCII码文件,第三方的编程器可以使用这种格式的文件对Altera公司的配置器件进行编程。.rbf文件是二进制文件,1字节的rbf数据包含8bit的配置数据,使用时将其存入ROM中。微处理器人ROM使用这种格式的文件。.ttf文件是列表文本文件,.rbf文件的ASCII码存储形式,并且各个字节之间用逗号进行了分隔。如果系统中有其它程序,可以将.ttf文件作为系统程序源代码的一部分,和其它程序一起编译。本系统中采用了.ttf文件作为系统程序的一个头文件使用,其配置数据以数组形式被配置程序使用。对于某种特定型号的FPGA,无论其设计有多复杂,在相同版本的开发工具下生成的配置文件大小是一样的。
3 被动串行方式(PS)配置时钟
使用PS方式对FPGA进行配置时,只需要5根信号线,其配置时序如图1所示。
配置时这五根信号线都接至微处理器的I/O上,其中nCONFIG、DCLK、DATA0设置成输出态,由微处理器对FPGA进行操作;nSTATUS/CONF_DONE设置成输入态,由微处理器对FPGA的配置状态进行检测。微处理器首先在nCONFIG信号线上产生一个宽度大于8μs的负脉冲,然后开始检测nSTATUS信号的状态。FPGA检测到nCONFIG信号的下降沿后会迫使nSTATUS和CONF_DONC信号拉低,并且在nCONFIG信号重新抬高之间保持为低电平。NCONFIG信号抬高后,nSTATUS将在1μs之内随之抬高,微处理器检测到此变化后就认为FPGA已经做好准备可以开始配置。配置第一个上升沿与nSTATUS的上升沿之间要求至少有1μs的时间间隔。由于配置数据是与配置上升沿同步的,在配置时钟的上升沿来之间应当将1bit的配置数据在数据线上准备好,配置数据按低位在先高位在后的顺序从数据线上送出。当全部配置数据送出以后,CONF_DONE信号将被抬高,表明配置结束。微处理器检测到CONF_DONE信号抬高,就结束配置过程。如果配置过程中出错,FPGA将迫使nSTATUS信号拉低,微处理器检测到此变化将重新开始配置。
配置结束以后,FPGA还需要个初始化的过程才能进入正常工作状态。在Quartus II或MAX+PLUS II生成的配置文件中已经包含了额外的初始化比特,只需将配置文件 数据在配置时钟的同步下全部送出就已经完成了初始化,用户不必另外加以考虑。
4 硬件电路设计
系统的硬件电路设计如图2所示。
由于S3C44B0X内部只有8KB的SRAM作CPU的Cache使用,无法满足系统程序存储及运行的需要,因此需要外挂存储器作为程序保存和运行的空间。系统中使用1片2MB的Flash作为程序存储器,系统的整个应用程序,包括EP20K200E配置程序及配置文件都固化于其中保存。另外使用1片9MB的SDRAM作为系统程序运行空间,S3C44B0X、Flash和SDRAM构成了一个最小的嵌入式系统。Flash、SDRAM与S3C44B0X的连接方法可参考S3C44B0X用户手岫。
使用PS配置地需要将EP20K200E的MSEL0、MSEL1、nCE三个引脚接地,然后将EP20K200E的nCONFIG、DATA0、DCLK、CONF_DONE、nSTATUS引脚分别接至S3C44B0X的GPC0、GPC1、GPC2、GPC3、GPC4引脚上。S3C44B0X的I/O口均为多功能口,可以根据应用的需要通过内部寄存器将其设置成输入口、输出口或特别功能口。此处将GPC0、GPC1和GPC2设置成输出口,将GPC3和GPC4设置成输入口。
javascript:window.open(this.src);" style="cursor:pointer;"/>
5 软件设计
配置时根据配置时序要求,首先在GPC0引脚(对应nCONFIG)产生一个负脉冲,启动配置,然后检测GPC4引脚的nSTATUS信号。NSTATUS信号正常后就在GPC2引脚(对应DCLK)上送配置时钟,在GPC1引脚(对应DATA0)上同步送出配置数据。配置数据以字节为单位从SDRAM中读出,通过移位操作以串行比特流方式从GPC1引脚送出。全部数据送出后,检测GPC3引脚(对应CONF_DONE)的状态,如为高电平说明配置成功,否则配置失败,需要重新进行配置。配置程序流程如图3所示。
程序实现使用了C语言。在GPC0引脚产生负脉冲可以通过对其先写0后写1来实现,延时使用简单的循环语句即可,其语句为
rPDATC=rPDATC&0xfffe; //*GPC0置低
for(i=0;i<150;i++); //延时15μs
rPDATC=rPDATC0x0001; //GPC0置高
其中rPDATC为C端口的数据寄存器。
读入某个引脚的状态并判断其高低可以使用一条语句实现,如读入GPC4的状态并判断其高低为
while(!rPDATC&0x0010));
如果GPC4为低电平,该语句就会一直此处循环,直至其变为高电平。
配置时钟通过在GPC2引脚循环置0、置1来实现,其实现语句为rPDATC=rPDATC0x0004;//GPC2置高rPDATC=rPDATC&0xfffb;//GPC2置低
在GPC2由低变高之前,将1bit的配置数据在GPC1引脚上准备好。
如果配置过程中出错,EP20K200E将会迫使nSTATUS引脚拉低来通知S3C44B0X。在本程序中为了主加快配置速度,没有对此进行判断,而是在程序最后通过CONF_DONE信号否抬高来判断配置成功与否。如果配置出错,该信号将不会抬高,从而可以重新开始配置。
本国程序、配置文件和系统的其它程序统一编译成一个应用程序存在Flash中,系统加电以后首先运行位于Flash 0地址的引导程序,引导程序完成CPU的初始化,然后将应用程序从Flash复制到SDRAM中,从SDRAM中开始运行。在本系统中使用了实时多任务操作系统(RTOS),在软件设计时将配置程序放在第一个运行的任务中,保证在开机手首先完成FPGA配置。配置所需要的时间与微处理器的运行速度及配置文件的大小有关。在本系统中,微处理器运行在64MHz,配置文件的二进制形式有240KB,配置所需的时间在3s左右。
本文所讨论的在嵌入式系统中利用微处理器实现对FPGA配置的方案不仅在系统成本上有优势,而且在系统体积上也有优势,已经在实际系统中得到了应用,取得了良好效果。本方案虽然是针对APEX 20K系列FPGA的,但对于Altera公司其它系列的FPGA产品,只需稍做改动即可加以应用。另外,由于FPGA具有可重复配置的灵活性,可以在系统中包含多个不同功能的配置文件,使用时根据功能需要进行相应的配置,实现了一机多能。这一点在日益兴起的软件无线电系统中具有广阔的应用前景。