一种基于PCI IP核的码流接收卡的设计
时间:03-18
来源:综合电子论坛
点击:
主控逻辑模块
当PCI_MT32作为PCI总线主设备进行主模式操作时,主控逻辑模块对PCI_MT32本地侧信号进行控制以执行PCI主模式写事务,将FIFO的数据传送给从设备。同时还为DMA引擎提供PCI总线所处的状态,如总线是否处于数据阶段,是否有从设备终止等。
模块的主要设计思路:当PCI总线仲裁器允许PCI_MT32成为总线主设备时,PCI_MT32功能模块在本地侧输出lm_adr_ackn信号,表明地址阶段开始,此时主控逻辑模块应在l_adi线提供PCI地址,并在l_cbeni线提供PCI命令。在接下来的数据阶段,如果本地侧数据已准备好,就使lm_rdyn(本地侧主设备准备好)信号有效,并在l_adi线提供数据,在l_cbeni线提供字节使能。如果从设备被选中且准备好,数据传输就开始了。最后,通过通知PCI总线当前周期是本地侧最后的数据阶段,在完成这次数据传输后就进入总线空闲状态,PCI_MT32不再是总线主设备,一次数据传输也就结束了。
从控逻辑模块
当PCI_MT32作为PCI总线从设备进行目标事务操作时,从控逻辑模块对PCI_MT32本地侧信号进行控制。PC通过读本地侧相应寄存器,了解当前状态,通过对相应DMA寄存器的写操作,来启动DMA引擎。由于对寄存器的读写只用到目标单周期事务,且大部分信号由主机控制,从控逻辑相对简单。主要是保证在要存取的目标地址命中,且frame信号有效时,trdyn(从设备准备好)信号有效。
图3 DMA状态机流程图
DMA引擎模块
DMA引擎模块由DMA寄存器、DMA状态机等模块构成,当PCI_MT32作为PCI总线主设备进行主模式写操作时,它与主控逻辑模块共同将FIFO缓存输出的数据通过DMA操作发送到PCI_MT32本地信号侧。 其中,DMA寄存器的地址直接映射到PCI的地址空间,其基地址由PCI_MT32中的配置寄存器Bar0决定。主机通过访问这些寄存器来控制DMA操作。寄存器包括控制状态寄存器、PCI地址寄存器和中断状态寄存器。DMA状态机模块流程如图3所示。
以下对DMA状态机进行简要描述:状态机无数据传输时默认停留在空闲状态。当PC写控制状态寄存器中的启动位,就启动状态机,进入装载寄存器状态。自动装载PCI地址寄存器后进入等待请求状态。如果FIFO中的数据已经半满,进入请求状态申请占用PCI总线,接着进入等待允许状态,等待PCI设备获得总线的控制权。当PCI设备成为总线主设备,就进入准备状态。判断PCI总线的地址阶段结束将要进入数据阶段,则进入传输状态,进行数据传输。此时,如果从设备提出终止,则返回寄存器有效状态,根据情况重新申请总线的控制权;如果本次DMA数据传输结束或出现PCI异常中断、PCI系统错误、PCI奇偶校验错误、FIFO满等错误时,则分别进入结束状态或错误状态,写中断状态寄存器的相应位,同时发出中断信号。PC收到中断后,读中断状态寄存器确定中断类型,以进行下一步操作。最后返回空闲状态,并清除中断。
图4 PCI DMA传输仿真波形图
FIFO逻辑控制模块
FIFO逻辑控制模块根据CY7B933输出的状态信号,删除同步字K28.5,只将有效的数据读入,并将数据送入异步FIFO缓存。当FIFO空、半满、满时,对相应寄存器进行操作或通知DMA引擎模块,以防止数据的溢出或空读。
异步FIFO在核心控制模块中,主要起到两个作用。一是数据缓存,在系统进行DMA操作,将数据从ASI接口写入PC内存时,DVB-ASI数据仍在源源不断地输入系统,FIFO可以将这些数据缓存,以防止数据丢失。二是时钟隔离作用,输入的ASI信号时钟是27MHz,而PCI时钟达到33MHz,这就要求对两个频率不同的时钟进行同步,异步FIFO的数据输入和输出分别使用不同的时钟,从而实现时钟的隔离和无缝拼接。由于本设计对FIFO容量的要求较大,因此不采用Megafunction技术构造,而使用专门的高速FIFO芯片。
设计结果
在Quartus-II中进行了vhdl源程序仿真。图4是用DMA方式进行PCI传输结果的仿真波形图。其中ASI_D为模拟输入的8位ASI码流,在对相应的DMA寄存器进行操作后,启动DMA引擎,图中①处PCI_MT32通过拉低reqn信号发出总线占用请求信号,②处PCI总线仲裁器通过拉低gntn信号允许PCI_MT32成为主设备。③处进入地址阶段,PCI_MT32在ad线上提供地址,在cben线上提供总线命令。在接下来的多个数据阶段(图中④处),PCI_MT32在ad线和cben线上分别提供ASI_D输入的数据和字节使能,由于输入ASI信号是8位,而ad线为32位,因此利用ad信号的低8位来传输数据,可见,输出数据与ASI_D输入的数据相同。由于DMA传输长度的关系,本图最后通过模拟从设备断开(图中⑤处),终止了这次传输。由于DMA传输没有结束,在终止后,DMA状态机根据判断状态,还会自动继续传输。从图中可以看出,framen、irdyn、trdyn、devseln等接口控制信号完全符合PCI时序的要求。实现了将ASI信号通过PCI总线与PC进行实时数据传输的目的。图中32位ad信号的高位没有得到充分利用,如果需要,可以很方便地利用它们将电路升级为两路或4路的多路DVB-ASI码流接收卡。如果使用支持64位PCI总线的PCI_MT64功能模块,则最多可以实现8路ASI信号的接收。
当PCI_MT32作为PCI总线主设备进行主模式操作时,主控逻辑模块对PCI_MT32本地侧信号进行控制以执行PCI主模式写事务,将FIFO的数据传送给从设备。同时还为DMA引擎提供PCI总线所处的状态,如总线是否处于数据阶段,是否有从设备终止等。
模块的主要设计思路:当PCI总线仲裁器允许PCI_MT32成为总线主设备时,PCI_MT32功能模块在本地侧输出lm_adr_ackn信号,表明地址阶段开始,此时主控逻辑模块应在l_adi线提供PCI地址,并在l_cbeni线提供PCI命令。在接下来的数据阶段,如果本地侧数据已准备好,就使lm_rdyn(本地侧主设备准备好)信号有效,并在l_adi线提供数据,在l_cbeni线提供字节使能。如果从设备被选中且准备好,数据传输就开始了。最后,通过通知PCI总线当前周期是本地侧最后的数据阶段,在完成这次数据传输后就进入总线空闲状态,PCI_MT32不再是总线主设备,一次数据传输也就结束了。
从控逻辑模块
当PCI_MT32作为PCI总线从设备进行目标事务操作时,从控逻辑模块对PCI_MT32本地侧信号进行控制。PC通过读本地侧相应寄存器,了解当前状态,通过对相应DMA寄存器的写操作,来启动DMA引擎。由于对寄存器的读写只用到目标单周期事务,且大部分信号由主机控制,从控逻辑相对简单。主要是保证在要存取的目标地址命中,且frame信号有效时,trdyn(从设备准备好)信号有效。
图3 DMA状态机流程图
DMA引擎模块
DMA引擎模块由DMA寄存器、DMA状态机等模块构成,当PCI_MT32作为PCI总线主设备进行主模式写操作时,它与主控逻辑模块共同将FIFO缓存输出的数据通过DMA操作发送到PCI_MT32本地信号侧。 其中,DMA寄存器的地址直接映射到PCI的地址空间,其基地址由PCI_MT32中的配置寄存器Bar0决定。主机通过访问这些寄存器来控制DMA操作。寄存器包括控制状态寄存器、PCI地址寄存器和中断状态寄存器。DMA状态机模块流程如图3所示。
以下对DMA状态机进行简要描述:状态机无数据传输时默认停留在空闲状态。当PC写控制状态寄存器中的启动位,就启动状态机,进入装载寄存器状态。自动装载PCI地址寄存器后进入等待请求状态。如果FIFO中的数据已经半满,进入请求状态申请占用PCI总线,接着进入等待允许状态,等待PCI设备获得总线的控制权。当PCI设备成为总线主设备,就进入准备状态。判断PCI总线的地址阶段结束将要进入数据阶段,则进入传输状态,进行数据传输。此时,如果从设备提出终止,则返回寄存器有效状态,根据情况重新申请总线的控制权;如果本次DMA数据传输结束或出现PCI异常中断、PCI系统错误、PCI奇偶校验错误、FIFO满等错误时,则分别进入结束状态或错误状态,写中断状态寄存器的相应位,同时发出中断信号。PC收到中断后,读中断状态寄存器确定中断类型,以进行下一步操作。最后返回空闲状态,并清除中断。
图4 PCI DMA传输仿真波形图
FIFO逻辑控制模块
FIFO逻辑控制模块根据CY7B933输出的状态信号,删除同步字K28.5,只将有效的数据读入,并将数据送入异步FIFO缓存。当FIFO空、半满、满时,对相应寄存器进行操作或通知DMA引擎模块,以防止数据的溢出或空读。
异步FIFO在核心控制模块中,主要起到两个作用。一是数据缓存,在系统进行DMA操作,将数据从ASI接口写入PC内存时,DVB-ASI数据仍在源源不断地输入系统,FIFO可以将这些数据缓存,以防止数据丢失。二是时钟隔离作用,输入的ASI信号时钟是27MHz,而PCI时钟达到33MHz,这就要求对两个频率不同的时钟进行同步,异步FIFO的数据输入和输出分别使用不同的时钟,从而实现时钟的隔离和无缝拼接。由于本设计对FIFO容量的要求较大,因此不采用Megafunction技术构造,而使用专门的高速FIFO芯片。
设计结果
在Quartus-II中进行了vhdl源程序仿真。图4是用DMA方式进行PCI传输结果的仿真波形图。其中ASI_D为模拟输入的8位ASI码流,在对相应的DMA寄存器进行操作后,启动DMA引擎,图中①处PCI_MT32通过拉低reqn信号发出总线占用请求信号,②处PCI总线仲裁器通过拉低gntn信号允许PCI_MT32成为主设备。③处进入地址阶段,PCI_MT32在ad线上提供地址,在cben线上提供总线命令。在接下来的多个数据阶段(图中④处),PCI_MT32在ad线和cben线上分别提供ASI_D输入的数据和字节使能,由于输入ASI信号是8位,而ad线为32位,因此利用ad信号的低8位来传输数据,可见,输出数据与ASI_D输入的数据相同。由于DMA传输长度的关系,本图最后通过模拟从设备断开(图中⑤处),终止了这次传输。由于DMA传输没有结束,在终止后,DMA状态机根据判断状态,还会自动继续传输。从图中可以看出,framen、irdyn、trdyn、devseln等接口控制信号完全符合PCI时序的要求。实现了将ASI信号通过PCI总线与PC进行实时数据传输的目的。图中32位ad信号的高位没有得到充分利用,如果需要,可以很方便地利用它们将电路升级为两路或4路的多路DVB-ASI码流接收卡。如果使用支持64位PCI总线的PCI_MT64功能模块,则最多可以实现8路ASI信号的接收。
- 嵌入式系统的PCI接口设计(11-18)
- cPCI台热切换原理和实现(01-23)
- 基于Wishbone片上总线的PCI Bridge核的研究和应(01-26)
- PCI接口扩展卡的快速开发方案(01-23)
- 基于PCI总线的通用网络协议实验平台(01-24)
- 基于PCI总线的双DSP系统及WDM驱动程序设计(01-26)