作者:江勇
1 引言
PCI,外设组件互连标准(Peripheral Component Interconnection)是一种由Intel公司1991年推出的用于定义局部总线的标准,自规范推出,得到网络通信,数据采集处理,工业控制等多行业的广泛应用,并出现PCI-E。CPCI,PXI等多个扩展改良版本。PCI总线支持其即插即用,中断共享,高速数据传输等功能,有着广阔的市场前景。
本文介绍了目前使用美国PLX公司生产的协议转换芯片PCI9054,用verilog HDL在FPGA中产生相应的控制信号.完成对数据的快速读写,从而实现了与PCI总线的高速数据通讯。本系统可扩展,适用于其他PCI设备系统,具有实用价值。
2 系统实现
本系统主要由PCI9054与FPGA构成,系统结构图以及信号连接如图1所示。可以根据实际需要,利用FPGA的可编程性,实现预定功能,如与单片机,DSP等处理器的不同速率间接高速通信等。协议转换芯片PCI9054作用就是为本地处理器和主机之间架起一座通信的桥梁。
图1 系统总体结构
1) PCI9054硬件实现
PCI9054是美国PCI公司生产的先进的PCI总线接口芯片,它满足PCI V2.2协议,支持32位33MHz时钟PCI总线,特别适用于PCI总线外设产品的开发。PCI9054局部总线有三种工作模式:M模式、C模式和J模式,可方便地与多种微处理器连接。PCI9054的工作方式可利用模式选择引脚(MODEO,MODE 1)加以选择。
2) PCI9054硬件连接电路(如图2所示):
图2 PCI9054硬件连接电路图
3) PCI9054与PCI插槽信号连接
PCI9054与PCI插槽间的连接信号线,这些信号线包括地址数据复用信号AD[31:0],总线命令信号C/BE[3:0]和PCI协议控制信号PAR,FRAME#,IRDY#,TRDY#,STOP#,IDSEL,DEVSEL#等,电路连接中将彼此对应的信号线连接在一起即可。在PCI总线信号中.除了RST#。INTA#-INTD#之外,其他所有的信号都在始终上升沿被采样。每个信号都
有相对于时钟前沿建立和保持时间。在此期间,不允许有信号的跳动。该时间一过,信号的变化就无关紧要了。这种建立和保持时间对于不同的信号其情形是不同的。对于AD[31:0],PAR和IDSEL来说,只有在一定的十种边沿上才有上述时间的要求。对于LOCK#,IRDY#,TRDY#.FRAME#,DEVSEL#,STOP#,ⅢeQ#,GNT#,SERR#和PERR#这些信号在每个时钟前沿都有建立和保持时间。对于C/BE[3:0]#在传输总线命令是,要在FRAME#第一次建立时对应的时钟边沿上遵守建立和保持时间的关系。若传输字节使能信号时,要在完成一个地址期或数据期之后的每一个时钟边沿保证相应的建立和保持时间。
4) PCI9054与EEPROM接口
各种接口芯片都需要外接串行EEPROM芯片来加载配置数据.对于串行EEPROM芯片,需要根据接口芯片数据手册中给出的生产厂家及型号选择。这里选择FM93LC56。PCI9054提供4个管脚与串行EEPROM相连接,他们分别是EEDI,EEDO,EESK,EECS,对应于FM93LC56的DI,DO,SkCS这四个管脚,这4对管脚直接相连就可以,另外93Lc56的VCC管脚需要接+5V电源,GND接地。因为需要对串行EEPROM进行写操作,串行EEPROM应处于可编程而且非保护状态,所以PE接高电平而PRE接低电平。FM93LC56的技术手册规定两个管脚上拉和下拉的电阻应为10K左右。
5) PCI9054与LOCAL Bus端连接
LHOLD:申请使用本地总线,输出信号;LHOLDA:对LHOLD应答,输入信号;ADS:新的总线访问有效地址的开始,在总线访问first clock设置时,输出信号;BLAST:表示为总线访问的last transfer,输出信号;LW/R#:高电平表示读操作,低电平表示写操作,输出信号;LA:地址线;LD:数据线;READY:表示总线上读数据有效或写数据完成,用以连接PCI9054等待状态产生器,输入信号。
3 VeHiog HDL软件实现
FPGA内部在PCI9054本地总线LOCAL Bus基础之上进行设计;FPGA片内RAM或FIFO可以在QUARTUSII环境下利用利用工具MegaWizard Plug_In Manager调用功能模块生成。单双口、存储容量、数据总线的宽度以及同步或异步自行定制。为与MCU或DSP等处理器通信,要设计RAM访问仲裁模块。决定某一时刻对RAM访问的主方;PCI9054支持单周期、突发和DMA传输,在FPGA内部要设计本地端总线控制模块,实现局部总线的状态控制,同时产生FPGA片内RAM的读写时序及地址信号。
PCI9054支持单周期、突发传输和DMA传输,因此在状态机设计中不仅要满足单周期传输的时序。还要兼顾突发和DMA传输时序。依据FCl9054的datasheet以及PCI总线协议,其状态转换图如图3所示:
图3 PCI9054状态转换图
状态机是控制单元的主体,接受外部信号以及数据单元产生的信号,产生控制信号序列。状态机的关键是如何把一个实际的时序逻辑关系,抽象成一个时序逻辑函数。根据状态转换图.采用3个always语句.即对应三个进程来完成Moore状态机。一个用于状态机的同步时序部分,在本地时钟clk的上升沿到来时.将nextstate状态赋给currentstate;个用于描述状态转换;另一个用于描述输出的组合逻辑。在这里重点阐述状态转换进程,其Verilog HDL代码简略如下所示:
always @ (lads,lblast)
begin case(currentstate)
S0:if(! lads)
nextstate《=S1;
else
nexbtate《=S0;
S1:if(! lblast)
nextstate《=S2;
else
nextstate《=S4;
S2: nextstate《=S3:
S3:if(! lads)
nextstate《=Sl;
else
nextstate《=S0;
S4:nextatate《=S5;
S5:if(blast)
nextstate《=S5;
else
nextstate《=S6;
S6:if(! lads)
nextstate《=S1;
else
nexmmte《=S0;
endcase
end
输出组合逻辑进程如下所示:
always @(currentstate)
case(currentstate)
SO:begin lready《=1‘b1;
ram_wr《=1’b0:
ram_rd《=1‘b0;
end
。..。..
endcase
图4 利用QUARTUSⅡ仿真生成的State Machine图(可与图3对应)
图5 PCI9054 LOCAL Bus单周期传输时序图
4 结论
利用DriverStdio开发PCI9054的驱动程序,实现主机对FPGA内部RAM的读写,利用示波器检测ads,blast信号,在8位数据总线的情况下,实现数据传输率可以达到26.8Mbyte/s,接近PCI的极限传输速率(图4、5所示)。本设计已经应用,经实际运行,传输速度快,数据正确,稳定可靠,经过扩展,同时可应用于其它需要与PCI数据总线接口的设备当中,可缩短PCI设备的开发周期,提高工作效率。
本文创新点:利用PCI9054设计的PCI高速通信接口,采用了FPGA内部RAM间接缓冲技术,可以与DSP,MCU等微处理器高速通信,扩展性强,适用于可应用于其它需要与PCI数据总线接口的设备当中。