80C186XL16位嵌入式微处理器是Intel公司在嵌入式微处理器市场的上导产品之一,已广泛应用于电脑终端、程控交换和工控等领域。在该嵌入式微处理器片内,集成有DRAMRCU单元,即DRAM刷新控制单元。RCU单元可以自动产生DRAM刷新总线周期,它工作于微处理器的增益模式下。经适当编程后,RCU将向将处理器的BIU(总线接口)单元产生存储器读请求。对微处理器的存储器范围编程后,BIU单元执行刷新周期时,被编程的存储器范围片选有效。
存储器是嵌入式计算机系统的重要组成部分之一。通常采用静态存储器,但是在系统需要大容量存储器的情况下,这种方式将使成本猛增。如果采用DRAM存储器,则可以大幅度降低系统设计成本;但DRAM有复杂的时序要求,给系统设计带来了很大的困难。
为了方便地使用DRAM,降低系统成本,本文提出一种新颖的解决方案:利用80C186XL的时序特征,采用CPLD技术,并使用VHDL语言设计实现DRAM控制器。
一、80C186XLRCU单元的资源
80C186XL的BIU单元提供20位地址总线,RCU单元也为刷新周期提供20位地址总线。80C186XL能够产生刷新功能,并将刷新状态编码到控制信号中。
嵌入式系统中DRAM控制器的CPLD解决方案
图1是RCU单元的方框图。它由1个9位递减定时计数器、1个9位地址计数器、3个控制寄存器和接口逻辑组成。当RCU使能时,递减定时计数器每一个CLKOUT周期减少1次,定时计数器的值减为1时,则产生刷新总线请求,递减定时计数器重载,操作继续。刷新总线周期具有高优先级,旦80C186XL总线有空,就执行刷新操作。
RCU单元的方框图
设计者可将刷新总线周期看成是“伪读”周期。刷新周期像普通读周期一样出现在80C186XL总线上,只是没有数据传输。从引脚BHE/RFSH和A0的状态可以判别刷新周期,如表1所列。刷新总线周期的时序要求如图2所示。
刷新周期的引脚状态
表1刷新周期的引脚状态
刷新总线周期的时序要求
二、80C186XLDRAM控制器的设计与运行
DRAM存在着大量、复杂的时序要求,其中访问时间的选择、等待状态以及刷新方法是至关重要的。DRAM控制器必须正确响应80C186XL的所有总线周期,必须能将DRAM的部周期和其它访问周期分辨出来,其访问速度必须足够快,以避免不必要的等待周期。
在设计时,我们采用XC95C36-15CPLD[2]以及4Mbits的V53C8258[3]DRAM作范例。15ns的CPLD,速度相对较高,价格比较便宜。用它设计成的DRAM控制器允许80C186XL的工作速度高达20MHz,并且XC95C36有异步时钟选择项。这种特性对本设计有很大的好处。
图3是80C186XLDRAM控制器和存储器的功能框图。
80C186XLDRAM控制器和存储器的功能框图
DRAM控制器由80C186XL状态信号S2、S1和S0的解码来检测总线的开始、类型和结束。这些状态线是在CLKOUT的上升沿开始有效,在CLKOUT的下降沿失效的。DRAM控制器发出的RAS和CAS信号应该在CLKOUT的下降沿同时有效,行列地址应该在CLKOUT上升沿附近提供。
DRAM控制器应该在CLKOUT的两个沿都应能正常操作。通过启用XC95C36的异步时钟选择项,每个XC95C36宏单元可以从可编程与阵列获得时钟。DRAM控制器使用80C186XL的CLKOUT信号作时钟输入。
DRAM控制器主要由两个相互联的状态机构成。这两个状态机,使得DRAM的控制与80C186XL是否进行等待状态无关。状态机A和地址多路控制信号(MUX)在CLKOUT的上升沿锁存。状态机B和RAS及CAS的逻辑在CLKOUT的下降沿锁存。DRAM控制器完整的VHDL语言的源代码可Email给cnhsx@sina.com索取。
DRAM控制器的状态图如图4所示,状态机A和B的起始条件分别是A0和B0。状态机A初始化DRAM控制器的序列,状态机B终止该序列。
DRAM控制器的状态图
在T2的下降沿,RAS逻辑采样状态机A的状态,锁存的地址线和总经状态信号。如果状态机A在A1状态(存储器读、写或刷新周期)并且总线周期为DRAM使用,则XC95C36插入RAS信号。
在T2的上升沿,状态机A也采样锁存的地址线。如果总线周期被DRAM占用,状态机A将从状态A1转移到A2,否则状态机A转换到A3。至此控制转移到状态机B。MUX逻辑采样RAS和BHE引脚的状态。如果RAS有效(指示DRAM在访问),并且总线周期下是刷新周期,XC95C36将插入MUX。MUX在行列地址之间切换,以便进行DRAM的读写操作。
在T3的下降沿,状态机B采样状态机A。如果状态机A处于状态A2(DRAM访问)或状态A3(存储器读或写,但不是DRAM访问),状态机B从状态B0转到B1。如果总线周期是一个DRAM访问周期,XC95C36继续保持RAS有效。CAS逻辑采样MUX的状态、锁存地址A0、BHE和总线周期状态。如果MUX有效(指示DRAM读或写),并且访问低字节,则XC95C36插入LCAS;如果MUX有效,并且微处理器访问高字节,XC95C36插入UCAS。DRAM读访问和DRAM刷新访问不同之处在于:对刷新来说,不需要MUX、UCAS和LCAS。
在T3的上升沿,状态机A等待状态机B中断此序列。如果MUX有效(DRAM读或写),它将保持有效。
有下一个降沿,状态机B采样总线状态信号。如果状态信号仍然有效,则此状态为等待状态Tw,状态机B保持在状态B1。如果这个状态是等待状态,并且RAS有效(DRAM访问),RAS保持有效;如果状态为等待状态,并且UCAS和LCAS有效(DRAM读或写),UCAS和LCAS保持有效。
在等待状态的上升沿,状态机A继续等待状态机B来中断此序列。如果MUX有效(DRAM读或写),则它在T3状态里保持有效。
如果微处理器状态信号无效,这个状态则是一个T4状态,状态机B从B1转到B2.如果状态是一个T4状态,并且RAS有效(DRAM访问),则RAST4状态,并且RAS有效(DRAM访问),则RAS逻辑也检测无效状态信号,并且XC95C36关闭RAS信号;如果状态是一个T4状态,并且UCAS和LCAS有效(DRAM读或写),则CAS逻辑也采样总线状态信号;如果状态信号无效,则XC95C36关闭UCAS和LCAS信号。
在T4的上升沿,状态机A采样状态机B的状态。在状态机B处于B2状态的情况下,状态机A从A2状态(DRAM访问)或A3状态(存储器读或写,但不是DRAM访问)转到A0。如果MUX有效,MUX逻辑检查RAS的状态;如果RAS无效(指示一个终止周期),XC95C36关闭MUX。
在下一个CLKOUT下降沿,状态机B无条件地从状态B2转到B0,终止DRAM序列。控制转移给状态机A。
三、80C186XLRCU单元的编程
要使DRAM正常工作,就必须对80C186XL中与DRAM刷新有关的寄存器进行正确编程。这些寄存器包括:刷新时钟间隔寄存器(RFTIME寄存器)、刷新基地址寄存器(RFbase寄存器)和刷新控制寄存器(RFCON寄存器)。
刷新时钟间隔寄存器(RFTIME寄存器)的编程公式为:Trefresh×fcpu/(Rrow+Rrows×补偿因子)。V53C8258的技术参数规定,其刷新周期Trefresh为8ms,存储阵列行数Rrows为512。考虑到RCU取得总线控制权的延时,补偿因子取0.05。因此,微处理器在fcpu=20MHz工作频率下,RFTIME寄存器的取值为:0.008×20×106/(512+512×0.05),约为297.
刷新基地址寄存器(RFbase寄存器)的编程。该寄存器的高7位,规定了DRAM容量大小。系统使用两片V53C8258情况下,RFbase的取值为00H,DRAM占用微处理器的存储空间的00000H~7FFFFH(512KB)。
最后通过将刷新控制寄存器(RFCON寄存器)的REN位置位,来启动刷新控制单元。
若使用80C186XL的节电模式,则要求重新编程这些值。在写节电控制寄存器前,必须先用要时钟分频值去除原先设置在刷新间隔寄存器的值,来重新设置寄存器。
四、结束语
现在DRAM、CPLD的价格非常低,这样设计者有机会在嵌入式计算机系统设计中考虑采用DRAM。80C186XL嵌入式微处理器广泛应用于嵌入式计算机、程控通信和工业控制系统中,具有良好的性价比,其性能和功能是80C31、80C196等单片机无法比拟的,并能充分利用大量的PC平台软件。本解决方案已在家庭电子证券产品中采用,获得了良好的经济效益和社会效益。
掌握CPLD技术和VHDL语言设计技巧是提升产品技术含量的重要途径。上述CPLD还留在一些引脚和内部资源未使用,只要设计者将VHDL源代码稍微作一些修改,就可以用这些引脚控制新增加的DRAM,提供总线准备输出信号或DMA响应信号。
如果采用引脚数和宏单元较多的XC9672或XC95108CPLD,就可以将D触发器(74HC74)、多路地址切换器(74HC157)、数据收发器(74HC245)和地址总线锁存器(74HC373)等其它分立逻辑器件的功能全部集成到CPLD中,这样系统集成度和可靠性将更加提高。
Mitsubishi FR-ABR-H1,5K
FFR-MSH-170-30A-FR1
3RF2330-1AA06
NZM3-XTVD
3RV2021-4BA15
6ES7-971-2BA00-0AA0
PKZ 2
XULH043539
NZM3-XKSAV
WAGO 282-870
DILM25-10 (RDC24)
Festo VL-5-1/8
Hahn+Kolb 7200 0800 00
M12MD1-PSC60B-S04G
ABB S 201-Z 6
4AV3000-2AB
3RV1021-4DA10
6ES7193-1CL10-0XA0
AEVU-32-20-P-A
3RV1431- 4AA10
3RV1021-4BA10
ifm efector100 IF5646
ifm efector100 IF5313
IGA3008-BPOG
3LD2264-1GP51
Schmersal BNS 180-02z
36-02/01Z-ST-R
ADVC-32-20-I-P-A 188207
RL21
LS-12-152-24V-we
Linemaster T-91-S 522-B14
Finder Relais 55.34.9.024.0090
ifm efector 200 OG5050
SS201-3Z-D3
SS101-3Z-D3
Leuze RT 318M/P-200-S12
6EP1436 -1SH01
DYSC-7-5-Y1F 548012
D500 Z22
Bosch Rexroth 5231060250 523-DA-040-0125-RED-MM-M00B-11S1W000
Pulsestarter EFS 120 15-22 W
T221716
6ES7 153-1AA03-0XB0
Siemens Simatic S5 6ES5 464-8MC11
Asco Joucomatic 54101019
WAGO 750-554
Neuberger LS 210 BA 29752/1
Block Typ DDB 400/24-7,5
QA/8080A/00
XUK9APANM12
SIEMENS Simatic S5 6ES5 931-8MD11 E-Stand 1
SIEMENS Simatic S5 6ES5 464-8MF11 E-Stand 2
2IK6GN-SW
LBCF30A-2LS
Horn 229.0500.20 K10
6ES7 193-4CB00-0AA0
6ES7 122-1BB00-0AA0
ADVU-12-75-A-P-A-S2
OJ5148
Festo LNZG-160/200 035780
BECKHOFF KL9505
ABB 1SNA146005R2300
Hilti HAS-E M20x170/68
HENGSTLER 0 866 465
Komet W28 58010 0864 BK64
MN1H-5/3G-D-1-C 159681
Siemens 3RF2320-1BA06
Siemens 3RT1025-3BB40
KN5105
6ES7422-1BL00-0AA0
Art.No.276747
NCB2-12GM40-E2-3G-3D
Rittal SZ 4138.180
NZM2/3 - XAHIV
Siemens 3RV1915
STA 13 Q 2.47/8 1N1L
Festo PEN-M5 8625
SIEN-6,5B-PS-S-L 150379
2GN5K
Omron E2K-X8ME1
6ES7 307-1BA00-0AA0
Festo ADVUL-12-5-P-A 156844 B108
Festo ADN-32-5-A-P-A 536268 A808
Omron SRT2-OD08
Phoenix Contact IBS IL 24 BK-LK/45 , 2860358
SEW EURODRIVE NF 008-443 Sach-Nr. 8257213
BES-516-324-E3-C-S4-00.3
GEMü Typ 0324
II-3015-BPKG
TV Part Vestel 17MB60-4.1 100511 / 20596635
ABB ORM 1003
OSRAM Powertronic PTo 70/220-240
3RT1036-1BB44
ifm efector100 IA5017 / IA-3010-BPOG
Bihl + Wiedemann BW 2255
6ES7193-4CA50-0AA0
Siemens 3RV1031-4DA10
6ES7 158-0AD00-0XA0
SKF H318
6ES7221-1BF22-0XA0
Siemens 6FX1121-2BB02
EPE EF3-40
6ES5 318-8MA12
FFR-CSH-080-16A-RF1
NZM2-XTVD
AVISAline AX04
NZM2-XTVD-0
FI2H06M002
IN-3004-LBPOG
6ES7 151-1AA02-0AB0
WAGO 750-519
6ES7 422-1BL00-0AA0
Siemens Simatic S5 PS951 6ES5 951-7LD12 E-STAND 05
6ES7 221-1BF00-0XA0
LC1D12BD
OMRON S8PS-05024CD
Keyence AP-31KP
Bürkert 00047492 0331 C 2,0 NBR MS NEU
6ES7421-1BL01-0AA0
LR2 D1316
Siemens 3RV2011-1JA15
Siemens 3RV1031- 4AA10
Gelbau 252.06Z
6ES7193-4CA30-0AA0
FS207
WAGO 750-514
Siemens 6ES7 193-0CB20-0XA0
MURR Elektronik 7000-17001-2920500 M12
MURR Elektronik 7000-17001-2921000 M12
ERNI 433765
AEVUZ-16-10-P-A 157212
315K-PS-C-SA2-S49-00
SMC AF30-F03
Festo K-3-M5
PKZM0-2,5
LC1D12B7
SAC-5P-M12MSB/10,0-900
INA KSR20-B0-08-10-18-15
Bosch Rexroth 0 820 005 101
Osram Quicktronic Intelligent QTi 1x26-120/220-240
3TK2824-1BB40
6EP1434-2BA00
6EP1334-1SL11
TMT127 - A31FGA
OSRAM Powertronic PTo 35/220-240
2204C3
6EP1334-1SL11
SIEMENS 6EP1 333-2AA001
TCP PP3-03BG
Siemens 5SX2202-7
MSS-E25L21-GX24-3
GV3 M40 021307
ADS Elektronik EZA 0,1-10s
LDN 510
3RT1316-2BB40
6ES7193-4CA50-0AA0
6SL3262-1AA00-0BA0
Rexroth Kugelbüchse 0610-030-00
6FX 1128 1BB00
E60121
MURR Elektronik 7000-17081-2911000 M12
MURR Elektronik 7000-13281-3491000 M12
3TX4412-1A
Eaton T0-5-8281/E
ADVU-16-60-P-A
KL2408
FESTO SMT-10-PS-SL-LED-24 -173220
SMC IS1000M-30
KL3052
K006AC-337148-01
LEUZE SFS 33-01
STAHL STAHLTRONIC SLB 2 B 2431 24V
LC1D123P7
CHANTO JS63x25 MC.JS63.025
SIEMENS 6EP1 333-2BA00
3RV1031-4HA10
FAG Kugellager 4212
6ES7 952-1AH00-0AA0
6ES5 700-2LA12
KUKA KCP1
SIEMENS 4AV2102-2AB
Siemens 4EJ 9900-OEG
6ES7 951-0KE00-0AA0
Siemens 3LD2064-1GP51
TYCO EKM 65514-000
KYOCERA 9 Stück TNMG 220404PS CA525