摘要:介绍基于SRAM的可重配置PLD的原理;通过对多种串行配置的比较,提出单片机与存储器串行配置方式;从系统复杂度、可靠性和经济性等方面进行比较和分析。
关键词:复杂可编程逻辑器件 静态随机存储器 被动串行
引言
基于SRAM(静态随机存储器)的可得配置PLD(可编程逻辑器件)的出现,为系统设计者动态改变运行电路中PLD的逻辑功能创造了条件。PLD使用SRAM单元来保存配置数据决定了PLD内部的互连和功能。改变这些数据,也就改变了器件的逻辑功能。由于SRAM的数据是易失的,因此,这些数据必须保存在PLD器件以外的EPROM、EEPROM或Flash ROM等非易失存储器内,以便使系统在适当的时候其下载到PLD中,从而实现在线可重配置ICR(In-Circuit Reconfigurability)。
此PLD ICR控制电路,不但线路结构简洁、开发容易、体积小、成本低,而且在ICR控制电路中,存储PLD配置数据的Flash存储器采用并行总线,交换速度快。PLD配置数据比较大,通常都在数十KB以上,因此,如何提高ICR控制电路的配置速度,使系统上电后在最短的时间内完成配置而进入正常工作状态,将是软件设计上的一个重点。
1 基于SRAM的可得配置PLD/FPGA的结构与原理
早期的可编程逻辑器件只有可编程只读存储器(PROM)、紫外线可擦除只读存储器(EPROM)和电可擦除只读存储器(EEPROM)3种。由于结构的限制,它们只能完成简单的数字逻辑功能。其后,出现了一类结构上稍复杂可编程芯片,即可编程逻辑器件(PLD),能够完成各种数字逻辑功能。FLEX以上的器件都以SRAM为基础,使其维持状态的功耗很低,并且可进行在线配置。
采用这种结构的PLD芯片有Altera的FLEX、ACEX、APEX系列,Xilinx的Spartan、Virtex系列。多年来,Altera公司一直致力于EPLD(Erasable Programmable Logic Device)的开发。近几年,该公司又向市场上推出了很有竞争力的CPLD器件,即FLEX(Flexible Logic Element Matrix)系列产品。相对于其他一些厂家的FPGA产品来说,Altera公司的FLEX系列产品有其独特之处,这主要表现在高密度、在线配置功能、高速度和连续式布线结构等方面。
查找表LUT(Look-Up-Table)是基于SRAM的可重配置PLD的一个重要组成部分。本质上就是一个RAM。目前,FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16×1位的RAM。当用户通过GDF原理图或VHDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM。这样,每输入1个信号进行逻辑运算就等于输入1个地址进行查表,找出地址对应的内容,然后输出即可。
下面是一个4输入与门的例子,实际逻辑电路LUT的实现方式如图1所示。
2 可编程逻辑器件的配置原理
当电路设计者利用MAX+PLUSII等软件工具将电路输入,并且经过编译、优化、仿真,从波形上看已经达到了最初的要求以后,就应当考虑CPLD器件的系统配置与下载方法了。在PLD/FPGA开发软件中完成设计以后,软件会自动产生一个最终的编程文件(扩展名为pof文件)。如何将编程文件烧到PLD芯片中去呢?对于基于查找表技术、SRAM工艺的FPGA(如Altera的所有FLEX、ACEX、APEX系列,Xilinx的Sparten、Vertex),由于SRAM工艺的特点,掉电后数据会消失,因此调试期间可以用ByteblasteMV并口下载电缆配置PLD器件。调试完成后,需要将数据固化在一个专用的EEPROM中(用通用编程器烧写)。上电时,由这片配置EEPROM先对PLD加载数据,几十ms后,PLD即可正常工作(亦可由CPU配置PLD)。
CPLD器件的工作状态分为3种:一种称之为用户状态(usermode),指电路中CPLD器件正常工作时的状态;一种是配置状态(configuration),将编程数据装入CPLD器件的过程,也可称之为构造;第3种就是初始状态(initialization),CPLD器件复位各类寄存器,让I/O引脚为逻辑器件正常工作准备。
Altera公司生产的具有ICR功能的PLD器件有FLEX8000、FLEX10K、APEX和ACEX系列。它们的配置方式可分为PS、PPS、PSA和JTAG等4种方式。PS方式(被动串行配置方式)因PLD与配置电路的互连最简单,对配置时钟的最小频率没有限制而应用最广泛,因此,在ICR控制电路中也采用PS配置方式来实现ICR功能。
在PS方式中,由BitBlaster.FLEX下载电缆或微处理器产生一个由低到高的跳变送到NCONFIG引脚,然后微处理器或编程硬件将配置数据送到DATA0引脚。该数据锁存至CONF_DONE变为高电平。它是先将每字节的最低位LSB送到FLEX10器件。图2是PS配置方式的时序图。CONF_DONE变成高电平后,DCLK多余的10个周期来初始化该器件,器件的初始化是由下载电缆自动执行的。在PS方式中没有握手信号,所以,配置时钟的工作频率必须低于10MHz。在多器件PS方式中,第1片FLEX10K的nCEO引脚级连到下一片FLEX10K的nCE引脚。在配置完第1个器件后,nCEO输出为低,使第2个FLEX10K器件的nCE有效,开始对第2块器件进行配置。
3 用WINBOND 78E58单片机配置可编程逻辑器件
用单片机方式配置可编程逻辑器件与上述PS配置方式一致,只需模拟PS配置方式中DATA0、DCLK、NCONFIG、CONFIG_DONE、NSTATUS引脚的配置时序,将配置数据串行移入PLD。配置引脚的功能如表1所列。
表1 配置引脚功能说明
DATA0 | 输出 | 配置数据 |
DCLK | 输出 | 配置时钟 |
NCONFIG | 输出 | 器件复位脚(该信号线的上升沿使配置开始) |
CONFIG_DONE | 输入 | 状态位(在配置完成后,该信号线为高) |
NSTATUS | 输入 | 状态位(如果该信号线为低,表明在配置过程中出现错误,需重新配置) |
以下是硬件和软件设计。
采用单片机来配置PLD,可以使用普通输入/输出口或串行口。使用普通I/O口(如P1口),要向PLD发送1位数据至少需要4个指令周期:1个指令移位取数据。如果晶振为fosc,1个指令周期为12/fosc,因此它的下载速率为fosc/48。然而,如果采用串行口方式0,其下载速率提高fosc/12。考虑到PLD配置数据比较大,通常都在数十KB以上,其配置文件大小如表2所列。
表2 各种CPLD配置文件大小
器件型号 | 配置数据大小/B | 配置文件大小/KB |
EP20K1000E | 8 938 000 | 1 02 |
EP20K600E | 5 564 000 | 680 |
EP20K400E | 3 878 000 | 474 |
EP20K200E | 1 950 000 | 238 |
EP20K100 | 985 000 | 121 |
EPF10K100E | 1 336 000 | 164 |
EPF10K70 | 892 000 | 109 |
EPF10K40 | 498 000 | 61 |
EPF10K30 | 376 000 | 46 |
EPF10K20 | 231 000 | 29 |
EPF10K10 | 118 000 | 15 |
注:配置文件大小由.rbf文件决定。
因此,为了加快配置速率和适合各种不同规模的PLD配置,我们采用了WINBOND77E58单片机。该单片机外接晶振最大频率为40MHz,它在串行口方式0下波特率可设为fosc/4。
另外通过设置特殊功能寄存器CKCON的MD0、MD1、MD2三位,可以将MOVX、MOVC等指令周期缩短至2个机器周期,与51系列单片机相比,可使配置时间大为缩短。WINBOND77E58单片机内部拥有32K Flash ROM,由配置文件数据表1可知,只需1片单片机就可以对EPF10K20系列以下的PLD进行配置了。系统中使用了1块EPF20K300E,因此在硬件电路设计中,扩展了1片WINBOND 29C040 Flash存储器(容量为512KB),其电路如图3所示。DATA0与RXD、DCLK与TXD、NCONFIG与P15、CONFIG_DONE与P16、NSTATUS与P17分别相连。
在软件编程时,使用了串行口工作方式0。该方式为移位寄存器输入/输出方式。我们只需用到输出方式,串行数据通过RXD引脚输出,而在TXD引脚输出移位时钟,作移位脉冲输出端。当1个字节数据写入串行数据缓冲器SBUF时,就开始发送。在此期间,发送控制器送出移位信号,使发送移位寄存器的内容右移1位,直至最高位(D7位)数字移出后,停止发送数据和移位时钟脉冲。发送完1字节数据后,硬件置发送标志位TI为1,就向CPU申请中断。若CPU响应中断,则从0023H单元开始执行串行口中断服务程序。
方式0发送或接收完8位数据后由硬件置位发送中断标志TI或接收中断标志RI,但CPU响应中断请求转入中断服务程序时并不清TI或RI。因此,中断标志TI或RI必须由用户在程序中清0。单片机程序用KEIL C51编写较简单,串行口采用查询方式,CPU上电后,关闭串口中断。然后使NCONFIG脚由低到高复位等配置的PLD,接着当判断到NSTATUS为高后,开始从ROM中取数串行移位。配置过程中,查询NCONF_DONC,一旦为高,配置就完成;但还要送40个DCLK脉冲,PLD才能时入用户工作状态。
用户设计的PLD程序经MAXPLUS或QUARTUS的编译后将产生1个后缀为.sof的SRAM的目标文件。该文件含有除配置数据以外的控制字符,不能直接写入到PLD中去,需要利用软件的编程文件转换功能,将.sof(Sram Object File)文件生成一个后缀为.ttf(Tabular Text File)的表格文本文件或.rbf(Raw Binary File)十六进制文件。在用KEIL C51进行编程时,选用.rbf文件,将配置数据编程到WINBOND 29C040存储器中。CPU通过MOVX指令读入后,串行移位到PLD。
部分C语言源程序如下:
#define DATA0 RXD
#define DCLK TXD
#define NCONFIG P15
#define CONFIG_DONE P16
#define NSTATUS P17
#define CONFIG_DATA XBYTE[0x0000] //定义外部存储器端口地址
uchar XDATA *ram; //定义一个指向存储器的指针
void main(void)
{ uchar data counter;
EA=0;
SM0=0; //将串行口设置为方式0
SM1=0;
SM2=0; //串行移位波特率设置为fosc/4
REN=0; //串行口禁止接收
CKCON=CKCON&0X0F8; //将MOVX指令设置为2个机器周期
NCONFIG=0;
delay_long(100);
NCONFIG=1; //NCONFIG上升沿复位
WHILE(NSTATUS= =0){;} //NSTATUS为高开始配置数据,否则等待
ram=CONFIG_DATA; //将指针指向存储器首地址
for(;CONFIG_DONE= =0;ram++) //CONFIG_DONE为高配置结束,否则地址加1
{SUBF=*ram; //从外部存储器取数据,以方式0发送
while(TI= =0){;}
TI=0;
}
for(counter=0,counter<40;counter++)
{SBUF=0xFF; //向串口发一些字节,使DCLK产生40个脉冲
while(TI= =0){;}
TI=0;
}
while(1) {;} //配置结束,PLD进入用户工作模式
}
4 总结
利用可重复配置存储器缩短CPLD/FPGA应用开发时间。使用OTP(One Time Programming)器件配置CPLD具有一定的冒险性,一次简单的代码更换就可能意味着更换OTP器件,并重新开始所有的程序。被动串行微处理器配置方式是以EEPROM为基础的,允许对这些存储器进行许多次的编程(如果需要的话),所有其它芯片都无需从已装配的印制电路板上拆卸下来。高速读写周期的Flash存储器能确保1万次编程,而且能对任何以SRAM为基础的PLD下载。这些器件降了在加电期间能承载配置数据外,还有许多方便之处。例如,用户可以将多个配置文件.rbf分区编程到该存储器的未用区段,通过单片机读取不同存储区可以将可编程逻辑器件配置成多种工作模式。
上一篇:高精度微功耗数据采集系统设计与应用
下一篇:基于IIC1.0的时钟芯片应用程序设计