kaiyun官方注册
您所在的位置: 首页> 嵌入式技术> 设计应用> 基于状态机的PEX8311的DMA实现
基于状态机的PEX8311的DMA实现
范 晶,胡爱兰
(华北计算机系统工程研究所,北京 100083)
摘要:结合PCI-Express的传输特性,分析了PEX8311的DMA传输模式与时序逻辑,通过有限状态机的设计,实现PEX8311的DMA传输。与其他设计相比,利用有限状态机理论设计控制逻辑具有直观、简单、设计流程短等优点,并对状态机进行了Verilog优化设计,使状态机更加稳定。
Abstract:
Key words :

摘 要: 结合PCI-Express的传输特性,分析了PEX8311的DMA传输模式与时序逻辑,通过有限状态机的设计,实现PEX8311的DMA传输。与其他设计相比,利用有限状态机理论设计控制逻辑具有直观、简单、设计流程短等优点,并对状态机进行了Verilog优化设计,使状态机更加稳定。

关键词桥接芯片PEX8311PCI-Express接口;DMA传输;有限状态机

0 引言

  PCI-Express是最新的总线和接口标准,它代表着下一代I/O接口标准。它原名为3GIO,是由英特尔在2001年提出的,交由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为PCI-Express,简称PCI-E。PCI-E属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理、错误报告、端对端的可靠性传输、热插拔以及服务质量(QoS)等功能。这个新标准将全面取代现行的PCI和AGP,最终实现总线标准的统一。

  PCI-Express的主要优势就是数据传输速率高,目前最高的16X2.0版本可达到10 Gb/s,而且还有相当大的发展潜力。PCI-Express也有多种规格,从PCI-Express 1X到PCI-Express 16X,能满足将来一定时间内出现的低速设备和高速设备的需求。PCI-Express最新的接口是PCIE 3.0接口,其比特率为8 Gb/s,约为上一代产品带宽的两倍,并且包含发射器和接收器均衡、PLL改善以及时钟数据恢复等一系列重要的新功能,用以改善数据传输和数据保护的性能[1]。

1 PEX8311的介绍

  PEX8311是PLX Technology公司推出的一款专用于将DSP、FPGA等处理器总线接口升级为PCI-E的桥接器件。利用PEX8311灵活的局部总线可以方便地连接多种存储器、缓存器及FPGA、DSP等逻辑芯片,使复杂的PCIE接口设计简单化。PEX8311兼容PCI-Express 1.0标准,其本地总线和寄存器与PCI9056兼容,能够提供完整的本地总线到PCI-E的接口,包括地址转换、包生成与解码、信号中断支持及并/串转换等[2]。图1为PEX8311结构图。

001.jpg

  PEX8311由两组桥接模块组成:PCIE-PCI和PCI-Local Bus,相应地配有两组寄存器PECS和LCS。PEX8311支持外部EEPROM对寄存器分别进行配置,也可以通过PC或本地处理器进行配置。

  PEX8311芯片特点:

  (1)集成了单通道、全双工2.5 Gb/s传输的PCI Express端口;

  (2)本地总线配置支持8位、16位和32位的总线结构;

  (3)支持三种操作模式,使用灵活;

  (4)高性能DMA数据传输支持块模式、集散模式、循环队列管理和命令模式;

  (5)支持端点(EP)和根组件(RC)模式;

  (6)芯片低功耗设计;

  (7)芯片小型封装,适合紧凑的电路板设计;

  (8)3.3 V的I/O并且兼容5 V系统;

  (9)串行EEPROM用来可选择的导入配置,支持SPI接口和Microwire接口;

  (10)有8 KB的统配共享RAM。

  PEX8311可配置为端点模式(Endpoint mode)和根组件模式(Root complex mode)。端点模式多用于设备端的桥接模式,而根组件端则用于PC端的桥接模式。最常用的模式为端点模式[3]。

  在端点模式下有三种操作类型:C模式、J模式和M模式。C模式为非复用地址/数据总线模式,是最为常用的模式,支持多数的MCU、ASIC和FPGA。J模式为复用地址/数据总线模式,即部分地址/数据总线复用,支持部分MCU和FPGA。M模式为专用模式。

002.jpg

  在C模式下又有三种数据传输模式:直主模式(Direct Master mode)、直从模式(Direct Slave mode)和DMA模式。三种数据传输模式中,直从模式的优先级最高,直主模式次之,DMA模式最低。

  (1)直主模式:本地处理器掌握本地总线控制权。寄存器配置和PEX8311芯片控制都由本地处理器完成。

  (2)直从模式:PEX8311掌握本地总线控制权,寄存器配置和PEX8311芯片控制由PC端完成。

  (3)DMA模式:PEX8311掌握本地总线和PCI-E端总线的控制权,此模式下的数据传输无需本地处理器或PC处理器干预。

2 DMA传输模式

  DMA模式中,PEX8311提供两个完全独立的双向通道DMA Channel 0和DMA Channel 1,每个通道都配有256 B深度的独立异步FIFO;支持块模式、集散模式、循环队列管理和命令模式[2]。DMA块模式无需PC或本地控制器干预,传输效率高,所以可以大大降低控制器的工作量并且提高数据传输效率,为了达到最大的数据传输效率,选择DMA块模式持续传输方式进行数据传输。

  PCI-E设备或本地处理器设置DMA的PCI以及本地的开始地址、传输字节数和传输方向后,PCI-E设备或本地处理器设置DMA通道开始和使能位(LCS_DMACSR0/1[1:0]=11b)来初始化一个传输。PEX8311访问内部PCI-E地址空间在PCI-E接口和本地总线上产生一个TLP,然后开始传输数据。传输完成后,PEX8311设置相应的DMA通道的通道完成位(LCS_DMACSR0/1[4]=1),声明一个终中断(LCS_INTCSR[16 and/or 8]和/或LCS_DMAMODE0/1[17 and/or 10]到本地处理器或PCI-E接口(可编程)。相应DMA通道的通道完成位可以采用轮询的方式取代中断方式来指示DMA传输状态[4]。图2为DMA块传输的初始化过程。

  在DMA传输中,PEX8311是PCI-E接口的传输发起者(产生TLP)和本地总线的主机,对于同一时间的访问,直从模式或直主模式比DMA模式优先级更高,如图3所示。

003.jpg

3 状态机设计

  状态机的基本要素有三个:输入、输出和状态。根据状态机的输出是否与输入条件有关,可将状态机分为两大类:摩尔型(Moor)状态机和米勒型(Mealy)状态机[5]。

  根据状态机的设计步骤,首先确定状态机的输入输出信号,即DMA传输的控制信号。

 3.1 状态机输入输出信号

  LCLK:输入,PEX8311本地总线系统时间。

  LHOLD:输出,PEX8311本地总线请求信号,上电为低电平,当PEX8311需要控制本地总线时拉高,等到LHOLDA信号响应后,PEX8311获得本地总线控制权。

  LHOLDA:输入,PEX8311本地总线请求应答信号,上电为低电平,在当前总线拥有者响应LHOLD信号后,将LHOLDA拉高。PEX8311未发出LHOLD信号时,不能把本地总线的使用权交给PEX8311。

  LA[31:0]:双向,本地地址总线。提供总线物理地址的高30位。

  LD[31:0]:双向,本地数据总线,当PEX8311配置为Local总线主控时,可以传输8 bit、16 bit或32 bit数据。

  LBE[3:0]#:双向,本地字节使能信号,利用此信号可以实现8 bit、16 bit、32 bit数据传输,同时由该管脚提供辅助增加的地址信号。如果是32 bit数据线,则LBE[3:0]#=0000。

  ADS#:三态双向,内有上拉电阻,地址选通信号,表明地址有效,开始新的总线访问,ADS#在每次传输的第一个时钟周期插入。

  BLAST#:双向,作为输入时,本地总线主机有效该信号来指示总线的最后一次数据传输;作为输出时,PEX8311有效该信号来指示总线上的最后一次数据传输。

  READY#:双向,I/O口就绪信号。在直从或DMA传输下为输入信号,表明可读的数据已经在总线上有效或待写数据已经在下个时钟上升沿到达前准备好;直主模式下为输出信号。

  LW/R#:双向,读写控制位,对于DMA块传输,LW/R#=0为读信号,本地总线到PCI-E方向;LW/R#=1为写信号,PCI-E到本地总线方向。

  3.2 状态机状态转换

  DMA传输模式分为单周期模式和突发模式。本设计中采用单周期模式。单周期模式是默认的数据传输模式。在该模式下,PEX8311每个数据周期都声明一个ADS#。单周期模式的起始地址可以是任意的。

  Local Bus FSM设计分为三个状态:IDLE、WAIT和TRANS。其状态转换如图4所示。

004.jpg

  IDLE:为空闲状态,当FPGA收到lreset复位信号后,进入IDLE状态。

  WAIT:为等待状态,当握手信号LHOLD和LHOLDA完成后进入WAIT状态,进行地址空间判断,等待地址选通信号有效。

  TRANS:为传输状态,当地址选通信号有效后进入传输状态,进行数据传输,直到BLAST#信号有效后,进入IDLE状态。

  FPGA作为Local Bus的控制器,主要负责控制Local Processor与PC端的数据传输。上电初始化完成后,PEX8311向FPGA以及其他后端逻辑电路发送复位信号。当PC端做好接收数据的准备后,PEX8311向FPGA发送Local Bus的总线请求信号LHOLD,FPGA向PEX8311发送请求应答信号LHOLDA,PEX8311获得总线控制权,并进行地址空间判断,向FPGA发送地址选通信号,表明地址有效,进行新的总线访问。在FPGA端,将经过处理的数据存入RAM中,当地址选通信号有效后,置位ram_rd信号,从RAM中将数据读出,并且使READY#信号有效,开始进行数据传输,当FPGA收到有效的BLAST#信号后,在下一周期使READY#信号无效,进入IDLE状态,完成一次DMA传输。

  3.3 Local Bus状态机Verilog设计

  always@(state or ads_n or lhold or blast_n)

  begin

  case(state)

  IDLE:

  begin

  if(lhold)

  next_state<=WAIT;

  else

  next_state<=IDLE;

  end

  WAIT:

  begin

  if(~lhold)

  next_state<=IDLE;

  else if(!ads_n)

  next_state<=TRANS;

  else

  next_state<=WAIT;

  end

  TRANS:

  begin

  if(~lhold|(~ram_rd_delay[2]&ram_rd_delay[1]))

  next_state<=IDLE;

  else

  next_state<=TRANS;

  end

  default:

  begin

  next_state<=IDLE;

  end

  endcase

  end

3.4 仿真

  图5为DMA传输读操作仿真图。

005.jpg

4 结论

  本文设计的Local Bus控制器应用在PEX8311与FPGA的接口中以实现DMA传输,稳定性强,使用灵活,可随时改变为其他工作模式。可应用于视频采集卡、数据采集卡。经过实践证明,基于FPGA设计的控制器灵活性强、可编程能力强,能迅速缩短产品研发上市周期,满足客户需求。

  在Verilog的设计中对代码的优化使用了三段式描述方法[6]。与一段式描述方法相比较,三段式FSM描述方法对FSM寄存器输出的描述只需判断下一状态,然后直接将下一状态的输出用寄存器输出即可,根本不用考虑状态转移条件(米勒状态机)。与两段式描述相比,三段式虽然代码结构复杂了一些,但是换来的优势是使FSM做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在FPGA/CPLD等可编程逻辑器件上的综合与布局布线效果更佳。

 参考文献

  [1] 王齐.PCI Express体系结构导读[M].北京:机械工业出版社,2010.

  [2] PLX.PEX8311AA Data Book[OL].[2014-04-20].http://www.plxtech.com, 2009.

  [3] PLX. Local Bus Primer: introduction to Local Bus signals and protocols[OL]. [2014-04-20].http://www.plxtech.com, 2001.

  [4] 王诚,蔡海宁,吴继华.Altera FPGA/CPLD设计[M].北京:人民邮电出版社,2011.

  [5] 夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2003.

  [6] 黄小红,李峰,倪卫芳.PEX8311芯片数据传输研究[J].电子工程师,2007,33(10):65.


此内容为AET网站原创,未经授权禁止转载。
Baidu
map