基于SRAM(静态随机存储器)的可重配置PLD(可编程逻辑器件)的出现,为系统设计者动态改变运行电路中PLD的逻辑功能创造了条件。PLD使用SRAM单元来保存配置数据。这些配置数据决定了PLD内部的互连关系和逻辑功能,改变这些数据,也就改变了器件的逻辑功能。由于SRAM的数据是易失的,因此这些数据必须保存在PLD器件以外的EPROM、EEPROM或FLASH ROM等非易失存储器内,以便使系统在适当的时候将其下载到PLD的SRAM单元中,从而实现在电路可重配置ICR(In-Circuit Reconfigurability)。
本文介绍笔者设计的PLD ICR控制电路,它不但线路结构简洁、开发容易、体积小、成本低,并且在图2介绍的ICR控制电路中,其存储PLD配置数据的FLASH存储器采用并行总线,交换速度较快。然而PLD配置数据较大,通常都在数十千字节以上。如何提高图2介绍的ICR控制电路的配置速度,使系统上电后的最短的时间内完成配置而进入正常工作状态,软件设计上的一个重点。
PS配置时序图
1 基于SRAM的可重配置CPLD的结构与原理
早期的可编程逻辑器件大多采用紫
外线可擦除只读存储器(EPROM)和电可擦除只读存储器(EEPROM)方式。如GAL系列、EPF7064、EPF7128等。由于其结构简单、规模小,只能完成简单数字逻辑功能。此后,出现了一类结构上稍复杂的基于SRAM存储器的可编程芯片,即复杂可编程逻辑器件(CPLD),它能完成各种数字逻辑功能。
采用这些结构的可编程逻辑器件有ALTERA公司的FLEX、ACEX、APEX系列,XILINX公司的Spartan、Virtex系列。多年来,ALTERA公司一直致力于CPLD的开发。近几年,该公司又推出了很有竞争力的CPLD器件,即灵活的逻辑单元阵列的FLEX(Flexible Logic Element Matrix)系列产品。相对于其它一些厂家的FPGA产品来说,ALTERA公司的FLEX系列产品有其独特之处。这主要表现在高密度、在线配置功能、高速度和连续式布线结构等方面。
查找表LUT(Look-Up-Table)是基于SRAM的可重配置PLD的一个重要组成部分,LUT本质上就是一个RAM。目前CPLD中多使用4输入的LUT,所以每一个LUT可以看成个有4位地址线的16×1bit的RAM。当用户通过GDF原理图或VHDL语言描述了一个逻辑电路后,CPLD开发软件会自动计算逻辑电路的所有可能结果,并把结果事先存入查找表。这样,当多信信号进行逻辑运算时就等于输入一个地址进行查表,找出地址所对应的内容,然后将其输出即可。
硬件电路原理图
2 可编程逻辑器件的配置原理
首先在开发软件MAX+PLUS II的ASSIGN菜单下选择将要采用的基于SRAM的器件名称。经过编译、优化、逻辑综合、仿真等步骤达到设计要求后,软件会自动产生一个编程文件(扩展名为.SOF文件)。对于基于SRAM工艺的可编程逻辑器件(如ALTERA的所有FLEX、ACEX、APEX系列,XILINX的Sparten、Vertex系列),由于SRAM存储器的特点,掉电后数据会消失,因此在调试期间可以采用并口ByteblasteMV下载电缆多次重复配置PLD器件。当电路设计成功,调试完成后,需要将配置数据烧写固化在一个由ALTERA生产的专用EEPROM(如EPC1441)中。上电时,由这片配置EEPROM先对PLD加载数据,几十毫秒后,PLD即可正常工作。
CPLD器件的工作状态分为三种:首先是上电配置状态(Configuration Mode),将编程的数据装入CPLD器件的过程,也可称之为构造;然后是初始化状态(Initialization Mode),在配置完成后,CPLD器件复位内部各类寄存器,让I/O引脚为逻辑器件正常工作做准备;最后是用户状态(User Mode),指电路中CPLD器件正常工作时的状态。
ALTERA公司具有ICR功能的PLD器件有FLEX8000、FLEX10K、APEX和ACEX系列,它们的配置方式可分为PS、PPS和JTAG(Joint Test Action Group)等方式。PS方式因PLD与配置电路的互连最简单,对配置时钟的最小频率没有限制而应用最广泛,因此在ICR控制电路中通常采用PS配置方式来实现ICR功能。
被动串行(PS)配置方式:在该配置方式下,由ByteblasteMV下载电缆产生一个由低到高的跳变送到nCONFIG引脚脚复位PLD,然后将配置数据送到DATA0引脚,直到CONF_DONE引脚变为高电平。图1是PS配置方式的时序图。CONF_DONE变成高电平后,DCLK必须多余十个周期来初始化该器件。器件的初始化由下载电缆自动执行。在PS方式中没有握手信号,所以配置时钟的工作频率必须低于10MHz。在多器件PS配置方式中,第一片PLD的nCEO引脚级联到下一片PLD的nCE引脚。在配置完第一个器件后,nCEO输出为低,使第二个PLD器件的nCE有效,开始对第二块器件进行配置。
3 用WINBOND78E58单片机配置可编程逻辑器件
用单片机配置可编程逻辑器件与上述PS配置方式原理一致,只需模拟PS配置方式中DATA0、DCLK、nCONFIG、CONF_DONE、nSTATUS引脚的配置时序,将配置数据串行移入PLD。配置引脚的功能如表1所示。
3.1 硬件设计
用单片机配置PLD,可以使用普通输入输出口或单行口。使用普通I/O口(如P1口),向PLD发送1Bit数据至少需要4个指令周期。一个指令给DATA0赋值,两个指令产生DCLK时钟,一个指令移位取数据。如果晶振为fosc,一个指令周期为12/fosc,因此它的下载速率为fosc/48。然而如果采用串行口方式0,其下载速率提高为fosc/12。考虑到PLD配置文件数据比较大,通常都在数十千字节以上(其配置文件大小如表2),为了加快配置速度,并适合各种不同规模的PLD,采用了WINBOND78E58单片机。
配置引脚的功能
该单片机外接晶振最大频率为40MHz,它在串行口方式0下波特率可设置为fosc/4。另外通过设置特殊功能寄存器CKCON的MD0、MD1、MD2三位,可以将MOVX、MOVC等指令周期缩短至2个机器周期。与普通单片机相比,可使配置时间大为缩短。WINBOND78E58单片机内部拥有32KB FLASH ROM.由配置文件数据表2可知,只需一片单片机就可以对EPF10K20系列以下的PLD进行配置了。本系统中使用了一片APEX20K300E,因此在硬件电路设计中,扩展了一片WINBOND29C040 FLASH存储器(容量为512KB),其电路如图2。DATA0与RXD、DCLK与TXD、nCONF与P15、CONFIG_DONE与P16、nSTATUS与P17分别相连。
3.2 软件设计
在软件编程时,使用了串行口移位寄存器输入输出方式。本系统只需用到输出方式,串行数据通过RXD引脚输出,而
在TXD引脚输出移位时钟。当一字节数据写入串行数据缓冲器SBUF时,就开始发送。在此期间,发送控制器送出移位信号,使发送移位寄存器的内容右移一位,直至最高位(D7位)数字移出后,停止发送数据和移位时钟脉冲。RXD、TXD时序如图3。由图3可知,它可以用来模拟配置时序。发送完一字节数据后,硬件置发送标志位TI为1,向CPU申请中断。若CPU响应中断,则从0023H单元开始执行串行中断服务程序。 为了提高配置速度,单片机程序用汇编语言编写。单片机上电后使nCONFIG脚由低到高复位待配置PLD;当判断到nSTATUS为高后,开始从外部FLASH存储器取数据串行移位。配置过程中,查询CONF_DONE。一旦为高,配置完成,但还要送40个DCLK脉冲,PLD才能进入用户工作状态。
RXD
用户设计PLD程序经MAXPLUS II或QUARTUS编译后将产生后缀后为.sof的SRAM目标文件。该文件含有除配置数据以外的控制字符,不能直接写入到PLD中去,需要利用软件的编程文件转换功能将文件转换成.rbf(Raw Binary File)十六进制文件。把.rbf文件烧写到存储器中,单片机通过MOVX指令读入后,串行移位到PLD。
部分asm语言源程序如下:
NConFIG BIT P1.5
ConFDONE BIT P.6
NSTATUS BIT P1.7
ORG 000h
……
CLR SM0
CLR SM1 ;SM0,SM1为0,串口工作于方式0
CLR SM2 ;串口波特率为fosc/4
CLR REN
ANL 8EH,#0f8h ;地址8EH是CKCON单元,MD0、MD1、MD2清0
CLR EA
WJRESTART:CLR NCONFIG
SETB NConFIG ;上升沿复位PLD
WAIT:JNB NSTATUS,WAIT ;NSTATUS为高,可进行配置
WJPEIZHI:MOV P1,COUNTER3
MOV DPH,COUNTER2
MOV DPL,COUNTER1 ;配置数据大,需3个单元作地址记数
MOVX A,@DPTA
MOV SBUF,A ;串行移位
NOP
NOP ;采用填充2个空指令,正好使一个字节发送完成,可发送下一个字节
INC COUNTER1 ;地址加
MOV A,COUNTER1
JB CONFDONE,WJEND1
CJNE A,#0,WJPEIZHI
INC COUNTER2
NOV A,COUNTER2
CJNE A,#0,WJPEIZHI
INC COUNTER3
LJMP WJPEIZHI
WJEND1:MOV R0,#60
WJEND:WOV A,#55H
……
MOV SBUF,A ;由此产生40个DCLK时钟
DJNZ R0,WJEND
WERE:LJMP HERE ;配置完成,进入用户工作模式
使用OTP(One Time Programming)器件配置CPLD具有一定的冒险性,一次简单的代码更换就可能意味着更换OTP器件,并重新开始所有的程序。被动串行微处理器(Passive Serial With Processor)配置方式以EEPROM为基础,允许对这些存储器进行多次编程,所有其它芯片都无需从已装配的印制电路板上拆卸下来。高速读写周期的FLASH存储器能确保1万次编程,而且能对任何以SRAM为基础的PLD下载。该方
式除了在加电期间能承载配置数据外,还有许多方便之处。例如,用户可以将多个配置文件.rbf分区编程到外部存储器的未用区段,通过单片机读取不同存储区可以将可编程逻辑器件在线配置成多种不同的工作模式。
1756-OF4
1756-OF8
1756-OW16I
1756-PA72
1756-PA75
1756-TBCH
1756-TBNH
1757-SRM
LOGO-230RC
1746-IM16
1746-OW16
1746-P2
1747-L541
1756-BA1
1756-IB32
1756-L55M13
1756-OB32
1756-PA72/C
6ES7 307-1EA00-0AAO
6ES7 315-2AF03-0AB0
6ES7 317-2AJ10-0AB0
6ES7 321-1BL00-0AA0
6ES7 322-1BH02--0AA0
6ES7 322-1BL00-0AA0
6ES7 322-1HH01--0AA0
6ES7 331-7KB02-0AB0
6ES7 331-7KF02-0AB0
6ES7 332-5HD01-0AB0
6ES7 953-8LL00-0AA0
6ES7971-1AA00-0AA0
6SE7 216-2BD23-OXB0
VLT2822PT4B20SBR1DBF10A00C0
OP-620
621-6575
ES1-112-7MT
A03B-0801-C054
A03B-0807-C161
A06B-6114-H208
A16B-1212-022
A16B-2200-035
A16B-2200-036
A20B-2000-0170
2094-BC02-M02-S
872C-D3NP12-D4
PSR4/5A-250
3TK2804-0BB4
3TK2907-0BB4
1746-NO8I
1770-XYC
1771-A2B
1771-CD
1771-P7
1794-ASB
1794-IM8
1794-OM8
1794-TBN
OP-620
INNIS21
INNPM12
K-TFT-AN-CCFT
FERE100
SGDH-04AE
140ACI04000
140ACO02000
140DDI35300
140DDO35300
140NOE77101
N4010A
R3767CG
M2QA100L4B
140ARI03010
DDI-35300
DDO-35300
XB2-BVM3LC
FX2N-4DA
1746-IB16
1746-NI8
1746-NIO4I
1746-OA16
1746-P4
1747-L532
1756-CNBR
440R-S35001
SCXI-1000
SCXI-1166
SCXI-1327
SCXI-1600
DSO6012A
A06B-6050-H050
BC635PCI
3A0350.6
DSTC176
KL1002
KL2012
A16B-1212-0210
A16B-1212-0220
A16B-2200-0350
A16B-2200-0361
A20B-2000-0170
3CP260。60-1
6468-2-061-00
1756-DNB
TC-PRS021
GP37W2-BG41
HE693THM665
1756-CNB/D
1756-OW16I
1756-TBCH/A
140NOE77101
PPC-105T
1756-RM
1756-RMC10
1786-RG6
1786-TPS
1786-XT
A06B-0075-B003
FXM5-110A-20A
602453-59A
A06B-0075-B003
3BSC610038R1 SD822
3BSC610039R1 SD823
KPC2004 HDD,SHOCK-RESISTANT VER,ASSY
USB-STICK 4GB
5X00226G01
EVS9325-ES
EVS9327-ES
EVS9328-ES
L3MF-032/64GFOKS-G 序列号S/N:11851
FRN7.5P11S-4CX
AS-B824-016
1784PKTX
6SN1123-1AB00-0BA2
E6CP-AG5C 256 2M
MCS40A0022-5A3-4-00
140ACI03000
140ACO02000
43AP-FA45C/PB-BA
1FK7081-5AZ91-1ZZ9-Z S04 2.5KW
1FK7100-5AZ91-1ZZ9-Z S05 3.2KW
1FK7101-5AZ91-1ZZ9-Z S07 4.2KW 8.5A
KPS-600/20-ESC
KSD1-16
KSD1-48
开关电源
1756-CNB
1756-TBCH/A
6AV6642-0AA11-0AX1
140NOE77100
ATV312H075N4
ATV31H075N4A
PS416-BGT-410
P6153LPR-24VDC-U
OP-620
ACS510-01-017A-4
FSU8
IC693MDL655H
KJ3001X1-CA1
KJ3201X1-BA1
6DR5020-ONN01-OAAO=6DR5020-ONN00-OAAO
TWDLCAA24DRF
1757-SRM
1756-ENBT/A
FR-A740-15K-CHT
C25DND230
1/2NPT(M)/直径14*2 材质304SS
FR-8-1/8
VL/O-3-1/4
VZ-3-PK-3
140AC013000
140ACI04000
140ACO02000
140CPS11420
140CPU11302
140CRA21110
140CRP81100
140DAO85300
140DDI35300
140XBP01600
1394C-SJT22-D
KEBA-HT401
1394C-SJT22-D
A16B-2201-0480
A20B-2100-0790
GPD515C-A080 CIMR-G5U2018
C7012G1019
JZRCR-NPP01-1
3008
3503E
3625
4119A
4329
4351B
8312
D2-16ND3-2
1771-A2B
1771-A3B1
1771-ASB/D
1771-IAD/C
1771-IFE/A
1771-IXE/B
1771-OAD/B
1771-OFE2/B
1771-P4S
1771-P7/B
1771-WI
1785-L20B/C
YB-05FC1
SDCS-COM-5
SDCS-PIN-205B
6FC5501-0AB00-0AA0
1746-A13
1746-NI8
PTQ-PDPMV1
6GK1900-0AB00
1746-IB32
KL-16BT
KL-16BX
KL-2DA
SGMAS-08ACA61
2711P-T15C15D1
4WRAP6W7-04-21/24K4/M
NW-RR85-001
SGMGH-13ACA61
A06B-0202-B100
1756-A17
1756-A4
1756-CFM
1756-DNB
1756-ENBT
1756-IB32
1756-IF4FXOF2F
1756-IR6L
1756-IT6I2
1756-L61
1756-OW16I
1756-PA72
1756-PB75
1756-A10
1756-A7
1756-CNBR
1756-ENBT
1756-IB16D
1756-IF16
1756-L62
1756-L62/B
1756-OB16D
1756-OF8
1756-PB75
1756-SRM/B
1756-TBCH
1757-SRC1
1757-SRM
1784-CF64
2711P-B15C15D1/A
140DDI35300
AS-B824-016
AS-B826-032
AS-BDAP-208
AS-BDEP-216
6SE7021-0TP60
6SE7021-6ES87-2DA1
6SL3330-1TE41-5AA3
MVS-8100
IC693CPU374
53H22-KBOB1AAOAAA
IC693CPU364
IC693PWR321Z