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音频解码的实时性要求,本设计进行了速度和面积上的折中处理,相对于典型移位寄存器本设计以牺牲面积为代价换取了速度上的优势,使之在规定时间内完成解码。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。