首 页电子文章电子资料客户留言繁體中文
设为首页
加入收藏
联系我们
您当前的位置:中国电子前沿 -> FPGA/PLD -> VHDL学习 -> 电子文章内容 退出登录 用户管理
栏目导航
· CPLD应用 · FPGA应用
· VHDL学习 · EDA软件
热门电子文章
· [无线开发] 收发一体超声..
· [TI DSP综合] 轻松体验DS..
· [USB技术] 基于DSP技术的..
· [ARM入门] 安装cygwin 注..
· [USB技术] USB设计
· [ARM系统] 基于ARM体系的..
· [USB技术] 在 Java 应用程..
· [linux移植] Linux解释器..
· [linux移植] 在Redhat Li..
· [原理欣赏] 高速高密度PC..
· [FPGA应用] FPGA器件的在..
· [linux移植] 如何监控和保..
相关电子文章
· [组图] 基于Matlab的..
· [组图] 基于USB的数据..
· [组图] 基于FPGA技术..
· [组图] 基于LPM的高速..
· [组图] 基于FPGA的IE..
· [组图] 基于EWB的D/..
· [组图] 基于OrCAD/Ps..
· 基于PPP的TMS320C6x..
· [组图] 基于DSP的高速..
· [组图] 基于DSP的自动..
基于硬件描述语言的MP3解码器
作者:佚名  来源:不详  发布时间:2006-9-15 8:12:25  发布人:zangyl

减小字体 增大字体

  摘 要:开发基于硬件描述语言的MP3解码器,首要的问题是要搭建一个能被很好地掌握控制的仿真平台。仿真平台包括仿真输入平台和仿真输出平台。在仿真输入平台中,构造了2个模块,一个是用来存储MP3音频文件的ROM模块,另一个是控制器模块,其功能是把ROM中的数据以串行数据流的方式送到解码器模块中去。其中,在构造ROM模块时,采用了IP Core 重用。
  
关键词:硬件描述语言;MP3解码器;仿真平台;IP Core的重用

  FPGA来实现对MP3音频格式数据的硬件解码,需要用硬件描述语言(VHDL或VerilogHDL)编写源程序。解码的目的是把串行输入的MP3音频数据流解码成PCM数据,然后串行输出。由于项目比较庞大,解码的过程比较长,如何搭建一个能够被很好地掌握控制的仿真平台,是一个关键的问题。对基于硬件描述语言的MP3解码器进行仿真,需要考虑到以3个问题:
  
(1)如何把一个MP3音频格式的文件输入到设计模块中去。
  
(2)如何观察解码的中间结果,甚至是以可以观察的文本文件的格式输出并保存解码的中间结果。
  
(3)如何输出解码后的数据以及如何验证如此庞大数据是正确的。
  
如果只考虑上面的第一点,而忽略了后两点,直接将设计下载到FPGA芯片中去开始解码,那么一旦解码输出的结果不正确,将会不知所措。

1仿真平台的搭建
1.1输入平台的搭建
  
目的是把MP3音频格式的文件以二进制串行数据流的方式在系统时钟(clk)的节拍下送入 到设计模块中去进行解码。MP3文件是存储在存储介质中的,例如闪存或者PC的硬盘中。在进行硬件解码的时候,需要把音频文件以二进制(即“0”,“1”)的方式送入解码器模块,遗憾的是硬件描述语言无论是VHDL还是VerilogHDL都不支持以二进制的形式读入存储在硬盘上的MP3文件,只支持以文本文件(ASCII码)的形式读入,所以在搭建输入平台的时候,有2种方案可以选择:
  
(1)需要其他高级语言(例如Matlab语言或C语言)来做中间的数据格式的转换,把一个MP3音频文件以二进制的形式打开,再把原数据以ASCII码的形式写成文本文件并保存到PC的硬盘中,以至用硬件描述语言编写的模块能够将其读入。
  
(2)用硬件描述语言编写一个控制模块和一个ROM模块,如图1所示。把MP3音频文件固化在 ROM模块中,控制模块在系统时钟的节拍下,把ROM中的数据以串行的比特流方式送入解码器模块。
  
通过运行仿真,进行实际的比较,第一个方案比较耗费PC的资源,在相同的条件下,选用两个方案进行仿真,耗时比较短。
1.1.1ROM IP Core的重用
  
EDA软件ActiveHDL在其5.1以上的版本中加入了 “IP Core Generator”功能,使IP Core 的重用变得更加方便。在ActiveHDL 5.1版的“IP Core Generator” 的功能项里选择产生一个ROM模块,Data Width选择1 b宽,Address Width选择“auto”,激活“Use all bits”选项并且关闭“Read file as hex”选项,然后把要固化到ROM中的二进制文件指向待解码的MP3音频文件。最后就可以产生一个ROM的模块,此ROM中已经固化好了MP3音频文件。

 

1.1.2编写控制模块
  
此模块包括一个时钟输入信号,一个复位清零输出信号和一个地址输出信号。首先输出一 个复位清零信号到MP3的解码器模块中去,使解码器复位清零。然后在每个时钟的上升沿输出一个地址信号,送到ROM模块中去,ROM模块的bitstream输出端口就会以串行比特流的形式输出存储在其中的MP3音频数据了。控制模块的
   

 

1.2输出平台的搭建
  
目的是把解码模块输出的结果(PCM数据)以二进制的形式写到名为outputPCM的PCM音 频文件中去。同样由于硬件描述语言不支持以二进制的形式读入或输出文件,只支持以文本(ASCII码)文件的形式读入或输出PC硬盘上的文件,所以也需要使用Matlab语言来做中间的格式转换。之后就可以使用音频播放工具(例如“Cool Edit”)播放解码后的PCM音频文件,并且可以观察其波形,若和解码前的MP3文件一致,则说明解码正确。若解码不正确,也可以把解码过程中的某一步的结果用VerilogHDL以ASCII码的形式写到文本文件中去查看。
1.2.1解码结果的文本文件输出
  
在系统时钟的节拍下,把解码的输出结果(PCM数据)输出到一个文本文件中去,命名为o utput.TXT,
 

  产生的outputTXT文本文件(即ASCII码文件)内,每一行只有一个二进制数,此数值就是每个时钟输出的PCM音频流中的数据。由于PCM音频文件的数据量比较大,所以output.TXT 文件内,行的数量比较多。到这一步,由于此时的输出是文本(ASCII码)形式的,所以可以用文本编辑软件打开此文本文件,观察并校对输出结果。
1.2.2输出结果的二进制转换
  
Matlab读入这个已经存好PCM数据的文本文件outputTXT,并把他存储成一个N×1的矩阵D。命令为“D=dlmread(′outputTXT′′\t′); ”。D内的每一个元素都是二进制数“0”或“1”。由于Matlab语言在写二进制文件 时是以8个二进制数为一个单位写入的,所以要把这个矩阵D进行转换,每 8个元素为一个单位,转换成十进制数,再把这个十进制数存储成新矩阵E的一个元素,最后再把矩阵E求转置得到1×N的矩阵F。那么F=[ 0 0 0 255 251 ……],再以二进制的方式把矩阵F写入到文件output PC M中去,代码如下:  
 

  这个output.PCM文件就是PCM格式的音频文件,用播放工具就可以播放验证了。
  
若使用“Co ol Edit”软件,还可以观察并比较MP3源文件和解码后的PCM文件的波形,如图2所示。


2结语
  
通过实际地运行,此仿真平台很好地达到了监视解码器模块运行的目的。解码器的最后输 出结果也可以在PC中用播放工具实际播放验证。其中利用IP Core重用的方法构造的ROM模 块也能很好地运行,另外此ROM模块经过实际验证,是可以被综合的,在被解码的MP3文件 不是很大的情况下,综合的器件选择Xilinx公司的Spartan S10PC84。综合后的结果如图3所 示。


参考文献

1]Bhasker JVerilog HDL硬件描述语言[M].徐振林译北京:机械工业出版社,2002.
2]Hanselman D, Littlefield B. 精通Matlab 6[M]. 张航,黄攀,译.北京:清华大学出版社,2002.
3]张兆礼,赵春晖,梅晓丹.现代图像处理技术及Matlab实现[M].北京:人民邮电出版社,2001.
4]夏宇闻.复杂数字电路与系统的Verilog HDL设计技术[M].北京:北京航空航天大学出版社,1998.

[] [返回上一页] [打 印] [收 藏]
∷相关电子文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
关于本站网站帮助广告合作下载声明友情连接网站地图
Copyright © 2002-2006 EMB-CN.com. All Rights Reserved .鲁ICP备06032441号qq群:30191791