摘要:目前部分基于x86体系结构平台的测试仪器已经采用了pci板卡设备来控制整个测试电路的运行、采集测试数据,因此在pci板卡上的本地总线与数据传输电路之间需要设计接口电路。在分析pci9054接口控制器的基础上,研究和设计了一种实用的数据传输接口电路并在现场可编程门阵列器件内部得以实现。
关键词:pci总线;数据传输;fpga
1引言
近年来pci总线已经在高档测试仪器中得到越来越广泛的应用。由于pci总线协议非常复杂,不便于与测量控制逻辑直接连接,需要经过一个pci接口控制器作为桥梁。另外考虑到软件的处理速度和工作效率,测量电路高速采集的数据也不能立即传送给主机,因此在fpga内部设计了fifo缓冲器。设计方案如图1所示。当送入fifo的测量数据达到预定的数量时,本地中断逻辑通过pci总线接口控制器向主机提出中断请求,主机响应中断后,通过pci总线控制器从fifo中取走测量数据。
pci接口控制器的设计相对来说比较复杂。目前比较常用的方案有两种:第一种是用可编程逻辑器件设计实现,第二种方案是采用专用接口芯片。由于前者方案需要投入大量的人力、物力进行逻辑验证和时序分析工作,延长了开发周期,因此本文选择了专用接口芯片方案。具体型号是plx公司的pci9054芯片。使用这种专用芯片桥接pci总线和本地总线,开发者可以省去考虑很多复杂的pci总线规范,而集中精力开发硬件和驱动程序。
以下主要论述图1虚线框内的fpga设计与实现。wWw.lw881.com重点是与pci9054接口的本地总线控制逻辑和中断逻辑。
2数据采集接口逻辑的设计
2.1pci9054本地总线研究
对本地总线操作过程及控制信号时序关系的分析是应用pci9054芯片和设计本地总线控制器的基础性工作。pci9054本地总线的信号包括:lhold(输出)申请占用本地总线信号;lholda(输入)本地总线应答信号;ads#(输出)地址选通信号;blast#(输出)传输结束指示信号;lw/r(输出)读写状态信号(高电平表示写,低电平表示读);ready#(输入)外部等待信号;lclk(输出)本地时钟;lreset#(输出)本地复位信号;la[31:2](输出)本地地址总线;ld[31:0](输入/输出)本地数据总线。上述信号名后带有“#”的表示低电平有效,另外输入输出是针对pci9054芯片而言的。
当读数据时,本地总线上的各信号时序关系如图2所示,控制信号有效边沿的含义已标注于图中。图2所示的pci从方式读操作中,每次传输的数据有多个字,ads#信号变低表示数据传输周期的开始,之后每个时钟周期的上升沿将本地数据总线上的数据读入9054内部,在紧接着的时钟下降沿自动增加本地地址总线上的地址;数据传输状态将一直持续到blast#信号变低,表示当前数据期已经是传输的最后一个数据期,数据传输即将结束。这种传输方式称为突发传输。相对应的pci9054也支持单周期传输。在单周期传输时,每次只传输一个字,blast#信号在ads#信号有效后的下一个时钟周期就会出现。显然单周期方式的数据传输率较之突发传输方式会慢很多,由于fpga内的fifo数据传输率能够与pci9054的数据传输率相适应,本文采用突发传输方式以提高pci总线的传输效率。
2.2本地总线控制
根据前文可以明确出本地总线控制器的设计目标:根据输入的控制信号lhold、ads#、blast#生成符合本地总线时序要求的控制信号lholda、ready#和fifo的读请求信号rdreq。 对于lhold信号的应答问题,采用verilog语言中的always和assign语句就能简便高效的实现。对ready#信号的处理可以采用同步状态机,其状态图如图3所示:
2.3对于本地中断的分析和应用
当采集并存储在fifo中的数据达到一定数量,为了避免fifo溢出主机需要将测试数据从fifo中取走。从提高效率的角度出发,采用中断方式完成该工作。
在pci9054 的中断被使能的情况下,如果本地逻辑向pci9054芯片输出本地中断信号,pci9054芯片将生成pci中断信号。需要特别注意的是:pci9054芯片生成的pci中断信号是电平信号,而非脉冲信号,因此当该pci中断被pci主机响应后需要在中断服务程序的入口处手动禁止pci中断,否则会导致多次触发中断的异常情况出现。同时由于在中断服务程序出口处重新打开了pci中断,因此须在中断服务程序执行期间撤销本地中断源以避免中断服务程序一旦结束就将再次触发中断的异常情况出现。
基于以上分析,本地中断处理逻辑需要实现两点功能要求:① 当触发条件满足时,生成本地中断输入信号lint#。② 在中断服务程序执行期间,撤销本地中断输入信号lint#。对于第一点要求,采用的方法是用减计数器的溢出信号来作为本地中断输入信号,该计数器的初值可以由应用程序根据被测器件和测量模式来灵活设置。对于第二个功能要求,在开发实践中采用了一种效率更高、移植性更好的本地中断信号撤销机制。其关键点在于将撤销本地中断信号的控制权由本地逻辑转移到中断服务程序中。具体方法是:在本地端设计一个中断处理触发器。该中断处理触发器的clear端口连接的是数据总线的最低位与译码器输出信号相与后的信号,d端口置1,clk端口连接上述减计数器的溢出信号,q端口上输出信号经过非门作为lint#信号输出。当fifo中的数据量达到预先设定值时,减计数器溢出,触发器q端输出高电平,经过反相器即产生低有效的本地中断输入信号。当主机响应中断,并进入中断服务程序后,执行一次对该触发器置1的操作,这样连接clear端口的与门的两个输入端都为高电平,进而将该触发器的q端输出置0,经过反相后,lint#信号变为高电平,即撤销本地中断信号。
3结论
本文讨论分析pci9054接口控制器的本地总线操作过程,并在此基础上研究与设计了数据采集接口逻辑。该数据采集接口逻辑是pci9054芯片与数据fifo进行信息交互的桥梁。该设计已用verilog硬件描述语言进行了功能描述,并仿真验证和综合。设计方案已经应用在某晶体管特征曲线图示仪产品开发实践中,实践运行证明该数据采集接口电路能够高效、稳定的工作。
参考文献
[1] plx technology pci 9054 data book version 2.12000,(1).
[2]王雪梅,施洪昌.基于pci总线的数据采集卡的设计[j].微计算机信息(测控自动化),2005,(4).