2.1 PCI9656的设计应用
在CompactPCI端,PCI 9656提供了66MHz、64bit总线应用所需信号,可依据CompactPCI规范连接,通过简单的外部电路,可实现Hot Swa p功能。
在局部总线端,采用了PCI 9656的C模式。在C模式下,PCI 9656的局部总线可配置实现三种数据传输逻辑。(1)Single cycle mode。每次传输1个数据(8/16/32bit),默认的传输模式。(2)Burst-4 mode。每次4个数据,应用Intel i960与IBM PPC401处理器时的推荐模式。(3)Continuous burst mode。多数据的连续突发传输模式,提供了最大的数据吞吐量。在传输过程中,从设备(Slave)可通过Bterm#信号停止传输过程。模式2与模式3只选其一,模式1始终可用。在数据接收卡中,采用了连续突发(Continuous burst)模式,可以有效的利用局部总线带宽。
分析接收卡的设计:局部总线端无处理器,PCI 9656在此端为主设备(Master),始终占用总线,负责逻辑控制的CPLD为从设备(Slave),始终响应PCI 9656。数据传输过程只利用了PCI 9656的Direct Slave和DMA模式,,而且不需DMA的命令模式,运行过程中数据通过FIFO单向传输,不需解码地址信号,对CPLD的控制可通过向其写命令码完成。因此,可以对PCI 9656的许多信号简化处理,只需实现如下信号的时序要求:

LD[31:0],32bits数据信号。
ADS#,总线操作的开始标志。
Blast#,突发传输的结束标志。
LW/R#,写/读信号。
Wait#,主设备暂停传输信号,信号无效标志主设备正常。
Ready#,从设备操作完成信号,信号有效标志从设备正常。
EOT#,数据传输异常中止信号,用于FIFO溢出或空时中断数据传输。
Lint#,中断信号输入,用于引起CompactPCI总线端的中断。
LRST#,局部总线端重置。
信号经简化后,在正常的读写操作中,只需要处理ADS#、Blast#、LW/R#、Wait#、Ready#与数据的逻辑关系,Single cycle可认为是Continuous burst的特例,从而将两种模式下的逻辑时序统一处理。正常操作中,ADS#、Blast#、Wait#、Ready#需满足的逻辑关系如图2所示:
图2中,ADS#、Blast#、Wait#信号由PCI 9656驱动,LW/R#(图2中未标出)也由PCI 9656驱动,在整个过程中处于低或高,标志PCI 9656对总线的读或写操作。Ready#由CPLD驱动,Data为双向信号。CPLD空闲状态时监测ADS#信号,一旦ADS#有效,则根据LW/R#转入读或写操作。读操作中,CPLD将FIFO数据读出,同时将Ready#置为有效状态,需监测Wait#,Wait#无效时,才可继续读取下一数据;写操作中,CPLD需将Ready#置为有效状态,监测Wait#,Wait#无效时,CPLD才可完成总线上数据的写入;当CPLD检测到Blast#、Wait# 、Ready#均为有效状态时,便完成最后一个数据的传输操作,转至空闲状态。
实现上述的数据传输逻辑,再加上适当的异常情况和测试转换控制,便可设计CPLD的逻辑控制模块。
2.2 MAXII EPM1270应用
MAXII系列是Altera公司的新型架构CPLD,与传统架构的CPLD相比,MAXII的功耗和成本大幅降低,资源密度和性能却显著提升,非常适用于接口间的控制协议转换。设计中采用了MAXII的EPM1270型号CPLD,其设计结构如图3所示。MAXII EPM1270内部主要分为逻辑控制、测试、FIFO三个模块:

1 FIFO采用Altera提供的IP核实现,容量可根据资源利用情况调节,使用FWFT(First Word Follow Through)模式,为CPLD提供与外部FIFO简便的接口。
2 测试模块产生测试数据,控制数据通道在真实数据源与测试数据源间切换,在测试接收卡时使用。
3 逻辑控制模块内有异常和测试控制、状态转换控制两部分,通过一个8bit寄存器进行通信。(1)寄存器控制CPLD的测试模块、状态选择,同时记录FIFO的状态变化。(2)异常和测试控制部分依据状态寄存器内容控制测试模块,监测FIFO的溢出、半满、空等状态,产生Lint#信号或通过控制寄存器传递到状态转换控制部分,使之有效EOT#,中断数据传输。(3)状态转换控制部分执行局部总线的数据读写逻辑,建立了四个状态:S0,空闲状态;S1,数据读状态;S2,寄存器读状态;S3,命令写状态。S0状态下根据LW/R#信号和寄存器内容确定向S1、S2、S3状态的转换。S1状态下读取FIFO数据,根据FIFO状态产生异常中止信号EOT#。S2状态下 读取8bit寄存器内容。S3状态下向8bit寄存器写入命令码来改写和重置其相关比特位,从而控制CPLD的测试模块,切换S1、S2状态,清空FIFO。