AAC音频解码中位数可选且自动加载移位寄存器设计

发布者:数字奇迹最新更新时间:2010-08-17 来源: 仪器仪表学报 关键字:AAC音频解码  移位寄存器  状态机 手机看文章 扫描二维码
随时随地手机看文章

1、引言  

    在对采样率为44.1kHz的AAC音频进行解码时,一帧的解码时间须控制在23.22毫秒内。且音频中每一帧可包含1"48个声道的数据,若遇时序要求最严格的场合,即一帧包含48个声道数据,实时性则很难满足,因此速度便成为硬件设计的重要指标。所以在系统设计时,为完成解码的实时性要求,各模块应以速度为优化目标。  

    在AAC音频解码电路的设计中,需要一块电路连接AAC比特流的存储电路和和取数解码电路,考虑到它须完成数据缓冲和移位的功能,我们选择用移位寄存器来实现,示意图如下。  


  
图1 移位寄存器功能示意图  

    典型的移位寄存器有两个特点:1)每个时钟周期移一位,2)加载的优先级别高于移位的优先级别,移位需等待加载的完成。而AAC音频数据采用变长编码技术,即压缩比特流中的数据部分为可变长的哈夫曼编码,所以每次解码完毕从移位寄存器中移出的位数不是固定值,若使用典型移位寄存器一位一位地移数据降低了工作效率;且每次移位须等待加载完毕进行,耗费了等待时间。所以,典型的移位寄存器在时序要求紧张的场合对速度提高起到了负面作用,导致整个系统不能完成实时性要求。因此本设计针对AAC音频解码这一特殊应用,对典型移位寄存器在速度方面进行改进设计,使之每一周期可移出任意位,且移位无须等待加载完成,从而加速了移位过程,使之满足实时性要求。  

    论文结构如下:首先介绍本设计的工作原理,对其中一些参数进行配置;其次分模块进行电路设计;再次,将典型移位寄存器和本设计分别下载到FPGA开发板,从速度和面积两方面进行实验结果的比较;最后,对设计展望,提出可优化的方向。  

2、工作原理  

    考虑到本设计的特定使用场合,选择移位寄存器为64位,移位位数是1"16可变的整数,存储空间是位宽为32位的fifo。在其他场合下,可基于同样的设计方法通过改变参数来满足要求。  

    移位寄存器功能示意如图1所示,此移位寄存器连接了两块电路单元:单元一、需要取数的AAC音频解码电路单元;单元二、数据的存储空间。当任意时刻单元一需取数时,可向移位寄存器发出取数信号,并给出要取的位数,移位寄存器就在一个周期内将所需长度的数据移出。当移位寄存器中的数据少于一定量时(在此设为32位),会自动从单元二中加载数据,且加载与移位同优先级别,所以无须等待时间。  

3、位数可选、自动加载移位寄存器电路设计  

    以主要寄存器的不同功能依据,将电路划分为如下图所示的虚线框内的三个模块。下面将分模块介绍电路的设计。  


  
图2 位数可选、自动加载移位寄存器电路图  

3.1 有效数据计数器的设计  

    有效数据计数器是用来记录移位寄存器中剩余有效数据的位数。初始化时,存储器向移位寄存器加载64位有效数据,计数器为64;当外界从移位寄存器取数时,计数器在原有计数的基础上减掉所取的位数;当移位寄存器从存储器加载数据时,计数器在原有计数的基础上加上加载数据的位宽(32);当移位和加载同时进行时,计数器进行上述的减法和加法的混合运算。  

    使用计数器的目的是为了产生加载数据的标志信号(在这里设为32)。当有效数据计数器中的数目小于等于32时,产生加载信号,而当计数器中的数目大于32时,撤除加载信号。在这里加载数据的标志位可以是范围为16"32的整数,范围的制定决定于:加载标志的下限要满足一次取数的最大长度,上限要保证除有效数据外的剩余空间足够下一次的数据加载长度。  

3.2 初始化控制状态机的设计  

    移位寄存器在电路复位时须加载上有效数据,以保证第一次的取数的正确进行。而此时加载标志不能由有效数据计数器产生,因为有效数据计数器在初始化的状态下为64不可能产生加载标志,所以加载标志需由复位信号间接产生。且由于移位寄存器的长度(64位)是存储器的宽度(32位)的2倍,所以需要加载两次。  

    鉴于以上的功能要求,设计初始化状态机,其中包括三个状态: IDLE, INIT_0和 INIT_1。当复位产生时,复位信号的两级寄存信号(防止亚稳态)为触发信号,使状态由IDLE跳转到INIT_0;下一个时钟周期,状态机自动由INIT_0跳转到INIT_1,并产生输出信号init_0;再下个时钟周期,状态机自动由INIT_1跳转到IDLE,并产生输出信号init_1。状态机产生的上述两个输出信号控制产生移位寄存器在初始化时的两次加载信号。状态转换图如下:  


  
图3 移位寄存器初始化状态转移图  

3.3 移位寄存器的设计  

    之所以选择64位的移位寄存器,是因为若选择一倍于存储器宽度的移位寄存器长度(32位),移位后剩余的有效数据的位数可能不够下一次的移位长度,为满足移位长度的要求,需要在加载后再次移位,因此移位最多要花费三个时钟周期的时间;若选择三倍于存储器宽度的移位寄存器的长度或更长(>=96位)时,当设定加载数据的标志为有效数据不大于32时,需要加载两次数据,当设定加载数据的标志为有效数据不大于64时,此时移位寄存器中的有效数据相对于需要移位的最长数据偏长且没有必要。所以,将移位寄存器的长度选择为2倍于存储器的宽度(64位)在时间和空间上都达到了最优。  

    初始化过程:初始化状态机产生的输出信号init_0和init_1为两次加载的控制信号,这两个信号控制移位寄存器在初始化的两个时钟周期内,从存储器中取出数据并将其分别加载到高32位和低32位。  

   移位过程:当取数信号发出取数要求时,输入的取数位数作为多路选择器的数据选择端,当前移位寄存器的值和0作为多路选择器的数据端,通过数据选择决定移位寄存器下个周期从高位到低位的值。  

    加载过程:当加载信号发出时,剩余有效数据作为多路选择器的数据选择端,当前移位寄存器的值、FIFO输出的值和0作为多路选择器的数据端,通过数据选择决定移位寄存器下个周期从高位到低位的值。  

    移位和加载同时发生的过程:当移位和加载信号同时产生时,移位寄存器中剩余的有效数据的位数和输入的取数位数共同作为多路选择器的数据选择端,当前移位寄存器的值、FIFO输出的值和0作为多路选择器的数据端,通过数据选择决定移位寄存器下个周期从高位到低位的值。  

4、实验结果  

    为完成解码实时性的要求,本设计对典型的移位寄存器在速度上进行改进,但控制逻辑变得复杂,从而消耗了更多资源。因此,我们选择速度、面积作为性能指标对两种设计进行比较。在基于FPGA的硬件设计中,面积指标通常用查找表数和寄存器数来表示,速度指标我们选择最大时钟频率及解码时平均每帧消耗的周期数来表示。  

    我们采用altera公司FPGA开发工具QuartusII分别对两块电路进行综合和时序分析,从综合报告中获得查找表和寄存器的数目,从时序报告中获得最大时钟频率。并将两个设计分别同AAC音频解码电路一起整体下载到stratix II EP2S180 的FPGA开发板,以AAC音频压缩文件中随机抽取的10帧数据为测试矢量,使用一计数器记录下移位寄存器消耗的周期数,将其写入片内ram,并将观测到的数据通过计算得平均每帧消耗的周期数。实验结果如下表所示: 

表1 实验数据对比  

    由对比数据可得以下结论:  

    1、典型移位寄存器的工作频率大于位数可选、自动加载移位寄存器的频率。但由于此移位寄存器只是更大电路中的一个小模块,由实际结果可知电路整体的工作频率并不取决于此模块的工作频率,所以在整体电路中对单独模块的频率进行比较并不能得出速度的优劣。  

    2、由查找表数和寄存器数的比较可得:典型移位寄存器消耗的资源远小于位数可选、自动加载移位寄存器,即典型移位寄存器在面积上占有较大优势。  

    3、由平均每帧消耗周期数的比较可得:两者工作在相同的时钟频率下时,位数可选、自动加载移位寄存器消耗的时间约为典型移位寄存器的28%,单位时间内传输的数据量提高到典型移位寄存器的356%,所以位数可选、自动加载移位寄存器在速度上占有较大优势。  

    综上,为完成AAC音频解码的实时性要求,本设计进行了速度和面积上的折中处理,相对于典型移位寄存器本设计以牺牲面积为代价换取了速度上的优势,使之在规定时间内完成解码。

关键字:AAC音频解码  移位寄存器  状态机 引用地址:AAC音频解码中位数可选且自动加载移位寄存器设计

上一篇:Protues在单片机系统设计中的应用
下一篇:使用普通I/O口实现电容触摸感应的解决方案

推荐阅读最新更新时间:2024-03-16 12:30

最简洁的单片机状态机模型(X-状态机)
单片机如果控制的设备趋向复杂,使用状态机模式写程序会更清晰,但是网上讲的状态机图晦涩难懂,实际状态机就是一张表,并且这张表对应单片机的输入输出引脚就能完成大部分状态罗列。 看问题看本质,单片机内部运行的程序用户不关心,但是单片机显示、发声、按键操作、控制设备是最关注的。 把输入组合作为条件,输出仅做动作,就是最简洁的单片机状态机。 为了与通常所讲的状态机模型区分,个人给这个状态机模型起个名字: X-状态机 (X-FSM) 输入可以是传感器、按键、开关信号等 输出可以是开关信号、数码管显示、LCD显示、蜂鸣器、语音喇叭发声、指示灯等。 一图胜万言,一表见真章: 表一(行输出,列输入) 表二 有限状态机FS
[单片机]
LabVIEW设计模型——状态机之编程实现
画好状态转换图,我们就可以清晰的看到程序要实现的所有状态以及状态之间的关系。下面的工作就是用LabVIEW来实现这个状态机。 状态机是由一个While循环、一个条件结构和一个移位寄存器组成的。其中While循环用来保证程序可以连续的运行;条件结构的各种分支中的代码用来描述状态机的各种状态,以及下一状态的选择;移位寄存器用来将之前状态所作出的选择传递到下一次循环的选择端子。 下面我们就一步一步的实现这个状态机。 首先,新建一个工程,并且在工程中建立 控件 和 子VI 两个虚拟文件夹来放置自定义控件和子VI。在 控件 文件夹中新建一个控件。 在控件的编辑面板上放置一个枚举类型的控件,并且编辑枚举
[测试测量]
LabVIEW设计模型——<font color='red'>状态机</font>之编程实现
LabVIEW使用移位寄存器
目的:创建一个可以在图表中显示运行平均数的VI。 前面板 1. 打开一个新的前面板,按照下图所示创建对象。 2. 把波形图表的坐标范围改为0.0到2.0。 3. 在添加开关之后,用鼠标右键单击它,在快捷菜单中选择Mechanical Action Latch When Pressed,再选择Operate Make Current Values Default,把ON状态设置为默认状态。  练习四 的前面板 流程图 1.按下图创建流程图。 练习四 的流程图 2.在流程图中添加 While 循环(Functions Structures),创建移位寄存器。 a. 用鼠标右键单击While循环的左
[测试测量]
LabVIEW使用<font color='red'>移位寄存器</font>
用VHDL设计有限状态机的方法
    摘要: 以离心机定时顺序控制器的设计为例,阐述了用VHDL设计有限状态机的方法,讨论了如何消除状态机输出信号的“毛刺”。     关键词: VHDL 状态机 EDA 离心机 毛刺     现代数字系统的设计一般都采用自顶向下的模块化设计方法。即从整个系统的功能出发,将系统分割成若干功能模块。在自顶向下划分的过程中,最重要垢是将系统或子系统按计算机组成结构那样划分成控制器和若干个受控制的功能模块。受控部分通常是设计者们所熟悉的各种功能的电路,设计较为容易。主要任务是设计控制器,而其控制功能可以用限状态机来实现。因而有必要深入探讨有限状态机的设计方法。 1 状态机设计的一般方法
[应用]
单片机的状态机框架编写
在单片机裸机的编程方法中,状态机的方法是比较好的,经典的比如按键的检测判断等。 其实有很多地方可以使用这种思想。比如传感器的数据采集,因为单片机不可能一直等待着运行,那样的效率是很低的,通常都是结合fsm + timer的方式来提高CPU的使用率 一、传感器中使用fsm的方法。 大家都知道,ds18b20的采集是比较慢的,发送转换指令后,最慢需要等待720ms,这个时间有点太长了。简直不能忍受。 如下所示:我采用了11bit分辨率,0.125的分辨率足够了,作为温度参考而已。 The resolution of the temperature sensor is user - configurable to 9, 10,
[单片机]
大容量FLASH在单片机台标系统中的应用
1 引 言   FLASH是一种兼有紫外线擦除EPROM和电可擦可编程只读存储器(E2PROM)两者优点的新型非易失存储器。由于它可在线进行电可擦除和编程,芯片每区可独立擦写至少10,000次以上,因而对于需周期性地修改被储存的代码和数据表的应用场合,以及作为一种高密度的、非易失的数据采集和存储介质,FLASH都是理想的器件选择。随着其容量越来越大,FLASH对于数字图像的存储也具有了一定的能力。笔者所做的台标机就是用Intel公司生产的64Mbit(8MByte)的FLASH 28F640J5作为台标图像的存储介质。下面就以该台标机系统为例,介绍28F640J5在系统中的具体应用。 2 FLASH28F640J5简介 2.1 
[单片机]
大容量FLASH在单片机台标系统中的应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved