近年来随着计算机技术的发展,PCI局部总线已逐步取代ISA总线成为家用电脑的标准总线。PCI总线具有总线主控能力,在33 MHz时钟的工作条件下,突发传输速率峰值可达132 MB·s-1;其次它拥有独立的配置空间,可实现即插即用。这些优点使得PCI总线在数据采集、嵌入式系统和测控等领域得到广泛应用。
实现PCI总线协议目前主要有专用接口芯片和CPLD实现两种方式。专用接口芯片使用简单方便、工作稳定可靠,但往往具体应用中只用到部分功能,并且需要可编程逻辑配合使用,这样不仅浪费专用芯片的资源,而且也增加了电路板面积。采用Complex Programmable Logic Device(CPLD)实现突出的优点就在于其灵活的可编程性,这使得硬件电路的升级只需改进软件就可实现,大大提高了硬件平台的通用性;此外CPLD内部有丰富的逻辑资源,可将用户控制逻辑和PCI接口逻辑在同一块芯片中实现,这样不仅充分利用了逻辑资源,还能使系统设计显得更加紧凑。
文中主要介绍了采用CPLD实现32 bit 33 MHzPCI从设备接口的设计方法,该从设备接口模块遵从PCI规范2.2版,实现了资源的自动配置,支持突发传输,并为用户提供了一个简单的接口。设计完成后配置到一块PCI开发板上的CPLD中,系统工作稳定、可靠,验证了该设计方法的工程可行性。
1 PCI总线协议简介
一个PCI系统中,如果某设备取得了总线控制权,就称其为主设备;而被主设备选中以进行通信的设备称为从设备或目标设备。PCI接口信号线共有100根,分为系统信号、仲裁信号、接口控制信号、地址/数据线、错误报告信号、中断信号等类型,其中作为从设备至少需要47条信号线。表1中列出了从设备接口设计必需的接口信号及说明。
一个完整的PCI总线交易过程如下:要发起数据交易的设备先置REQ#,在得到仲裁器的许可(GNT#)后,通过拉低FRAME#启动一个传输交易(TRA NSACTION),并同时在AD[31:0]总线上放置地址,在CBE[3:0]总线上放置命令。PCI总线上所有的设备都对此地址译码,被选中的从设备要置DEVSEL#有效以声明自己被选中,同时对命令译码确定访问类型。在接下来的数据期中,IRDY#和TRDY#分别表示主、从设备准备好。两者同时有效,则在时钟上升沿传输数据;主从双方可以分别通过使IRDY#或TRDY#无效,在数据期中插入等待周期。数据传输结束前,主设备通过撤销FRAME#并建立IRDY#标明只剩最后一组数据要传输,并在数据传输完后放开IRDY#以释放总线控制权。从设备也可以通过有效STOP#信号来请求终止传输,从设备断开连接有RETRY、DISCONNECT和ABORT3种情况,RETRY是由于数据传输的起始字节超过16个PCI时钟周期引起的;DISCONNECT是由于在数据传输的非起始字节,从设备在8个时钟周期里不能对主设备做出反应引起的;ABORT是由于目标设备发现严重错误或者不能完成数据请求,而使STOP#和DEVSEL#都无效来终止当前进程。传输终止后总线进入空闲状态,等待下个PCI总线交易开始。
表1 PCI从设备接口信号线
表1中,#表示信号低电平有效,否则为高电平有效。IN表示标准的输入信号,OUT表示标准的输出驱动信号,T/S表示双向的三态输入/输出信号,S/T/S表示持续且低电平有效的三态信号,O/D表示漏极开路信号。
2 PCI从设备接口的CPLD实现
设计的32 bit 33 MHz PCI从设备接口的内部结构框图如图1所示,由结构图可以看出它主要由状态机、配置空间、译码模块、数据通道、奇偶校验和重试模块组成。PCI从设备接口实现的功能是将一个不符合PCI总线协议的设备桥接到PCI总线上,为计算机PCI总线和用户应用之间传输数据提供一个数据通道。该从设备接口为用户提供了一个简单的总线接口,特别适合PCI总线与32位SRAM或FIFO等高速存储设备的桥接。
图1 PCI从设备接口的内部结构框图
表2 用户总线信号定义
状态机是整个PCI从设备接口设计的控制核心,它控制着PCI总线交易时序和控制信号的产生,文中结合PCI规范的要求,使用Verilog HDL语言、采用One-hot编码方式设计了全同步状态机,状态机由表3所列的8个状态组成,状态机状态转移图如图2所示。
图2 PCI从设备状态机
表3 状态机的状态名、状态变量和状态说明
PCI目标状态机状态转移有以下几种情形:
(1)Idle→B_busy→Idle,地址译码设备未被选中,则处于B_busy总线忙状态等待总线交易结束,直到FRAME#失效当前总线交易结束才返回Idle.
(2)Idle→B_busy→Wait→Backoff→Turn_ar→Idle,设备未能在16个时钟周期内准备好第一个传输数据,超时重试(RETRY)断开连接,总线停留在Backoff等待总线撤消FRAME#,然后总线释放返回空闲态。
(3)Idle→B_busy→Wait→(R_wait)→L_data→(Backoff)→Turn_ar→Idle,从设备同时有效Ready和term信号,表明从设备不支持突发传输或者没有更多的数据存储空间进行突发传输,只能进行最后一个数据交易。如果是读交易,则插入读等待状态R_wait.
若访问为突发访问,当惟一的数据期完成以后,总线停留在Backoff状态等待主设备无效FRAME#,然后交易结束。
(4)Idle→B_busy→Wait→(R_wait)→Data→(L_data)→(Backoff)→Turn_ar→Idle,突发数据交易,读交易则插入读等待状态R_wait.若从设备提出终止,则插入L_data和Backoff状态与主设备断开连接;若是主设备提出终止则正常的结束总线交易。
在设计中,配置访问不支持突发传输,总线时序和情形(3)一致;而内存访问支持突发传输,情形(3)和(4)的时序均会出现。用户应用可以通过Ready和Term信号不同的输入组合来控制状态机的状态转移,如表4所示。但是在本设计中的顺序要么是先等待,然后正常数据交易、正常结束或者提出断开连接;要么是先等待,然后重试直接断开连接,只有这两种顺序,用户应用不能在正常数据交易期中再插入等待状态,这是不允许的。
表4 Ready和Term输入组合说明
2.2 配置空间
配置空间是容量为256 Byte并具有特定记录结构或模型的地址空间,包括头标区和设备有关区,前64 Byte是头标区,用来唯一的识别设备,并使设备能以一般的方法控制,是PCI设备必须实现的。
本模块实现了头标区所有的字段,可读可写字段中可写的位由触发器来实现,其它位和只读字段全部硬件连线接地或者接高。通过配置空间寄存器,配置软件可以确定设备的存在、功能以及资源请求。配置空间主要字段的设置及含义说明如表5所示。
表5 PCI配置空间字段值及说明
2.3 译码
译码模块包括命令译码、地址译码。在总线交易的地址期,译码模块通过将AD信号线地址期的值与配置空间基址寄存器值相比较,确定访问是否落在本设备的地址空间范围内;或确定是否被选作配置访问的目标设备。同时对地址期C/BE信号线的值进行命令译码,确定总线访问的类型,本模块支持配置读、写和内存读、写4种PCI总线访问方式。若译码后设备被选中,则发送HIT信号通知状态机做进一步处理。
表6 支持的PCI总线命令
2.4 数据通道
在总线交易的地址期,数据通道锁存AD总线上的地址信号,并在IRDY#和TRDY#同时有效的时钟上升沿,将地址自动增加一个双字地址并提供给用户接口。
在数据期,写交易时将AD总线上的数据写入配置空间或者用户设备,在读交易时数据通道负责将要读出的配置数据或用户设备数据锁存送到AD总线上,并产生偶校验值送给奇偶校验模块。数据通道为PCI访问配置空间和用户设备提供了一个地址和数据接口。
2.5 奇偶校验
奇偶校验主要用来确定主设备是否成功的寻址到它希望的目标设备,以及数据传输的正确与否,在总线交易中,任何设备驱动数据总线输出数据,就必须在相应的地址或者数据的下一个时钟周期驱动PAR线。设计中省去了奇偶校验值的检验电路,只实现了必须的偶校验值产生电路,计算出要输出数据和CBE的偶校验值后,在数据期的下一个总线时钟周期送给主设备检验。
2.6 重试模块
从设备接口如果承诺了一个数据交易,则必须在16个时钟周期内准备好发送和接受数据,否则超时重试。如果用户设备被选作交易的从设备,但没有准备好,无法开始起始字节的数据交易,则状态机一直处于等待状态,如果在规定的时间内用户设备仍没有有效Ready信号,该模块通知状态机超时重试,然后断开连接。
2.7 其他逻辑
该部分主要包括一个总线选择器和一个三态总线驱动器。总线选择器根据总线访问的类型,选通配置空间读数据或用户设备数据送至数据通道;三态总线驱动器对输出到用户设备的数据进行三态驱动。
3 时序仿真
文中采用Verilog HDL语言设计实现了上述模块,在Altera公司MAX+plusIl10.0软件环境下,选用FLEX10K20RC208-3器件进行综合编译,占用341个逻辑单元,最高工作频率36 MHz,满足PCI总线的时序要求。图3是内存突发读访问的时序仿真波形,突发传输4个数据,在每个数据传输的下个时钟周期输出奇偶校验值,最后用户设备提出终止传输请求,最后一个数据传输完成后交易结束。图4是内存突发写访问的时序仿真波形,突发传输4个数据后,主设备插入等待周期,同时用户设备也有效Ready和Term请求终止传输,在第5个数据也是最后一个数据传输完成后,总线交易结束。这两个时序图属于传输最后一个数据并断开连接情形的两种不同情况。仿真波形的分析表明,从设备接口模块符合PCI规范的要求。
图3 内存突发读访问的时序仿真波形
图4 内存突发写访问的时序仿真波形
4 结束语
将一个FIFO模块连接到PCI从设备接口的用户总线组成测试平台,由FIFO的状态和控制信号提供同步的Ready和Term信号。这个测试平台在MAX+plusII下编译,并下载到PCI开发板上一片EPF10K20RC208-3芯片中,安装驱动程序后,PCI开发板正确识别、工作稳定、读、写数据准确无误;多组数据传输测试,测得数据突发传输率约可达到20 MB·s-1.