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内部完成数据串行化;与方式③不同的是,该过程不需要外部配置时钟的驱动,但其接口更复杂,并且需要进行地址译码,增加了系统的复杂程度,一般很少采用。使用方式⑤时需要计算机的配合,无法在最终的实际系统中脱机使用,此处不予讨论。
通过上述讨论可以看出,在使用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根信号线,配置时这五根信号线都接至微处理器的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 硬件电路设计
由于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设置成输入口。
5 软件设计
配置时根据配置时序要求,首先在GPC0引脚(对应nCONFIG)产生一个负脉冲,启动配置,然后检测GPC4引脚的nSTATUS信号。NSTATUS信号正常后就在GPC2引脚(对应DCLK)上送配置时钟,在GPC1引脚(对应DATA0)上同步送出配置数据。配置数据以字节为单位从SDRAM中读出,通过移位操作以串行比特流方式从GPC1引脚送出。全部数据送出后,检测GPC3引脚(对应CONF_DONE)的状态,如为高电平说明配置成功,否则配置失败,需要重新进行配置。
程序实现使用了C语言。在GPC0引脚产生负脉冲可以通过对其先写0后写1来实现,延时使用简单的循环语句即可,其语句为
rPDATC=rPDATC&0xfffe; //*GPC0置低
for(i=0;i<150;i++); //延时15μs
rPDATC=rPDATC|0x0001|; //GPC0置高
其中rPDATC为C端口的数据寄存器。
读入某个引脚的状态并判断其高低可以使用一条语句实现,如读入GPC4的状态并判断其高低为
while(!rPDATC&0x0010));
如果GPC4为低电平,该语句就会一直此处循环,直至其变为高电平。
配置时钟通过在GPC2引脚循环置0、置1来实现,其实现语句为rPDATC=rPDATC|0x0004;//GPC2置高rPDATC=rPDATC&0xfffb;//GPC2置低
在GPC2由低变高之前,将1bit的配置数据在GPC1引脚上准备好。
如果配置过程中出错,EP20K200E将会迫使nSTATUS引脚拉低来通知S3C44B0X。在本程序中为了主加快配置速度,没有对此进行判断,而是在程序最后通过CONF_DONE信号否抬高来判断配置成功与否。如果配置出错,该信号将不会抬高,从而可以重新开始配置。