随着数字化广播电视技术的迅速发展和基于mpeg-2标准的图像压缩和复用技术的完善,利用pc对大容量信息的处理变得日益重要,如基于pc的软复用器的实现,使得通过pc接收dvb(数字视频广播)码流已逐渐成为一项不可替代的多媒体数据接收技术。因此,设计基于pc平台的dvb码流接收卡是数字广播电视发展的需要。
由于dvb-asi信号的平均传输速率为270 mbps,而dvb传输流又要求保证接收的实时性,因此本文选择了pci总线。33mhz、32位的pci总线的数据传输速率最高可达133mbps, 完全可以满足高速实时传输的需求。选择了altera公司的pci编译器软件包来实现pci接口控制电路。该软件包为pci接口提供了一个完整的解决办法,包含了pci控制电路的所有功能。用户可以通过修改参数生成所需的ip核模块,以设计自己的外部设备接口逻辑。本文选择了其生成的pci_mt32功能模块。
系统硬件模块设计
系统的硬件电路设计要求:能将传输速率为270 mbps的串行dvb—asi码流实时、无损地通过pci接口传输到pc,以供pc上的应用程序做进一步处理。在操作和使用上要方便,在设计上要求结构紧凑、接口简单、性能可靠、易于升级。系统硬件框图如图1所示。
从图中可以看出,由于使用了fpga及pci ip核,使整个硬件电路显得特别简洁。它主要由dvb码流输入模块和核心控制模块组成。串行dvb传输流经同轴电缆进入dvb码流输入模块,转换为8位并行输出。核心控制模块对并行数据进行缓存,并采用dma方式传输给pci总线,完成本地总线和pci总线的可靠通信。
dvb码流输入模块
本文选用asi接口。asi信号由同轴电缆经bnc接头输入,经过互感(用pe65508芯片)转换为pecl(正向发射极耦合逻辑)差分电平信号,再经过耦合电路,到达cy7b933的差分线输入端。 cy7b933是cypress公司的一种用于点对点高速串行数据通信的接收芯片,它完成码流输入模块的核心功能。它有三种工作模式,这里选用它的解码模式对输入信号进行8b/10b解码和串并转换。最后输出经过字节对齐的8位并行tll信号,输出的信号包括 mpeg-2传输流和作为同步字使用的逗号字符(在8b/10b传输码规则中定义为 k28.5专用字符),其输出速率恒定为27mbps。
图1 系统硬件框图
核心控制模块
核心控制模块由fpga控制电路和异步fifo组成。主要完成对输入asi信号的缓存和对pci总线信号的控制的功能。其中最主要的部分是fpga控制电路。基于整个系统的性能的考虑,选择altera公司的ep1c12。这款芯片有12060个逻辑单元,52个ram块等资源,完全可以支持本设计的要求。
fpga控制电路内部框图如图2所示,它是本设计的核心部分,对输入的asi信号保留有效的dvb传输流,发送到fifo输入端进行缓存。并将fifo缓存后输出的数据用dma传输方式通过pci总线实现对pc内存的存取,同时利用fifo的标志信号控制dma传输过程。下面对fpga控制电路的各模块进行介绍。
pci_mt32功能模块
本文在选择pci接口芯片时,选择了altera公司的pci 编译器软件包,它可以参数化地生成用于pci接口的ip核----megacore。这个可编译和综合的megacore有以下4种宏功能模块:pci_mt64、pci_mt32、pci_t64和pci_t32。它们都可以完成总线协议的转换,将复杂的、电气和时序要求高的pci总线逻辑转换为易于操作的本地接口逻辑,遵循pci总线协议2.2版,经过严格的工业级验证并支持多款优化fpga。其中,pci_mt32是支持33/66mhz工作频率、32位pci总线、支持主/从模式的pci ip功能模块。考虑到市场的需求,通常的pc主板都支持32位pci,且在主模式下dma控制器才能工作,因此选择了pci_mt32。 本地信号都以l (local)开头,其中以lt_开头的是从控信号,以lm_开头的是主控信号。
要使用pci_mt32功能模块就要了解其配置寄存器,配置寄存器中的基址寄存器最为重要,pci_mt32共提供了6个基址寄存器,可以映射6个存储器或i/o 空间。在操作系统启动前后,基址寄存器分别起到两个作用。在操作系统启动前,基址寄存器存放定义的空间长度。以使加电软件以确定在系统中有多少存储器以及系统中的 i/o 控制器要求多少地址空间,然后才可以把 i/o 控制器映射到合理的地址空间并引导系统。在操作系统启动后,基址寄存器又要起到存放基地址的作用,通过对要存取的基址寄存器用配置写操作写入基地址,再通过基地址加偏移量就可以访问想要存取的空间。
图2 fpga控制电路内部框图
主控逻辑模块
当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信号的接收。
结语
本系统采用fpga加pci ip核的模式实现对高速、大容量dvb传输流的实时传输,实现了系统设计的目标。选择pci总线可以保证在足够的带宽下进行数据传输。fpga的应用易于在线升级电路,扩充平台的功能。ip核的使用使硬件电路更为简洁、可靠。经过验证,本文设计的系统可以很好地实现dvb-asi信号的接收功能,同时,也可以作为其它dvb-asi应用的基础平台,有着良好的应用前景。
门禁市场快速发展的动力来自于哪里
从神话到落地——AI工程化浅谈
小米65英寸OLED电视:四面无边全面屏+玻璃底座+浮光呼吸灯
比特币如何解决双重支付的问题
国产芯片排名靠前的企业有哪些
PCI接口IP核的DVB码流接收系统设计
中国太阳能业遭到外资围攻
双十二电动牙刷怎么选?这几款品牌不容错过!
Cache与性能优化精彩问答38条
埃安11月交付汽车4.16万辆,今年累销同比增长80%
MTI Instruments 1510A便携式信号发生器的特点
仿真反射详解:DDR3的时钟信号
ISO实现多媒体流的高速传输
中国电信联通公示 5G 消息平台建设工程中标候选人:中兴、华为入围
ARM将斥巨资收购数据分析公司Treasure Data?
说说大动物麻醉呼吸机的各项指标
LA7820引脚功能的电压资料参数
基于ARM S3C2410的PDA人机接口电路
随着技术的逐步成熟,3D打印又是否春天将至
5G移动基础设施建设加快中国的数字化转型进度