一种基于fpga的flac硬件解码器及解码方法

文档序号:9328315阅读:1499来源:国知局
一种基于fpga的flac硬件解码器及解码方法
【技术领域】
[0001]本发明涉及音频解码器技术领域,尤其涉及一种基于FPGA的FALC音频文件硬件解码器及解码方法。
【背景技术】
[0002]FLAC是音频的无损压缩格式,是专门针对PCM音频的特点而设计的压缩方式。FLAC能将WAV格式的音频文件压缩到原容量的一半左右,随着人们对音乐品质的要求不断提高,FLAC格式的音乐文件将是未来最有前途的音频格式之一。由于FLAC的文件格式和编码/解码的软件实现方式完全对外公开,因此FALC的软件解码已经相当成熟。现今大多数嵌入式系统采用软件的方法实现FLAC音频文件解码。但这种方法存在明显的缺点:高码率FLAC音乐的解码过程,需要占用处理器大量的系统资源,数据处理能力有限的嵌入式处理器难以胜任高码率FLAC音频文件的播放任务。考虑到FLAC解码算法内部并行模块的独立性,硬件实现不失为提高FLAC音频解码实时性的有效途径之一。
[0003]FPGA是基于查找表结构的可编程器件,具有大容量的BlockRAM资源,为FLAC音频硬件解码器的硬件设计与实现提供了可能。利用FPGA实现的FLAC音频解码器,可作为IP核应用于不同SoC的无损音频播放系统中,从而实现FLAC解码器在多媒体系统等领域的应用,具有十分重要的意义。

【发明内容】

[0004]鉴于此,本发明的目的在于提供一种基于FPGA的FLAC音频硬件解码器及其解码方法。
[0005]本发明采用的技术方案是:一种基于FPGA的FLAC硬件解码器,包括FLAC文件缓存模块、预处理模块、主控模块、元数据解析模块、帧同步模块、帧解码模块、左右声道缓存控制器、逆去相关模块和I2S接口模块,其中所述FLAC文件缓存模块分别与预处理模块和主控模块连接,所述主控模块还分别与预处理模块、元数据解析模块、帧同步模块和帧解码模块连接进行数据交换,所述帧解码模块的输出端与左右声道缓存控制器连接,帧解码模块的另一输出端与逆去相关模块连接,所述逆去相关模块的输出端与I2S接口模块连接。所述I2S接口模块的输出端与外部的数模转换器连接,输入端还分别连接有22.5792M晶振和24.576M晶振。I2S接口模块还可采用FPGA内部时钟作为时钟源。
[0006]所述I2S接口模块还可采用FPGA内部时钟作为时钟源。
[0007]所述FLAC文件缓存模块用于缓存外部处理器传递进来的FLAC音频文件以及产生解码器启动信号;所述预处理模块用于将FLAC文件缓存模块输出的并行码流转换成可取任意位码元的码流;所述主控模块用于响应FALC缓存模块的解码器启动信号,控制元数据解析模块、帧同步模块和帧解码模块的运行与停止,接收预处理模块的FALC数据并传递给元数据解析模块、帧同步模块、帧解码模块;所述元数据解析模块用于提取FLAC音频文件的总采样数、采样率、采样深度、声道数,并传递给主控模块;所述帧同步模块用于同步FLAC音频帧;所述帧解码模块用于接收来自主控模块的FALC音频文件,对FLAC音频文件中的音频数据进行解码,将解码得到的PCM音频数据传递给左右声道缓存控制器;所述左右声道缓存控制器用于将帧解码模块解码得到的PCM音频数据写入SRAM芯片,读取SRAM芯片的PCM音频数据传递给逆去相关模块;所述逆去相关模块用于从帧解码模块获取当前帧采样数和声道配置信息,从左右声道缓存控制器获取PCM音频数据,还原左右声道PCM音频数据的相关性,将还原得到的PCM音频数据传递给I2S接口模块;所述I2S接口模块用于将从逆去相关模块传递过来的并行的PCM音频数据以串行方式输出到外部数模转换器,根据逆去相关模块传递过来的采样率参数选择22.5792M或者24.576M晶振作为采样时钟输入,并进行分频得到所需要的采样率。
[0008]利用上述基于FPGA的FLAC硬件解码器进行解码的方法,包括如下步骤:
S1:外部处理器将FLAC音频文件缓存在FLAC文件缓存模块中;
S2:FLAC文件缓存模块输出的并行的FLAC音频文件数据经过预处理模块处理转换成可取任意位的码流;
S3:在主控模块的控制下,元数据解析模块解析FLAC音频文件的元数据部分;帧同步模块负责同步音频帧;帧解码模块解码FLAC音频文件中的编码数据;
S4:左右声道缓存控制器将帧解码模块的解码数据写入到外部SRAM芯片中;并从SRAM芯片中读取左右声道的音频数据传递到逆去相关模块进行相关性还原;
S5:12S接口模块根据FLAC音频文件的采样率选择合适的外部时钟作为时钟源进行分频,按照I2S总线标准将PCM音频文件数据输出到外部数模转换器。
[0009]具体地,步骤S3中的元数据解析模块、帧同步模块和帧解码模块都需要从预处理模块获取FLAC音频文件的数据。
[0010]进一步,步骤S5中所述FLAC音频文件的采样率由元数据解析模块解析得到,I2S接口模块对选择外部时钟进行分频得到所需的采样时钟。
[0011]在本发明的具体实施例中,I2S接口模块采用外部晶振或者FPGA内部时钟作为时钟源。
[0012]本发明具有以下有益效果:
(I)本发明具有较高的功能集成度,集FLAC文件信息解析、音频解码、I2S输出等功能于一体,可作为IP核应用于不同SoC的无损音频播放系统中,为无损音频播放系统的设计提供一套音频解码的解决方案。
[0013](2)本发明支持全部压缩等级的FLAC音频文件的解码,利用FPGA并行处理特性,解码效率高、性能稳定。
【附图说明】
[0014]图1是本发明基于FPGA的FLAC硬件解码器的结构框图。
【具体实施方式】
[0015]下面结合附图对本发明进行说明如下:
参见附图1,一种基于FPGA的FLAC硬件解码器,包括与外部处理器10连接的FLAC文件缓存模块1、预处理模块2、主控模块3、元数据解析模块4、帧同步模块5、帧解码模块6、与外部SRAM芯片11连接的左右声道缓存控制器7、逆去相关模块8和与外部数模转换器12连接的I2S接口模块9,其中所述FLAC文件缓存模块I分别与预处理模块2和主控模块3连接,所述主控模块3还分别与预处理模块2、元数据解析模块4、帧同步模块5和帧解码模块6连接进行数据交换,所述帧解码模块6的输出端与左右声道缓存控制器7连接,帧解码模块6的另一输出端与逆去相关模块8连接,所述逆去相关模块8的输出端与I2S接口模块9连接。
[0016]FLAC文件缓存模块I负责储存处理器传递进来的FLAC数据,包括FIFO模块和启动信号发生器。
[0017]预处理模块2负责将FLAC文件缓存模块输出的并行码流转换成可取任意位码元的码流。
[0018]主控模块3是整个FLAC解码器的核心控制模块,采用状态机实现对元数据解析模块、帧同步模块和帧解码模块的控制,实时响应模块解码过程中反馈的信息。
[0019]元数据解析模4块负责从FLAC文件的streaminfo类型的元数据块中解析出采样率、声道数量、采样深度、总采样数提供给帧解码模块。
[0020]帧同步模块5帧负责检测帧头部最开始的14比特是否是正确的同步字‘11111111111110’,并且对帧头进行CRC-8校验。
[0021 ] 帧解码模块6是整个解码器的核心解码部分,负责对FALC音频编码数据进行残差解码、预测编码还原。
[0022]左右声道缓存控制器7用于将从帧解码模块传递过来的解码值写入到外部SRAM芯片。并且响应逆去相关模块的数据请求,从外部SRAM芯片中读取左右声道的解码值传递给逆去相关模块。
[0023]逆去相关模块8用于还原在编码过程中被去除相关性的左右声道编码数据间的相关性。
[0024]I2S音频接口模块9负责将并行的PCM数据按照I2S总线标准以串行方式传输到外部数模转换器12。I2S音频接口模块包括分频模块和并串转换模块。分频模块根据FLAC音频的采样率选择22.5792MHz晶振或者24.576MHz晶振作为输入时钟,并分频出I2S的3个时钟信号,同时分频出的BCLK也作为并串转换模块的时钟。并串转换模块负责将并行的PCM数据按照I2S总线标准以串行方式传输到外部数模转换器。
[0025]本发明对FLAC文件的具体解码步骤为:
1.外部处理器将FLAC音频文件的数据写入到FLAC文件缓存模块,当FLAC文件缓存模块首次写满时,向主控模块发出有效启动信号Start。
[0026]2.预处理模块从FLAC缓存模块载入FLAC数据,将FLAC缓存模块输出的并行FLAC数据转换成可取任意比特的码流,并将数据接口提供给主控模块、元数据解析模块、帧同步模块、帧解码模块。
[0027]3.主控模块在检测到FLAC文件缓存模块产生的有效启动信号Start后会退出空闲状态,从预处理模块中获取前4个字节的码流,如果检测到这4个字节是FLAC文件的标志“FlaC”,则会使能元数据解析模块。如果检测到不是有效和FLAC文件标志,则会向外部处理器反馈信号info [2:0]= ‘001’,提示不是FLAC文件。
[0028]4.元数据解析模块从预处理模块中获取4字节的元数据块头部。提取此元数据块的类型、长度以及是否是最后一个元数据块标志位。如果是streaminfo类型的元数据块则根据此元数据块的长度从预处理模块中获取相应长度的FLAC数据,解析出采样率、声道数量、采样深度、总采样数。如果不是streaminfo类型的元数据块则采取跳过措施,将此元数据块从预处理模块取出但不作处理。如果FLAC元数据存在错误,元数据解析模块会向主控模块发出SlError信号有效,主控模块检测到此SlError信号有效后会向外部处理器反馈信号info[2:0]=‘010’,提示不是FLAC文件。如果元数据解析模块成功完成所有元数据的解析工作,则会向主控模块发出Sl_Finish信号有效。
[0029]5.主控模块检测到元数据解析模块传递过来的Sl_Finish信号有效后使能帧同步模块进行帧同步,并实时检测帧同步模块的反馈信号Syn_Frame。
[0030]6.帧同步模块被主控模块使能后,从预处理模块寻找帧同步字‘11111111111110’,如果是正确的同步字,则继续从预处理模块获取完整的帧头数据,并对帧头进行CRC-8校验,帧同步模块从帧头中提取出当前帧的采样数、采样率、声道数、声道配置方式、采样深度,提取到的这些参数用于后续的帧解码模块。最后帧同步模块向主控模块发送Syn_Frame有效信号。
[0031]7.主控模块检测到帧同步传递过来的Syn_Frame有效信号后,使能帧解码模块开始解码FLAC数据。
[0032]8.帧解码模块从预处理模块获取子帧头部,提取出子帧类型和无意义比特数wasted_bits0 FLAC音频有四种子帧类型:常量类型、原样类型、固定线性编码类型、非线性预测编码类型。如果子帧为固定线性预测编码类型和非线性预测编码类型,在子帧类型字中还包含预测编码的阶数:固定线性预测阶数fixed_order和非线性预测阶数lpc_order。帧解码模块需要从帧同步模块中获取采样数samples_number、声道数channels_number、采样深度sample_deep、声道配置方式。采样数samples_number为每子帧包含的样本数量。声道数channels_number等于当前帧中子帧数量。上述四种子帧类型的以未编码形式存在的采样样本的比特数bits_per_sample需要做如下修正:
1)如果此帧采用独立编码方式,贝>Jbits_per_sampl
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1