一. 引言
目前监视器有CRT、液晶等各种显示类型,这些产品质量和技术规格有非常大的差异。目前国内外还没有针对广播级数字图像监视器图像质量的测试指标和测试方法标准,只有各个厂家给出的各个设备的出厂指标,应用单位无法得到真实的高清指标,也无法对其进行测量鉴定和验收。为满足测试的灵活性需要,需要有简便的信号源发生器,以满足各单位在数字电视节目制作、数字电视设备选型、系统设计、验收以及节目制作的需要。
SD卡(Secure Digital Memory Card)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,目前,SD卡的存储容量已高达16GB,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。
本文采用YUV4:2:2 8bit格式信号源,以SD卡作为存储设备,基于Altera公司的NiosⅡ软核进行SD卡的数据读取,将读取的数据存入SRAM,由FPGA硬件开发进行SDI信号的输出。
二. 数字监视器的测试信号及测量方法研究
根据SJ/T 11348-2006数字平板显示器件测量方法和GY/T 11-092 “广播用图像监视器技术要求”,测量数字标准清晰度电视所需要的信号有:彩条信号、全白场、全黑场、极限八灰度等级信号、白窗口、黑窗口、黑白窗口、棋盘格信号的参数。
根据欧广联的技术标准Tech. 3213-E E.B.U. STANDARD FOR CHROMATICITY TOLERANCES FOR STUDIO MONITORS和Tech. 3263-E-second edition SPECIFICATION OF GRADE-1 COLOR PICTURE MONITORS以及SJ/T 11348-2006数字电视平板显示器测量方法主要有:亮度、对比度、亮度均匀性、白色色度误差、基色色度坐标、白色色度不均匀性、可视角、残留影像和响应时间的测试方法。
三. 基于SOPC软核的SD卡的读取
1. 嵌入式FAT文件系统
Altera公司推出的NIOS II嵌入式处理器系统,是目前比较流行的SOPC。它通常由NIOS II处理器、Avalon总线结构和各种外围设备(包括SDRAM控制器、DMA、CF卡控制器以及用户自己设计的外围设备等)的IP核三部分组成,Altera的SOPC builder系统开发工具可以自动生成这些组件以及联结它们的总线。
为了便于控制器对SD卡进行操作,必须用文件系统来对SD卡进行管理,由于SD卡上的视频生成文件是由装有Windows操作系统的PC写入,其文件系统为FAT12、FAT16或FAT32。所以在本控制器中需要实现兼容FAT12、FAT16 和FAT32 的文件系统。
在本控制器的设计中,需要对SD卡设计嵌入式文件系统,为视频文件的读取和管理提供了有效的手段。嵌入式文件系统以中间件的形式来设计,为应用程序提供初始化、打开、读取、关闭、删除等API函数接口。嵌入式文件系统划分为三层结构:硬件驱动层、系统功能层及用户接口层。其中硬件驱动层实现对SD卡底层操作,抽象底层硬件并为上层实现提供硬件接口无关函数;
系统功能层实现文件系统管理算法,提供文件系统功能函数;用户接口层封装功能层函数并为用户程序提供文件应用编程操作接口API函数,屏蔽文件系统实现细节。本嵌入式文件系统设计层次图如图1所示。
图1 嵌入式文件系统中间件架构
此文件系统包括硬件驱动层、系统功能层和用户接口层。硬件接口层包含了对应的硬件设备驱动,支持SD模式下的SD卡设备。系统功能层主要处理FAT文件系统中FAT表、目录、文件管理,是文件系统的核心。本项目设计的嵌入式文件系统兼容FAT12/16/32三种文件系统,能够自动识别、区分和处理。
用户接口层提供了应用程序所需的API函数,包括初始化、读取、删除等函数。根据本系统实际需要,用户接口层的API 函数重点为文件的打开、读取操作,下面以读文件为例介绍其函数流程,其流程图如图2所示。

图2 文件系统读文件流程图
2. SOPC硬件开发
首先在Quartus II中建立自己的工程,然后启动SOPC Builder添加模块集组件库或用户自定义模块,添加各模块的时候,即可对NiosII CPU和各外设模块的特性,例如存储器的大小,SDRAM的时序参数等,以及各IP模块在系统中的映射地址分配等进行设定。设定复位地址和异常地址后,启动SOPC Builder中的Generate,使之生成用于综合和仿真的文件。然后使用Quartus II软件中的Assignment->pins对各模块端口引脚锁定,对生成的NiosII系统进行仿真、综合、适配和下载。 该系统所涉及的Nios II硬件系统包括如下模块:
Nios II/s处理器核;外部SRAM;三态桥;4位输入\输出PIO(SD卡data接口);8位输出PIO(SD卡的CMD和CLK);PLL锁相环;JTAG UART;
3. SOPC软件开发
启动Nios II IDE,使用它提供的New Project向导,建立C/C++应用工程和系统库工程。在这个步骤中需要指定新工程名、目标硬件及工程模板。工程名由用户自己命名,目标硬件就是SOPC Builder生成的ptf文件,在本设计中为monitor_test.ptf,Nios II IDE需要从这个文件中获取该系统的相关信息。在向导中还可以选择工程模板,它可以帮助用户尽可能快速地推出可运行系统,每个模板包括一系列软件文件和工程设置。
在新建应用工程的过程中,NiosII IDE会为工程创建系统库system library,系统库是驱动程序集,提供对目标硬件的访问。
在程序窗口,用户根据自己的需求对模板中的源程序进行编辑和修改,完成后,先对C/C++应用工程系统属性进行设置,以使编译器编译出更高效、占有空间更小的代码。具体操作为:将应用工程和系统库工程中的Optimization Level均选择为Optimize most(-O3)。
然后,在属性对话框中打开System Library,打开属性页面进行设置。建立工程时,systemlibrary页面为根据自己的系统建立的默认设置,用户可根据自己的需求修改相关的设置。
在本设计中,在Use auto-generated linker script选项中选择SRAM,一般情况下不设置成flash,因为flash运行速度较RAM要慢得多。标准输入(stdin)、标准输出(stdout)和标准错误(stderr)可根据用户需要自行设置,在本系统中有jtag_uart可选择,而NiosII IDE的console是jtat_uart的终端,用户能很方便的观察程序运行的结果。使用标准输入、标准输出、标准错误函数是最简单的控制I/O设备的方法。HAL系统库在后台管理sdin、stdout和stderr函数,它可以使用户通过相关通道来发送和接收字符。例如,系统库会控制printf()的输出给标准输出,控制perror()的输出给标准错误。假设stdout设置成uart,则下面的简单C/C++程序即能将字符hello world!发送给uart,通过串口终端或串口调试助手可以看到结果。
到此,应用工程系统属性设置完毕,接下来对工程进行编译连接,生成elf文件。编译没有错误,在将程序下载到目标板之前,先在NiosII IDE里进行调试,验证程序功能的正确性。调试前将USB-Blaster II下载线连接到硬件平台的JTAG口,接上电源,同时将硬件配制文件(.sof文件)下载到目标板上的FPGA中。
选择Run->Debug As->Nios II Hardware,即可进入调试界面进行硬件调试。调试完成,就可以在目标硬件上运行程序了。
4. SD卡文件读取的实现
在向SD卡发送CMD0之前需要发送74个时钟,因为上电初期,电压上升过程根据SD卡组织的计算约合64个CLK周期才可以到达SD卡的正常工作电压;后10个CLK是为了使主机与SD卡同步。在发送CMD0时将CS置0,然后读取SD卡的响应,如果为01,则继续发送命令CMD1,如果不是01,则重新进行74个时钟延迟,重新发送CMD0。如果CMD1的响应为00,则说明初始化成功。其流程图如图3所示。

图3 SD卡初始化流程图
SD卡支持单块(命令字为CMD17) 和多块(命令字为CMD18) 读操作。多块读操作指的是从制定的位置开始读,直到SD卡接收到一个停止命令(命令字为CMD12) 才停止读操作。单块的读操作数据块的长度只能是512字节。
本设计采用的流程图如图4所示,操作时,可首先向SD卡发送读数据块的命令字CMD17, 在接收到SD卡的响应信号(0X00) 后,再根据默认起始地址(0xFE), 然后读取512字节的数据, 并后跟两字节的CRC校验,当发送CMD12时终止读操作。

图4 SD卡读操作流程图
四. 基于FPGA的SDI接口的研究与开发
SDI接口是一种基于标准清晰度视频格式的串行数字接口,传送4:2:2串行数字分量信号,传输速率高达270Mbps。SDI接口硬件电路由电源电路、均衡器clc014、串并转换芯片CLC011、驱动器clc007、并串转换芯片cy7b9234、Cyclone III EP3C25Q240等芯片组成。
本文在FPGA平台上完成如图5所示功能,由SRAM读出10bit并行数据进入FIFO,FIFO的读时钟,读使能、写时钟、写使能可以分别控制;FIFO读出的10bit并行数据进入编码器,进行扰码和生成NRZI码,输出的10bit并行数据进入SDI模块的并串转换,从而完成SDI的输出。

图5 本课题原理图
YUV4:2:2格式中每个像素16位,FOURCC(Four Character Code)码为UYVY,其中每个像素都是编码为四个连续字节的两个像素。这样会使得色度水平下采样乘以系数2。此格式,色度字节和亮度字节是翻转的,如图6。

图6 UYVY内存布局
本文按照YUV 4:2:2的格式的文件存储,计算得出每行的抽样点为1728(864*2)个,一共[page]625行。在程序开始先设置一个行、列的循环累加的程序,随着时钟上升沿的到来,列数(cnt_line)就会自动加1,等加到1728的时候cnt_line回到1,而行数(cnt_row)会加1,如此一来便可以方便的对每一帧图像每行每列的数据进行发送。
在行消隐期间,留出了8个数据字的位置,用来传送定时基准信号。对于625/50扫描标准,EAV的位置是字1440-1443,SAV的位置是1724-1727。每个定时基准信号由4个字组成,这4个字的数列可用16进制计数符号表示为:3FF 000 000 XYZ。前三个字3FF、000和000是固定前缀,作为定时标志符号,只为SAV和EAV同步信息的开始做出标志。XYZ代表一个可变的字,它包括确定的信息:场标志符号;垂直消隐的状态;行消隐的状态。图7描绘出625/50扫描标准的每桢定时基准信号的位置。

图7 625/50扫描标准的定时基准信号位置
XYZ为10bit的字,其中比特0和比特1定为二进制数0,以便与8比特量化接口兼容,比特9是1,比特6、7、8是可变二进制数,分别用H、V、F表示。F是场标志符,F=0表示在第一场期间;F=1表示在第二场期间。V是垂直消隐标识符,V=0表示有效场期间;V=1表示场消隐期间。H是行消隐标识符,H=0表示有效行开始出(SAV);H=1表示有效行结束处(EAV)。
字XYZ中的比特2、3、4、5的值也是可变的,他们取决于比特F、V、和H的值,可对F、V、H进行2比特误差检测以及1比特误差校正,表1表明了P0、P1、P2、P3与F、V、H间的关系。
因此,本设计在第1440和第1724列发送3AA(1111111111),第1441、1442、1725、1726列发送000(0000000000),在第1727列按照图6所示发送其相应的SAV,在第1443行按照图7所示发送相应的EAV。从第0列到第1439列按照Cb、Y、Cr顺序发送有效数据。在场消隐和行消隐期间,没有用于传送辅助数据的对应Y样点的字必须赋予16进制040,对应Cb和Cr样点的字必须赋予16进制数200。
本文编码部分由FPGA来实现,在编码模块里设置了2个模块,倍频模块和FIFO模块。倍频模块完成对27MHz输入信号进行10倍频处理,然后按照扰码编码原理进行编码,编码是按并行数据的每一比特位进行的,在编码模块的输出端是进行扰码后的10bit并行数据。

五. 小 结
本文完成了信号源的设计和测试方法的研究,并完成了信号发生器的实现。最终实现了在计算机中生成的监视器测试信号输入到本硬件板卡上,再通过SDI接口输出,显示到数字监视器上。根据GY/T 11-092“广播用图像监视器技术要求”中关于监视器性能要求,由光电转换装置以及示波器完成相应参数的测试。
本文中针对各个测试指标建立以YUV4:2:2 10bit的数字监视器测试信号源,然后用PC将SD卡格式化为fat格式或fat32格式,再将信号源存入SD卡中;本课题设计的嵌入式文件系统兼容FAT12/16/32 三种文件系统,能够自动识别、区分和处理。
本文虽然实现了对SD卡的读取以及由SDI接口输出到监视器上,但实时性上尚未达到满足视频实时播出的效果,比如在测量亮拖尾和暗拖尾时需要播放视频测试文件等。本课题将无法完成相应的测试工作,随着SD卡本身读取速度的提高以及我们在程序上对SRAM的读取控制的精确性的提高,是可以实现对SD卡视频文件读取的实时播出的。B&P