1、基于 PCI 总线的 GP-IB 接口电路设计摘要: 主要介绍作为从设备如何根据 PCI 总线协议设计 PCI 总线接口电路,从而实现基于 PCI 总线的 GP-IB 接口电路设计,重点阐述 PCI 总线接口状态机的设计。前言基于 PCI 总线的 GP-IB 接口电路框图如图 1 所示,工控机采用 PCI-104 堆栈结构,通过 PCI 总线和 EPLD 相连,数据总线为 32bit,传输速率为 33MHz。EPLD 完成 PCI总线接口电路的设计和 NAT9914 接口芯片的控制,通过驱动芯片 75160 和 75162完成 GP-IB 的接口通信。在此重点介绍 EPLD 内部电路设计。 图
2、 1 GP-IB 接口电路结构框图EPLD内部电路设计PCI 局部总线很复杂,PCI 局部总线也在不断的发展中,现在已经衍生有CPCI、PCI EXPRESS 等总线标准。 PCI 局部总线定义的功能很强大,当然如果需要将所有的 PCI 局部总线的要求都能实现,购买 PCI 局部总线的专用集成电路或 IP 核是最佳选择,因为 PCI 局部总线的硬件设计过于庞大,全部实现有一定的难度。如果设备只是作为从设备,根据设计要求实现起来也不是很复杂,很多功能如仲裁、边界扫描及错误报告等功能就可以不用实现,甚至像奇偶校验、重试、突发传输等功能也可以不用实现。根据 GP-IB 接口卡的功能,本文主要介绍在
3、EPLD 中实现 PCI 总线接口电路的设计,并且能够正确操作 GP-IB 总线协议的控制芯片 NAT9914。EPLD 的容量较小,我们采用 XILINX 公司的 XC95288XL 器件,只有 288 个宏单元,经过设计优化,最终成功装载。其实现原理框图如图 2 所示。图 2 EPLD 内部电路框图PCI接口信号设计设计 PCI 接口信号很关键,PCI 总线规范定义的信号很多,在设计过程中必须有所取舍。下面按照 PCI 总线规范的要求,根据设计电路的实际需求,设计如下接口信号:Rst : 上电复位信号,低电平有效。Clk : 时钟信号 33MHz。Cbe3.0 : 命令、字节使能信号。Ad
4、31.0 : 地址、数据多路复用的三态输入 /输出信号。Frame : 帧周期信号,由主设备驱动,表示当前主设备一次交易的开始和持续时间。Irdy : 主设备准备好信号。Trdy : 从设备数据准备好信号。Devsel : 从设备被选中响应信号。Inta :从设备中断请求,低有效。在设计时舍弃的信号有:Par、Stop 、Perr 、Serr、Req、Gnt。 GP-IB 接口芯片控制信号设计根据电路要求,设计如下接口信号,用来完成对 NAT9914 和驱动芯片的控制,实现 PCI 到 GP-IB 接口的转换。Target_clk: GP-IB 接口控制芯片时钟,本方案设计为 33MHz 时钟
5、的 8 分频。Target_rst :复位脉冲信号,低电平复位。Target_ce: 读写使能,高电平为读,低电平为写。Target_sc:标识 GP-IB 接口卡作为控者,还是作为普通器件。Target_we :写使能控制,低电平有效。Target_int_l:控制芯片中断输出,低电平有效。Target_abus:有效地址输出。Target_dbus:三态数据输入/输出总线。电路优化设计图 2 给出了 PCI 总线接口电路的原理框图,由于 EPLD 容量较小,在设计时必须尽量减少不必要的电路设计,并对电路设计进行优化,下面给出各电路模块的功能设计:译码电路PCI 总线命令编码方式有 12 种
6、,在本设计中我们只实现配置读、配置写、存储器读和存储器写四种编码交易类型。译码功能电路工作在地址周期,包括命令译码、地址译码和命令/ 地址锁存等三项功能。在 Frame 变低的第一个时钟周期内,译码电路对来自主设备的命令 Cbe3.0进行译码,并向状态机 控制模块发出是配置读写还是存储器读写命令,同时锁存地址。配置寄存器在 PCI 规范中,配置空间是一个容量为 256 字节并具有特定记录结构或模型的地址空间,该空间又分为头标区和设备有关区两部分。在配置寄存器中不用的寄存器当CPU 读的时候,将默认为零。重试GP-IB 控制芯片寄存器响应完全能够满足 PCI 规范的要求,不需要进行重试,这部分功
7、能不再实现。奇偶校验在 BIOS 中可以对奇偶校验进行屏蔽和开放,为了减少设计的复杂性,奇偶校验功能NAT9914 接口控制电路NAT9914 接口控制电路主要完成内部总线到外设的时序控制。GP-IB 总线接口采用的是负逻辑电平设计,考虑到 EPLD 的容量有限,在设计时数据传输不支持 DMA 模式,只支持单周期 CPU 读写。由于 CPU 读数据时延迟较大,在对 PCI 状态机设计时必须进行读延迟等待。状态机的设计与实现状态机的设计是整个设计中的核心部分,它主要用来控制从设备和 PCI 总线的时序。在本设计方案中,配置过程的完成和存储器的读写都是由状态机来完成的。由于 EPLD的容量有限,G
8、P-IB 接口芯片的读写速度比较慢,在设计状态机时,不支持 CPU 的猝发操作。表 1 给出了状态机的状态名、状态变量和说明,图 3 给出了状态机的流程图。 图 3 状态机设计流程图下面根据状态机的流程图给出读、写操作时序分析与设计要点:PCI 规范中定义了三种读写操作,即 Memory 和 I/O 读写及配置读写。本方案不支持 I/O 读写 ,只支持 Memory 和配置的读写,下面给出 Memory 映射方式的单周期仿真读写时序。存储器写操作存储器单周期写操作时序如图 4 所示,当 frame 为低电平时启动读写操作,同时给出要写的目标地址 ad31.0和命令 cbe3.07,cbe 等于
9、 7 表示写寄存器,从设备锁存命令和地址到缓冲区。在第 2 个 clk,主设备将 irdy 变低,同时给出数据,状态机运行到 6,锁存数据给缓冲区,trdy、devsel 由高阻变为高电平。在第 3 个clk, devsel 变低,给出主设备应答信号,表示从设备已经响应请求,状态机运行到7。根据写操作, target_we、target_ce 变低,并对地址进行译码,放在地址总线上,同时驱动数据总线,表示在对控制芯片进行写操作。在第 4 个 clk,检测到目标设备的 target_ready_l 为低电平,表示从设备已经做好接受数据的准备,状态机运行到 8,将 trdy 变低。在第 5 个 c
10、lk,状态机运行到 9,trdy 变高,同时主设备将驱动irdy 变高,表示一个写周期结束。状态机运行到初始状态,等待下一次操作。target_ce、target_we 将延迟变高,结束控制芯片写周期。 图 4 存储器写周期时序存储器读操作存储器单周期读操作时序如图 5 所示,当 frame 为低电平时启动读写操作,同时给出要写的目标地址 ad31.0和命令 cbe3.06,从设备锁存该命令和地址。在第 2 个 clk,状态机运行到 6,进入读写等待状态,主设备将 frame 变高,表示单周期模式,trdy、devsel、由高阻变为高电平。在第 3 个 clk,状态机运行到 7,并给出应答信号
11、 devsel,检测到 target_ready_l 为高电平,状态机 进入等待状态,直到为低电平,然后运行到读等待状态 4。在状态机 8,trdy 变低,从设备将读数据放在ad31.0总线上。在状态机 9,trdy 变高,devsel 变高,同时主设备将 irdy 变高,结束单周期读操作。devsel、trdy 回到高阻状态,状态机运行到初始状态,准备下次操作。图 5 存储器读周期时序结语本设计占用芯片的资源少,可移植性强,根据设备不同的需求可以进行设计更改,在很多测试仪器中都得到了广泛的应用。参考文献:1李贵山、陈金鹏,PCI 局部总线及其应用,西安电子科技大学出版社, 20032. 候伯亨、顾新, VHDL 硬件描述语言与电路设计,西安电子科技大学出版社,1997