基于PCI9054的主动DMA传输的设计与实现

2022-03-23 09:22:59 | 浏览次数:

【摘 要】本文给出了一种基于PCI9054的主动DMA传输的FPGA设计思想。文中首先对PCI9054及其工作模式进行了介绍,重点介绍了DMA传输方式,而后介绍了主动DMA传输的思想,并对FPGA设计中的要点进行了简要的介绍。

【关键词】PCI9054;DMA传输;FPGA设计

0 引言

随着雷达搜索、跟踪的范围以及精度的不断提高,雷达所接收、处理的数据量日益增大,这对雷达的中心机提出了更高的要求,要求其能更快地进行数据的处理以及完成对雷达各个分机的控制。由于雷达的中心机硬件平台的更新速度要远远落后于软件的速度,所以如何减少中心机不必要的系统开销,使其在有限的硬件资源上能够提供更高的速度,就成了当前雷达研究的一个热点课题。

中心机是雷达的其中一个分机,它与雷达工作模式的控制以及与雷达其它分机进行数据与命令的通信。中心机目前主要是通过PCI总线经由接口板与其它各个分机进行通信,中心机作为PCI总线上的主设备控制PCI总线与接口板进行DMA通信。为了减少中心机的负担、提高中心机的速度,可以将发起DMA传输的工作放到接口板上来做。

1 PCI9054介绍

PCI 9054是美国PLX公司继PCI 9052之后推出的又一低成本PCI总线接口芯片,低功耗,PQFP 172pins封装,它采用了先进的PLX数据管道结构技术,可以使局部总线快速转换到PCI总线上。PCI 9054 是一个32位/33MHz的通用PCI总线控制器专用芯片,支持主模式、从模式、DMA传输方式,因其强大的功能可应用于适配卡和嵌入式系统中。

PCI9054有3种工作方式,分别为C、M和J模式。M模式主要是针对Motorola公司高性能MPC850/860的应用而设计的,主要应用在电信领域,J模式的接口设计相对比较麻烦,比较常用的是C模式[1]。

2 PCI9054的DMA传输方式

PCI9054集成了两个互相独立的DMA通道,每个通道都支持Block DMA和Scatter/Gather DMA,通道0还支持Demand DMA传输方式。Block DMA要求PCI主机或Local主机提供PCI和Local的起始地址、传输字节数、传输方向。主机设定DMA开始位启动数据传输,一旦传输完成,PCI9054设定DMA"传输结束位"结束DMA,如果中断允许位被使能,在传输结束时PCI9054将向主机申请中断。

PCI9054的DMA传输过程[2]可由以下几个步骤实现:

1)设置方式寄存器(DMAMODE):设置DMA通道的传输方式。

2)设置PCI地址寄存器(DMAPADR):设置PCI总线侧的地址空间。

3)设置LOCAL地址寄存器(DMALADR):设置LOCAL总线侧的地址空间。

4)设置传输大小寄存器(DMASIZ):以字节为单位设置传输数据量。

5)设置描述寄存器(DMADPR):设置DMA传输的方向;在散/聚方式下,位0表示传输参数的加载地址,0-PCI地址,1-Local地址; 位1表示传输链结束,0-未结束,1-结束;位2设置当前块传输结束后中断;位3指示DMA的传输方向,0-从PCI总线到Local总线,1-从Local总线到PCI总线;高28位[31:4]表示传输参数表的地址指针。

6)设置命令/状态寄存器(DMACSR):启动或停止DMA操作,并读此寄存器返回DMA状态。

3 主动DMA传输

在之前的设计中,DMA传输总是从主机端发起[3],上述六个步骤中的操作完全由中心机执行。很显然,在一个雷达数据处理周期中,这将消耗中心机大量的资源,不利于提高中心机的处理速度。因此,我们可以用接口板上的FPGA来发起主动的DMA传输,这样,中心机只需要每个周期在固定的内存区域中获取自己所需的数据即可,大大降低了中心机的资源消耗。

在DMA传输过程中,需要设置的六个寄存器在PCI总线端和LOCAL总线端都可以进行读写。因此,只要在LOCAL总线端对上述六个寄存器进行控制,即可实现主动DMA的传输。

LOCAL总线端通过控制CCS#、ADS#、BLAST#、LBE[3:0]、LW/R#、LA和LD等信号来完成一次写配置寄存器的过程。

1)当CCS#信号与ADS#信号同时为低电平时,一次LOCAL总线写配置寄存器开始;

2)此时,LW/R#信号应为高电平,表示是写入操作,LA[31:2]表示要写入的地址;

3)当READY#信号为低电平时,表示写入成功,此时LD[31:0]被写入地址LA[31:2];

4)如果只写入一个数据,BLAST#信号应在ADS#信号低脉冲之后降低,与READY#信号同时抬高;如果写入多个数据,BLAST#信号应在倒数第二个READY#信号低脉冲之后降低,与最后一个READY#信号同时抬高。

4 FPGA实现

根据LOCAL总线写配置寄存器时序,只要通过FPGA控制LOCAL总线对9054实现DMA传输的六个寄存器进行设置,即可发起一次主动DMA传输。本文中的FPGA程序就是按照该思想进行设计的。设计采用状态机的方式实现, ST_IDLE为初始状态,不进行任何操作,ST_DMAMODE、ST_DMAPADR、ST_DMALADR、ST_DMASIZ、ST_DMADPR、ST_DMACSR六个状态分别进行LOCAL端写对应的寄存器的操作。在写寄存器的每个状态中,通过计数器的方式以及根据READY#信号来控制相应信号产生LOCAL总线写配置寄存器时序。

状态机初始化时处于ST_IDLE状态,当有数据需要传输时跳转至ST_DMAMODE状态,设置DMA通道的传输方式;设置完成后跳转至ST_DMAPADR,设置PCI总线侧的地址空间;依次对六个寄存器进行设置。设置完DMACSR寄存器后,启动DMA操作,一次DMA传输过程发起,该状态机跳转至ST_IDLE状态,等待下一次传输的开始。

5 结束语

本文主要阐述了在雷达中心机系统中,基于PCI9054的主动DMA传输的设计思想与FPGA实现。实践证明,PCI9054以其强大的功能和简单的用户接口,为基于PCI总线接口技术的DMA传输系统的设计开发提供了简便的方法。该主动DMA传输的方式大大减少了中心机的工作量,提高了中心机的速度。目前,该设计已成功应用于某型号雷达中心机的接口板中。

【参考文献】

[1]Plx Technology. PCI 9054 data book V2.1, 2000[DB/OL].

[2]颜建峰,吴宁.基于PCI总线的DMA高速数据传输系统[J].电子科技大学学报, 2007,36(5):858-861.

[3]景志,马琰森.基于PCI9054的数据转换模块设计[J].电子设计工程,2011,19(1):29-32.

[责任编辑:薛俊歌]

推荐访问: 传输 主动 设计 PCI9054 DMA