首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 电子制作
基于NiosⅡ软核的嵌入式多路视频点播系统
来源:本站整理  作者:佚名  2008-04-25 11:41:00



0 引言

VOD(视频点播)技术为人们提供了一种交互式的信息获取方式,并随着技术的完善不断扩展着其应用范围和影响力。传统的VOD系统主要是以服务器作为视频的信息源,通过局域网进行点播,适合服务于住宅小区或公营机构。而对于缺乏网络支持、移动性较强的环境,如公共交通工具,传统的VOD系统显然难以实现。

本文针对特定的用户环境,提出采用Altera的SOPC(片上可编程系统)解决方案,利用NiosⅡ软核处理器和FPGA(现场可编程门阵列)配置灵活、IP资源丰富、硬件设计和软件编程方便的特点,通过扩展IDE(集成开发环境)接口,以硬盘作为存储媒介,实现多路VOD系统的设计方案。该系统体积小、成本相对低廉,体现了嵌入式电子产品的优势。与传统的VOD系统相比,使用范围更具针对性,装配更灵活,升级扩展更方便,具有很广阔的前景。

1 系统功能划分

该系统从功能上可划分为系统控制核心、多路视频数据读取单元、视频解码模块和用户点播终端4个部分。

1.1 系统控制核心

系统以NiosⅡ软核为控制核心,主要负责硬盘初始化、提取视频节目簇链、生成节目列表、人机交互控制等工作。上电后,NiosⅡ控制器先初始化硬盘的传输模式和读写状态,然后读取主引导记录,寻址到基本分区的操作系统引导记录区,计算保留扇区和FAT(文件分配表)大小,分别得到FAT和根目录的入口。对目录树上的文件进行分析后,提取出视频文件的文件名、文件首簇,根据首簇指针再次查找FAT,追溯出文件的簇链,最后烧写到Flash存储器中。完成以上工作后,初始化中断,对用户端进行轮询,等待用户请求,分析用户指令包,作出相应响应。

1.2 多路视频数据读取

为实现海量视频数据的存取,该系统需外扩展硬盘作为存储介质。通过用户自定义的硬盘DMA(直接存储器存取)控制模块实现对硬盘数据的读写,功能包括为上层程序提供控制硬盘和多路数据输出的接口,产生硬盘DMA操作状态机信号。数据从硬盘读出后,以乒乓操作的方式交替存储在两片SRAM中,内存中的数据按照对应的输出端口并行排列。同时,根据用户终端提出的点播需求,数据往点播端口扇出。

1.3 视频解码

本系统采用外扩展的视频解码板作为硬解码模块。解码芯片是LSI LOGIC公司CL680视频CDMPEG 1音频/视频解码器。该芯片以CL480/484架构为基础,用于MPEG-1音频/视频解码,整合数字NTSC/PAL编码功能和加强KTV功能。

1.4 用户点播终端

为解决多用户终端远距离通信的问题,系统采用RS-485收发器作为主机与用户点播终端的连接桥梁。RS-485收发器采用平衡发送和差分接收,具有抑制共模干扰的能力,加上接收器的高灵敏度,能检测低达200 mV的电压,极大地提高信号传播的可靠性。

主机与终端间的通信方式采用类似令牌总线的通信协议。主机不断发出查询包,收到查询包的客户端被赋予发送控制命令的权限,客户端可选择发送命令或直接丢弃查询包,这样就避免了多个客户端同时向总线发送数据、导致通信失败的情况。

系统采用MB90092视频字符叠加模块,在用户终端屏幕中叠加功能菜单,建立友好的用户操作界面,用户可通过控制面板进行点播操作。

2 系统设计

2.1 系统硬件结构

系统硬件结构如图1所示。

为实现对硬盘的控制及两片内存的乒乓控制,系统使用了定制的DMA控制模块,通过SOPC Builder软件,以用户逻辑形式挂到Avalon总线上。

2.1.1 DMA控制模块

DMA控制模块框图如图2所示。

DMA控制模块主要功能是控制硬盘进行多路视频数据的并发传输。为保证视频质量,需考虑到数据读写速度的提高。本系统采用按照ATA/ATAPI-6协议编写的DMA模块,控制置硬盘以Ultra-DMA方式传输数据,可实现最大传输速率为66 Mbit/s,满足多路MPEG-1视频码流的并发传输。除了解决传输速率问题,该系统涉及到同时处理多路数据的读写,因此引入相应的功能子模块,以乒乓操作的方式控制两片SRAM的读写,并对多路数据的存储分区进行地址管理。

模块的主要子模块有DMA控制器、DMA状态机、switch和SRAM控制器。

DMA控制器作为Avalon总线与硬盘的接口,主要功能是接收上层程序的控制命令,再对硬盘的控制寄存器进行读写,在NiosⅡ程序的控制下将硬盘的传送模式设置为Ultra-DMA模式进行数据传输。

DMA状态机模块是根据T13小组发布ATA(ATA/ATAPI-6)文档为设计标准,用Verilog HDL(硬件描述语言)实现的有限状态机。在控制终端的设置下传输方式转为Ultra-DMA模式后,硬盘向控制器发出DMA请求,此时DMA状态机启动。主机端向硬盘发送响应信号,握于成功,解除DMA STOP状态,同时使IDE_HDMARDY有效表示主控端已准备好。接着,数据流从硬盘流出,并发出一双沿锁存信号,SRAM控制器在该信号控制下将数据锁存入内存。直到DMA请求结束,STOP信号生效,DMA传输结束。整个过程遵守ATAPI-6协议,使用Verilog HDL描述出硬盘DMA传输过程的时序。

Switch和SRAM控制器模块主要负责在DMA传输过程中在两片SRAM间调度数据,从而实现数据的乒乓存取。Switch模块用于完成两块RAM之间的切换及数据的分区存储。它工作于两个状态:以Flag为标志位,Flag为0时做写RAMl的操作;Flag为1时做写RAM2的操作。在DMA方式下,一次DMA读取硬盘一个扇区刚好写满一片RAM,Switch模块挂起数据写入,等待中断。当另一片RAM中的数据被全部读出后中断发生,此时Switch模块交换两片内存的读写端口地址。

2.1.2 RAM分区读写

由于系统要提供多路视频的播放,因此,在进行DMA传输的过程中需实现各路视频数据的分区读写。在写内存时,采用双时钟控制机制。若要实现32路VOD系统,将一片512 k的RAM分为32个单元,每个单元长度为16 k,定义RAM的地址为:wraddress2=wraddressl+wraddress

wraddressl为每个内存分区的基地址,它的取值分别是0 k,16 k,32 k,48 k,…,496 k,另外是一个偏移地址wraddress。内存分区方式如图3所示。

定义时钟C0为写内存分区时钟,C1为写内存偏移时钟,C0的频率为写C1的32倍。当偏移地址为某一值时,权值地址的取值会从0 k~496 k遍历一次,即每一内存单元读写周期,写入每个分区的一个单元。

同样,对内存中的数据也要分区读出并送往相应端口。该模块使用一种内存地址的计数方法:将地址线的长度设置为10位,再将低5位的地址和高5位的地址互换,目的是从高5位开始计数,计数满了进位到低5位。高5位表示分区地址,低5位为分区的偏移地址,地址从第6位开始累加,刚好遍历32个分区,完成高5位的依次累加后,进位到低5位的分区偏移地址,表示开始读下一轮分区的第2个内存单元。如此类推。根据计算出的地址可实现对各分区的数据依次读取。地址算法示意图如图4所示。

2.1.3 移位输出模块

该模块主要实现的功能是:在分路时钟的控制下,将从内存中读出的多路数据移位输出。该模块定义了一组长度为16位的移位寄存器。数据I/O读写的时间和速度由video_clock确定,video_clock的频率是12.5 MHz,负责控制SRAM_R控制器,移位输出模块和视频解码板的同步。模块中还设置了一个累加计数器div3,工作频率与video_clock相同。当SRAM_R控制器依次将各路视频文件读人一个寄存器后,每一个时钟下降沿到来时移出1位,直至全部移出。若加大时钟频率和缓冲内存空间,可以增加移位寄存器的数目,从而增加视频输出端口的数量,实现系统点播路数的增加。

2.2 系统软件工作流程

系统程序划分为主机程序和点播终端两大部分。主机程序主要实现3个功能:管理硬盘,提取簇链;播放节目,点播控制;响应请求,串口中断。管理硬盘的方式主要是通过自定义的DMA控制模块对硬盘的控制寄存器进行操作,驱动硬盘后访问FAT32文件系统下的相应扇区,追朔簇链,将簇链提取出来写入到Flash ROM中,为播放做准备。点播端程序则主要负责生成指令包。本系统软件工作流程如图5所示。

本系统要处理多路视频数据,并且视频信号数据量大,在点播过程中系统必须集中大部分处理器时间来处理各路视频信号,而视频文件的文件名和簇链结构必须通过相对低速的PIO操作来获得。为了解决簇链读取速度的瓶颈,本文设计了适合本系统应用的数据结构来优化对数据的管理,加快读取速度。定义的数据结构有:

客户端的状态和播放进度也由专门的结构体来记录和管理。定义的数据结构有:

3 结束语

SOPC=NiosⅡ软核+FPGA这个创新的概念为嵌入式设计带来的极大的便利和灵活性。利用强大的SOPC开发平台和丰富的IP资源,可大量缩短系统设计周期,而且系统的改进也变得十分方便。本文提出的通过把用户自定义的硬盘读写模块整合到SOPC平台上,与NiosⅡ无缝接合,成功实现了多路视频数据的并发点播。

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:97,667.97000 毫秒