摘 要: 本文阐述了使用CPLD实现通用PCI扩展总线桥的设计方法,并且介绍了用Verilog HDL语言进行PCI总线目标模块设计的方案,
重点叙述了PCI扩展总线桥逻辑设计和Verilog HD实现模块的设计,最后给出了PCI扩展总线桥的仿真时序图。
关键词: PCI总线 ;CPLD;Verilog HDL;时序状态机
引言
随着微处理机性能的迅速提高以及多媒体技术和高速网络的不断发展,人们对微机系统的I/O带宽提出了越来越高的要求,计算机的标准总线也从ISA、EISA和MC逐渐过渡到PCI总线。由于PCI总线具有诸多优点,如支持64位数据传送,多总线主控和线性突发方式(Burst)和高达132Mb/s数据传输率,使得人们更倾向于用PCI总线的处理芯片来构造系统机、工作站、外围设备及板卡。于是,一些旧的I/O设备和存储器由于不支持PCI总线而面临着被淘汰的地步,为了实现连接PCI总线和这些I/O设备、存储器的连接,可以设计一个PCI扩展总线桥,通过桥电路,接出一条标准的I/O扩展总线,如ISA、EISA或MCA总线,从而可继续使用现有的I/O设备,以增加PCI总线的兼容性和选择范围。
开发PCI总线接口电路,通常有两种途径。一种是使用专用接口芯片,如美国AMCC公司生产的PCI协议控制芯片S5920、S5933或PLX公司的PCI905X系列芯片等,另一种则是利用可编程逻辑器件(PLD)来实现PCI总线接口功能。采用专用芯片,可以比较容易的实现PCI接口,可以让开发者避开复杂的PCI总线协议,减少工作量,降低设计难度,缩短开发周期。但是,使用PCI专用芯片也存在一些问题:价格太高,功能太全,开发者一般只用了其中的一部分,既造成了资源浪费又不经济;并且它的接口固定,使用起来不太灵活。而应用可编程逻辑器件进行PCI接口,能够较灵活的实现所需要的功能。由于PCI扩展总线桥的后端用户逻辑时序较简单,主要是要设计PCI总线的接口电路,所以设计选用Altera公司的CPLD器件EPM3512,该芯片是该公司生产的MAX3000系列器件中的一种,它有512个宏单元,10000个可用门,最大用户I/O脚为188个,最高频率可达176MHz,封装为208脚PQFP形式。
PCI扩展总线桥逻辑设计
PCI扩展总线桥的设计包括前端的PCI总线接口设计和后端的用户逻辑设计。PCI总线是一个地址/数据、命令/字节选择信号复用的总线,它采用主从信号双向握手的方式来控制数据的传输。在一个典型的PCI总线系统结构中,PCI扩展总线桥可定义为一个从设备,根据PCI总线协议,这时PCI接口信号线至少为47条。设计中的用户逻辑是为桥后端的设备产生正常工作所需的触发信号、地址选通信号以及进行数据传输,这一部分实质是将一些常规电路,如时基电路、触发电路和地址选通电路等,用硬件描述语言编程来实现,这部分实现起来很容易,相应的接口部分逻辑图1所示。
图1 PCI总线扩展桥逻辑设计图(略)
根据逻辑图,设计的PCI接口模块应该包括以下部分:
1)存及数据分离、命令锁存及字节选择信号分离电路。这两部分电路比较简单,很容易实现。
2)地址产生电路。PCI的突发传输方式包括一个地址周期和若干个数据周期,因此在PCI接口中必须包含高速的地址产生部件用于向后级电路提供连续的地址。
3)地址译码及命令译码,这一部分与传统总线设计相同。
4)控制信号交互电路。PCI总线上的数据传输基本上由四根信号线控制。Frame#表示对话的开始和结束,它同时受主设备和从设备控制,IRDY#和TRDY#分别表示主、从设备准备好;DE-VSEL#由从设备发出,表示从设备将响应此次传输,所有的控制信号必须对齐时钟上升沿。这部分电路没有固定的模式,通常由具体应用环境决定其逻辑,一般至少要接收地址译码信号及外部传来的表示传送结束的信号(如BUSY、HOLD和STOP之类)来完成整个交互过程。
5)配置寄存器。按照PCI协议,PCI设备至少应当实现厂商标记、设备识别和命令状态字等配置数据,这些可以用RAM来实现。
PCI扩展总线桥的实现
上面设计的PCI扩展总线桥的接口逻辑最终要在CPLD中来实现。在进行PCI总线接口设计中,使用Altera公司的Quartus
II 2.0作为开发平台。由于PCI协议的时序逻辑比较复杂,因此,对CPLD的设计全部采用Verilog HDL语言作为设计输入。整个设计由一个顶层模块和六个底层模块组成(图2)。
图2 Verilog HDL 设计模快图(略)
1)顶层模块:该模块包含了整个设计的输入/输出信号和底层设计模块的定义。
2)浆糊逻辑模块:该模块包含了设计中的各种混杂逻辑,包括PCI地址寄存器,命令/字节使能寄存器和配置读/写使能寄存器,在每次PCI传输的地址有效期内触发这些寄存器。
3)配置寄存器模块:该模块实现PCI配置寄存器的配置和读写功能。根据PCI协议,每个PCI设备都有256字节的配置空间,配置空间中存放的是与本设备有关的信息,它首先用来向总线仲裁器表明本设备的存在,其次向总线仲裁器表明本设备要完成的功能,映射到内存或I/O空间以及所占的地址范围,支持哪些总线访问命令等,。在实际实现时,考虑到总线扩展桥的具体要求,设计中只配置了以下与设计相关的一些寄存器。
a)配置空间地址为00h的Device ID and Vendor ID寄存器。
b)配置空间地址为04h的Status and Command寄存器。设计中DEVSEL信号响应时间设为slow,存储器空间和I/O空间使能设为可写。
c)配置空间地址为08h的Class Code and Revision ID寄存器。Class Code设为ISA桥,定义为060100h。
d)配置空间地址为10h的I/O空间基址寄存器。基址设为可写。
e)配置空间地址为14h的存储器空间基址寄存器。基址设为可写。
f)配置空间地址为2Ch的Subsystem ID and Subsystem Vendor ID寄存器。
g)配置空间地址为3Ch的Max_Lat, Min_Gnt, Interrupt Pin and Interrupt Line寄存器。其中,Max_Lat,
Min_Gnt寄存器设为0000h,Interrupt Pin寄存器设计为01h,表示只使用一个中断引脚,Interrupt Line寄存器设为可写。
4)基址检查模块:该模块根据基址寄存器中的地址来校对当前操作的地址线上地址。
5) 状态机模块:该模块是整个设计的核心,它控制整个总线周期的时序。在每一次PCI操作的地址期内,根据PCI接口的命令/字节使能信号C/BE[3::0]和配置读/写选通信号IDSEL,状态机都会从空闲状态转移到三个可能的状态,即配置空间读/写、存储器与I/O空间读或存储器与I/O空间写。
a)在设计中,配置空间的访问设为0类配置访问,只有当地址期内AD信号的0位和1位都为0( PCI_AD[1,0]==00b)时,才响应访问。在配置读/写操作时,AD信号的2位到7位(PCI_AD[7:2])决定操作对应的寄存器。当访问未实现的寄存器时,读操作时返回的值为00000000h,写操作时也会响应,但不能写进任何值。
b)在存储器与I/O空间读操作时,存储器读操作支持突发传输,而I/O读操作不支持突发传输,只支持一次传输。在典型的读操作中,当地址与基址寄存器中的值相匹配时,通过信号通知桥后端设备准备传输,在得到后端设备的确认信号后,开始读第一个双字,如果传输一次突发传输时,接着读第二个双字。一旦主设备开始一次突发传输,如果桥后端的设备中止突发传输,后端设备必须提前两个数据段通知状态机结束突发读周期。
c)与存储器与I/O空间读操作相类似,在存储器与I/O空间写操作时,存储器写操作支持突发传输,而I/O写操作不支持突发传输,只支持一次传输。在典型的写操作中,当地址与基址寄存器中的值相匹配时,通过信号通知桥后端设备准备传输,在得到后端设备的确认信号后,发出TRDY信号,如果此时IRDY信号有效,便开始写操作。如果传输是一次突发传输时,接着写第二个双字。一旦主设备开始一次突发传输,如果桥后端的设备中止突发传输,后端设备必须提前两个数据段通知状态机结束突发写周期。
6) 奇偶校验模块:该模块实现在配置读周期和存储器或I/O读周期时产生奇偶校验。
7)重试计数模块:当桥后端设备发生"时间溢出"时,该模块实现一个计数器来通知状态机。如果状态机确认了一次读或写操作,在发出DEVSEL信号有效后,必须在随后的16个时钟周期内发出或接收到数据。如果状态机确认了一次读或写操作后,桥后端的设备在12个时钟周期内没有发出准备好信号,此时将开始数据重试。数据重试只能在第一个数据段未传输前有效,一旦桥后端的设备确认了操作,状态机必须开始发出或接收所需的数据。
PCI扩展总线桥的时序仿真
完成PCI扩展总线桥的逻辑实现后,设计仿真矢量,QuartusII 2.0平台上进行设计的时序仿真,下面是仿真后的时序图,限于篇幅,这里只给出部分仿真时序图见图,3、4、5、6,由仿真后的PCI操作时序图,可以看出整个设计的时序符合PCI协议的要求。
1)对配置空间的读写操作时序(地址为04h的Status and Command寄存器)
图3 配置空间写操作时序(略)
2)对I/O空间的写操作(地址为FFF0000h)
图4 配置空间读操作时序(略)
图5 空间的操作时序(略)
3)对存储器空间的突发读操作时序(启始地址为FFF0000h)
图6 存储器空间的突发读操作时序(略)
结束语
PCI总线协议抽象性很强,且时序逻辑复杂,不利于直接进行硬件设计,而使用Verilog HDL等硬件描述语言则是非常合适的,并且现在的逻辑综合工具的功能越来越强大,可以极快地进行电路设计,使设计者可以在顶层对电路进行设计和规划而无需费心于电路细节。利用CPLD进行PCI扩展总线桥设计时,关键是要搞清楚时序状态机是如何实现总线访问操作的,希望本文能对从事这方面工作的同行有些参考价值。
|