通用音频解码器验证系统设计与实现
扫描二维码
随时随地手机看文章
摘 要: 设计并实现了一个基于FPGA的音频解码器验证系统。同传统的验证系统相比,系统不仅具有很强的通用性,还具有良好的可扩展性和强大的图形化显示功能,可以很方便地对各种音频解码器进行片上验证。该系统的实现缩短了音频解码器的片上验证周期,有助于研究人员提高工作效率,具有很大的实用价值。
关键词: FPGA; 音频解码器; 验证系统
近年来,数字多媒体技术得到了前所未有的发展。数字音频技术已经同CD、DVD和MP3等娱乐产品一起进入到人们的日常生活中,对人们的生活产生了巨大影响[1]。而随着个人数字娱乐产品的普及,音频专用解码芯片以其低成本和高性能而得到了广泛的应用[2-3]。
在音频解码芯片设计过程中,研究人员往往需要对解码器的功能进行反复验证[4]。传统的验证方法一般是利用FPGA搭建专用的测试平台并使用ChipScope等在线逻辑分析仪进行辅助分析。这种方法可以有针对性地获取用户所需数据,从而在一定程度上达到验证的目的,但存在一些缺陷。首先,测试平台通用性差,无法兼容多个音频解码器。即使对于同一个解码器,一旦接口或内部测试模块改变,测试平台就需要做相应的修改。其次,受限于在线逻辑分析仪的功能,测试结果的显示不直观,如无法根据用户的需求实现可配置的图形化显示功能。为此,本文设计并实现了一个通用的音频解码器测试系统,其功能强大,并具有良好的可扩展性,可以帮助研究人员提高工作效率,具有很大的实用价值。
1 系统结构与工作原理
系统总体结构如图1所示。在FPGA内部,该验证系统主要由系统控制、码流输入、输入缓冲、音频解码器、输出缓冲、音频输出、信息提取和信息显示共八个模块组成。
系统复位完成后,如果用户在一定时间内没有改变系统参数,则系统会根据默认设置运行。首先,码流输入模块接收系统控制模块的指令,指定接口芯片在存储介质的特定位置读取数据并将其写入输入缓冲区中。当输入缓冲区中的有效数据量到达预先设定的解码最小值时,音频解码器便开始从输入缓冲区中读取编码数据并进行解码,之后将解码得到的PCM样本写入到输出缓冲区中。同样,在输出缓冲区中的有效数据量达到预先设定的播放最小值时,音频输出模块开始根据获得的音频信息以给定的速率从输出缓冲区中读取PCM样本,并按照特定的格式输出到AC’97编解码芯片中,从而驱动扬声器发出声音。在系统运行过程中,系统控制模块实时响应用户输入、改变系统工作状态。而信息显示模块则将信息提取模块获得的数据通过VGA显示器或LED实时显示出来。
1.1 系统控制和信息提取
系统控制模块一方面响应用户输入从而对系统进行控制,另一方面协调各模块工作,防止缓冲区溢出。对于用户输入,系统控制模块采用了延时查询与循环验证的处理方式,这样提高了系统判断的准确性,减少了误触发率[5]。而对于各模块工作的协调则由系统控制模块与信息提取模块共同完成的。例如在音乐第一帧解码过程中,系统控制模块会通过信息提取模块获取音乐的基本信息(声道信息、采样率等),之后将该信息传递给音频输出模块,从而决定输出缓冲区中PCM样本与声道的对应关系以及音乐的播放速率等。同样,输入输出缓冲区中的有效数据量和剩余空间等信息也通过信息提取模块反馈到系统控制模块中,作为控制音频解码器是否继续解码的依据。此外,信息提取模块还对获取的数据进行整合和筛选,并将处理结果送入到信息显示模块中。
1.2 码流输入模块
码流输入模块通过接口芯片从存储介质中读取数据并将其存入到输入缓冲区中,其结构如图2所示。系统控制模块在命令码流输入模块读取数据的同时,将起始地址(逻辑地址)和要读取的数据量传递给该模块。其中逻辑地址首先通过地址映射子模块转换为硬件物理地址,再送到数据读取控制子模块中。数据读取控制子模块确认来自系统控制模块的指令和数据合法后,启动进度控制状态机,进而通过读写时序产生子模块将指令写入接口芯片内的命令寄存器中,之后等待接口芯片的反馈信息并读取数据。在数据读取过程中,接口芯片的工作状态会写入到状态寄存器中,供数据读取控制子模块使用。