基于FPGA的LBS控制器设计
0 引言
PLX的一款桥芯片PEX8311可将标准处理器、DSP和FPGA总线接口升级为PCI Express(PCIe)。PEX8311单道PCIe至32位、66 MHz通用局部总线桥可在两种标准间转换协议,它可用于通讯线路卡、监视系统、工业控制、IP媒体服务器和医疗成像系统,以实现可升级的高带宽互联。采用根联合体或终端点的PCI嵌入式系统设计可采用PEX8311桥芯片移植到PCIe。本文就是基于PEX8311和FPGA来实现PCIe标准1x传输。
1 系统介绍
FPGA和PEX8311之间通过LBS(LocalBus)来连接、发送和接收命令及数据,其中FPGA主要控制LBS的运行,本文通过设计一个高效、可靠的LBS控制器来实现FPGA和PEX8311的通信。如图1所示。
本系统的控制的核心是LBS控制器,该控制器是通过FPGA采用VerilogHDL实现的,其优点是稳定性强、不会造成死机,避免了常规的PC I,PCIe板卡类经常死机的问题,其次是传输速率高,充分利用LBS的时序,减少无用的等待时间。
FPGA采用Altera公司的Cyclone3系列的3C120款FPGA芯片。Cyclone3是功耗最低、成本最低的高性能FPGA产品,鉴于上述特点本设计采用它来实现PCIe的传输功能。
PEX8311是PLX公司的一款x1的PCI Express接口芯片,本地端总线频率最高可达66 MHz,数据位宽为32 b。PEX8311有主模式、从模式和DMA三种数据传输模式,可灵活、方便地与各CPU,FPGA和ASIC无缝连接,实现高速传输。
2 LBS控制器设计
2.1 控制信号介绍
Hold信号:请求控制总线的信号,FPGA向PEX8311发出控制总线的请求。
Holda信号:PEX8311响应FPGA请求的信号。
LCLK信号:时钟输入信号。
ADS信号:地址选通信号。
BLAST信号:最后一个数据的同步信号。
LA[31:2]信号:地址线。
LD[31:0]信号:数据线。
LW/R信号:读写控制。
Ready信号:数据有效信号。
2.2 LBS总线读写操作时序介绍
LBS总线操作有单次读写和Burst读写方式,本设计中采用单次读写设计用来传输FPGA内部的寄存器读写控制,这些寄存器是用于配置各逻辑模块的功能控制,通过CPU或软件来实时控制;Burst读写方式主要用于大批量数据传输,本文中主要是传输高速的DDR数据,利用Burst传输方式可以实现高速自动大容量数据传输,充分利用LBS的传输带宽,提高传输效率。
2.3 PEX8311芯片介绍
PEX8311芯片的LBS端具有32位数据总线宽度和66 MHz时钟频率,PEX8311支持三种LBS总线接口模式:C模式,J模式和M模式,可方便地与多种微处理器连接。接口模式由MODE0和MODE1两管脚确定。本设计采用时序逻辑相对简单的C模式,即非复用的地址/数据总线模式。PEX8 311支持三种局部总线数据传输模式:单周期模式、四周期突发模式、连续突发模式。
DMA传输数据使传输任务从主控设备中解脱出来,由短且有效的传输描述符来承担,让主控设备可以有时间去处理其他事件。PEX8311有两个DMA通道,可以同时处理两侧总线上要求的传输,免去外部设备的等待。另外,DMA传输可以与主模式和从模式传输同步操作,但后两者比DMA传输优先级高。考虑到DMA传输有以上优点,本设计中PCI Express接口部分采用连续突发模式DMA块传输模式,LBS总线接口采用C模式。
2.4 LBS状态机设计
LBS共设计有4个状态:IDLE,START,DO,BUSY。其状态转移图如图2所示。
IDLE:空闲状态。
START:当ADS地址选通有效时进入此状态,进行地址空间判断。
DO:当地址空间有效,并且传输条件满足时进入传输状态,每个时钟判断条件,当条件满足时继续该状态,当条件不满足时,进入BUSY等待状态,传输结束(BLAST有效)进入IDLE状态。
BUSY:当数据没准备好时,在BUSY状态等待,当数据准备好后进入DO状态,当超时后进入IDLE状态,实时退出。
2.5 LBS状态机工作流程
FPGA作为LBS的逻辑控制器,负责协调好与DDR_FIFO数据和PEX8311之间的时序关系。系统接收数据时,首先由驱动程序向PEX8311发送复位信号,通过LRESET复位LBS本地端的FPGA,清空FPGA内部DDR_FIFO内部数据,并将HF和FF标志置为无效,然后等待数据的输入。FPGA读入DDR数据后,首先将DDR数据写入DDR_FIFO中,当DDR_FIFO中的数据达到半满状态时,HF标志位有效,通过FPGA向PEX8311发出DMA中断请求。PC机响应中断后,设置DMA传输模式,传输字节数及地址信号等。PEX8311通过LHOLD申请控制本地总线,此时FPGA发出的LHOLDA响应信号后获得本地总线的控制权,并立即进入连续字节突发模式的Block DMA周期即由IDLE状态到START状态。FPGA在收到有效的LW/R读信号和ADS地址选通信号后,进入DO状态,同时发出Ready本地准备好应答信号,使能DDR_FIFO的读允许REN和输出允许OE。在传输最后一个数据时,PEX8311发出BLAST信号,FPGA配置DDR_FIFO读使能和输出使能无效,并取消Ready从而结束DMA周期。PC系统发送数据时,FPGA将计算机通过PCIe传过来的LBS数据写入PC_FIFO中,再输出写入到DDR中。
2.6 LBS状态机核心编码设计
按照上述4个状态进行Verilog设计,经过仿真和上板调试,效果很好,下面是状态机设计程序,仿真时序图如图3,图4所示。
3 结语
本文设计的LBS控制器应用在PEX8311和FPGA接口中运行状态正常,稳定性强,已成功应用于某视频采集卡、某PCIe数据采集卡,经过实践证明,基于FPGA设计的LBS控制器具有灵活性强、可编程能力强、适应性强等优点,能迅速缩短产品上市时间、快速响应客户需求,满足市场需要。
- 基于PCI Express总线的高速数据传输卡设计(12-04)
- 在采用FPGA设计DSP系统中仿真的重要性 (06-21)
- 基于 DSP Builder的FIR滤波器的设计与实现(06-21)
- 基于FPGA的快速并行FFT及其在空间太阳望远镜图像锁定系统中的应用(06-21)
- 3DES算法的FPGA高速实现(06-21)
- 用FPGA实现FFT算法(06-21)