基于FPGA的音频编解码芯片控制器设计_第1页
基于FPGA的音频编解码芯片控制器设计_第2页
基于FPGA的音频编解码芯片控制器设计_第3页
基于FPGA的音频编解码芯片控制器设计_第4页
基于FPGA的音频编解码芯片控制器设计_第5页
已阅读5页,还剩44页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要现如今随着可编程逻辑器件及相关技术的不断发展和完善,具技术在现代电子技术领域表现出的明显技术领先性,具有传统方法无可比拟的优越性。近几年,嵌入式数字音频产品受到越来越多消费者的青睐。在MP3、手机等电子产品中,音频处理功能已成为不可或缺的重要组成部分,而高质量的音效是当前发展的重要趋势。数字语音集成电路与嵌入式微处理器相结合,既实现了系统的小型化、低功耗,又降低了产品开发成本,提高了设计的灵活性,具有体积小、扩展方便等诸多特点,具有广泛的发展前景。本设计基于SOPC技术,利用VerilogHDL硬件描述语言开发的基于FPGA的音频编解码芯片控制器,以实现对音频编解码芯片WM8731的控制。

2、并根据VerilogHDL可移植性和不依赖器件的特点。经过适当的修改,该控制器可以移植到各类FPGA中,以控制兼容I2C和I2S总线的音频编解码芯片。避免了重复开发,这样既缩短了设计周期又降低了设计成本,可大大提高设计的效率。系统在功能扩展上具有极大的潜力,有很好的应用前景和科研价值。关键词:WM8731,FPGA,I2C总线,音频控制器ThedesignofaudiocodecchipcontrollerbasedbyFPGAAbstractNowadays,withtheprogrammablelogicdevicesandrelatedtechnologiescontinuetodeve

3、lopandimproveitstechnologyinthefieldofmodernelectronictechnologywasdemonstratedtechnologyleadership,hasincomparablesuperiorityoftraditionalmethods.Inrecentyears,embeddeddigitalaudioproductsaremoreandmoreconsumersofallages.InMP3,mobilephonesandotherelectronicproducts,audioprocessingfeatureshavebecome

4、anindispensablepartofthecurrentdevelopmentofhigh-qualityaudioisanimportanttrend.Digitalvoiceintegratedcircuitsandembeddedmicroprocessors,whichnotonlyrealizedthesystem'ssmallsize,lowpowerconsumption,andreducedproductdevelopmentcostsandimprovedesignflexibility,smallsize,easyexpansion,andmanyotherf

5、eatures,abroadprospectsfordevelopment.ThedesignisbasedonSOPCtechnology,theuseofVerilogHDLhardwaredescriptionlanguagedevelopedFPGA-basedaudiocodecchipcontroller,toachievetheWM8731audiocodecchipcontrol.VerilogHDLbasedonportabilityanddoesnotrelyonthedevicecharacteristics.Afterappropriatemodifications,t

6、hecontrollercanbeportedtoavarietyofFPGA,tocontrolI2CandI2Sbuscompatibleaudiocodecchip.Avoidduplicationofdevelopment,thenitwillshortenthedesigncycleandreducingdesigncost,cangreatlyimprovedesignefficiency.Extensionsonthesystemhasgreatpotential,therearegoodprospects,andscientificvalue.Keywords:WM8731,F

7、PGA,I2CBus,Audiocontroller1 绪论11.1 研究的背景及意义11.2 本设计的主要目的22器件介绍32.1 语音编/解码芯片WM873132.2 FPGA器件EP2C35F672C643协议介绍63.1 |2C总线63.1.1 |2C总线的数据的有效性63.1.2 |2C总线的数据格式及时序73.1.3 I2C总线的寻址方式73.2 I2S总线83.2.1 I2S总线的数据格式及时序83.2.2 I2S总线的数据采样率94硬件设计104.1 硬件方框图104.2 ED-2开发板114.3 语音芯片WM8731外围电路115硬件模块设计与实现125.1 开发环境125.

8、1.1 QuartusII125.1.2 VerilogHDL125.2 硬件模块设计框图135.3 功能模块的实现145.3.1 顶层控制器模块145.3.2 时钟分频模块155.3.3 I2C时序接口模块175.3.4 I2C控制字配置模块205.3.5 I2S时序接口及音频数据处理模块275.3.6 I2S申行数据转并行数据模块295.3.7 系统调试31结论32致谢33参考文献34附录36附录1电路图36附录2源代码37AUD_TOP.v37set_wm8731.v39i2c_com.v45I2S_com.v49I2S_data.v.53clkdivz.v55外文资料翻译(附原文)60

9、II1绪论1.1 研究的背景及意义FPGA(FieldProgrammableGateArray,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。目前以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速烧录下载至FPGA上进行测试,是现代IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑

10、的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。现如今随着FPGA技术的飞速发展,几十万门乃至几百万门的可变成逻辑阵列使用起来越来越普遍。其技术在现代电子技术领域表现出的明显技术领先性,具有传统方法无可比拟的优越性。再者近几年,嵌入式数字音频产品受到越来越多消费者的青睐。在MP3、手机等消

11、费类电子产品中,人们对于这些个人终端的要求早已不限于单纯通话和简单的文字处理,音频处理功能已成为不可或缺的重要组成部分,而高质量的音效是当前发展的重要趋势。相对于模拟语音系统而言,数字化语音系统抗干扰能力强,数据传输可靠,开发周期较短,调试容易,便于计算机存储和处理。而专用的语音芯片是数字化语音系统的核心。正是基于上述优点,数字语音集成电路与嵌入式微处理器相结合,这样既实现了系统的小型化、低功耗,又降低了产品开发成本,提高了设计的灵活性,具有体积小、扩展方便等诸多特点,具有广泛的发展前景,如电脑语音钟、语音型数字万用表、手机话费查询系统、排队机、监控系统语音报警以及公共汽车报站器等。1.2 本

12、设计的主要目的本设计是针对音频编解码芯片WM8731,基于FPGA器件利用VerilogHDL硬件描述语言实现对该芯片的控制,设计出基于FPGA的音频编解码芯片控制器。该控制器只要进行适当的修正,更改寄存器的地址和数据,就可实现控制电路的移植。其主要内容包括对音频编/解码芯片WM8731的I2C总线配置模块的设计方法、I2S总线数据传输的实现等。将FPGA与数字语音系统的优点相结合,设计出一个高质量、易操作、易于移植的语音录放系统。2器件介绍本设计主要用到了WolfsonMicroelectronics公司生产的一款低功耗高品质双声道数字信号编/解码芯片WM8731,以及控制该语音芯片工作的F

13、PGA器件EP2c35F672C&2.1 语音编/解码芯片WM8731WM8731是一款低功耗的高品质双声道数字信号编/解码芯片,其高性能耳机驱动器、低功耗设计、可控采样频率、可选择的滤波器使得M8731芯片广泛使用于便携式MP3、CD播放器。其结构框图如图2.1所示。CChHTROLiNTERFajCE.HJP帆3£>hmen1口修m工J.VQ3&4-mi*U-KJ-US15K一口口<口DlGllTALFlTEH5rnvjfi.uaZ2U一Ac«ad最匚图2.1WM8731结构框图该芯片内置耳机输出放大器,支持MIC和LINEIN两种输入方式,

14、且对输入和输出都具有可编程增益调节,针对音频领域的应用,该芯片高度集成了模拟电路功能。它能为用户提供在单个时钟源下可独立编程ADC和DAC的采样率的独特能力,其中模数转换和数模转换部件高度集成在芯片内部,且其采样频率为8KHZ-96KHZ可调,可转换的数据位长度为16-32位可调。WM8731带有一个片上时钟发生器,支持多种时钟模式。通过一个12MHz时钟,该器件可以直接生成44.1kHz、48kHz和96kHz等采样率,以及MP3标准定义的其他采样率,完全不需要一个独立的锁相环或晶振,并支持其他公用的主时钟频率。WM8731内部有11个寄存器。该芯片的初始化和内部功能设置是以控制接口对其内部

15、的这11个寄存器进行相应的配置来实现的。控制器可通过控制接口对WM8731中的寄存器进行编程配置,该控制接口符合的SPI(三线操作)和I2C(双线操作)规范。通过对MODE端口的状态来选择控制接口类型。WM8731支持右对齐、左对齐、I2S以及DSP四种数字音频接口模式,通过数字音频接口读写数据音频信号。由于具有上述优点,使得WM8731是一款非常理想的音频模拟I/O器件,可以很好地应用在各种数字音频领域。2.2 FPGA器件EP2C35F672C6本设计用到的是Altera公司的FPGA器件EP2c35F672C6,该器件隶属于CycloneII系列,它采用了TSMC验证的90nm低K介电质

16、工艺制造的成本优化架构,具有更大的容量和极低的单位逻辑单元成本。从结构上看,该器4件具有多达150个嵌入18X18乘法器,适合于实现低成本数字信号处理(DSP)应用;它包含每块具有4608bit的M4K存储块,提供高达1.1Mbit的片内存储器,支持多种配置;它能以688Mbps的速率同DDR、DDRII和SDRSDRAM器件及QDRIISRAM器件相连接,并支持多种单端和差分I/O标准;支持NiosII系列嵌入式处理器,具有低成本和完整的软件开发工具。Altera也为CylconeII器件客户提供了40多个可定制IP核,Altera和AlteraMegafunction伙伴计划(AMPPSM

17、)合作者提供的不同的IP核是专为CycloneII架构优化的,包括:NiosII嵌入式处理器;DDRSDRAM控制器;FFT/IFFT;PCI编译器;FIR编译器;NCO编译器;POS-PHY编译器;ReedSolomon编译器;Viterbi编译器等等。3协议介绍本设计主要涉及I2C总线和I2S总线两种总线协议。I2C总线主要运用在控制接口,FPGA器件通过该接口对语音编/解码芯片WM8731控制字的写入。而I2S总线则是用在音频数据接口,主要负责FPGA器件与语音编/解码芯片的音频数据传输。3.1 I2C总线I2C(Inter-IntegratedCircuit,内部集成电路)总线是Phi

18、lips公司开发的芯片间串行通讯总线,它利用SDI(串行数据线)和SCLK(串行时钟线)两根信号线将外围通讯模块连接起来,进行数据传输。它具有冲突侦测和仲裁能力,可防止两个或两个以上主机同时控制总线时数据被破坏。I2C总线以其接口简单、总线通讯模块可裁剪等特点获得了广泛的应用。I2C总线控制器是处理器与I2C器件之间的接口,它要完成接收处理器的控制信号、命令和数据,还需发送I2C器件的数据和状态响应到处理器,实现处理器与I2C器件之间的通信。随着可编程器件的飞速发展,用FPGA器件实现I2C总线控制器接口,可以带来很多方面的便利:不但能够增加系统的扩展能力,而且控制方式极其灵活。3.1.1 I

19、2C总线的数据的有效性SCLK为高电平期间,SDI线上的数据需保持不变,在器件之间传递数据。SCLK为低电平时,数据线上的数据发生跳变,改变为下一位数据的状态。3.1.2 |2C总线的数据格式及时序SCLKSDIStartn2一、图3.1IC总线的数据时序一个标准的I2C总线通信数据由开始信号、从机地址信号、传输的数据和终止信号4部分组成。在rC总线协议的技术规范中,规定每次发送到|2C总线SDI上的数据必须是一个字节,每次传输可以发送的字节数量是不受限制的。传输的数据字节按照由高位到低位的顺序发送,每发送一个字节后必须跟一个响应位(应答信号),即发送器每发送完一个字节,将数据线SDI拉高,由

20、主控制器产生第9个脉冲,接收器将SDI拉低,以此作为接收器对发送器的应答。发送器在第9个脉冲探测SDI为低,表明接收器已成功接收到发送器发送的一个字节,可以继续进行后面的通信。该过程如图3.1所示。stopn3.1.3 I2C总线的寻址方式在起始条件产生后,主机向总线发送一个从机地址,第一个字节的头7位(D7-D1)为从机地址,最低位(D0)R/W决定数据的传输方向。最低位R/W若为'0',表示向从机填写数据;为'1',表示从从机读取数据。当发送一个地址后,连接到总线的每个设备都会将头7位同设备自身地址进行比较,若相同,则该设备为被主控设备寻址,并发送应答信号,

21、根据R/W位决定读写工作方式。3.2 I2S总线I2S(Inter-ICSound)总线是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于音频设备之间的数据传输,广泛应用于各种多媒体系统。它采用了沿独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的专业设备的费用。3.1.1 I2S总线的数据格式及时序I2S总线一般具有5根信号线,如图3.2所示,包括位时钟频率(BCLK)、DAC采样率时钟(DACLRC)、ADC采样率时钟(ADCLRC)、串行数据输入(DACDAT)和串行数据输出(ADCDAT)。其

22、中DACLC、ADCLC和BCLK时钟信号在主模式下由编解码芯片提供,而在从模式下由FPGA或DSP提供。图3.2I2s总线的数据时序I2S格式的信号无论有多少位有效数据,数据的最高位总是出现在LRC变化(也就是一帧开始)后的第2个位时钟频率(BCLK)脉冲处。这就使得接收端与发送端的有效位数可以不同。如果接收端能够处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能够处理的有效位数多于发送端,可以自行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位3.1.2 I2S总线的数据采样率I2S总线的数据采样率可以通过主设备的时钟频率(MCLK)以及采

23、样频率类型(256fs或384fs)来选择。其计算公式为:数据采样率=MCLK/采样频率类型。例如主设备的时钟频率为18.432MHz,若选择采样频率类型为384fs,则MCLK经过384分频,即得到I2S总线的数据采样率为48KHz。而位时钟频率(BCLK)的计算公式为:位时钟频率=数据采样率X数据位X2。则上例中令数据位为17,则位时钟频率为1.632MHz。4硬件设计4.1 硬件方框图硬件方框图如图4.1所示。AlteraFPGA器件EP2C35F672C6i2c总线Vi2s总线LineOutWM8731图4.1硬件方框图其中FPGA器件处于中心地位,FPGA器件主要通过I2C总线给语音

24、芯片WM8731经行控制字配置。初始化完成后,音频数据从MIC或LineIn输入,经过A/D转换后,成为串行的数字信号并由I2S总线传入FPGA器件。经过用并变换等处理之后,再经过D/A转换由LineOut输出。104.2 ED-2开发板本设计主要用到了Altera公司推出的ED-2开发板,该开发板是以FPGA器件EP2c35F672C6为核心,板上含有Flash、SRAM等存储器,标准MIC、Line-in、Line-out接口,Video-in和VGA等音频视频接口,以及各种输入输出设备。利用该开发板能方便设计开发,以利于后续的功能扩展。4.3 语音芯片WM8731外围电路ED-2开发板上

25、已集成了语音芯片WM8731。并连接标准MIC、Line-in、Line-out接口以连接麦克风和耳机等外部设备。其电路图如图4.2所示。neWDfttss理his必打mI.I2CSCOffifSg=E15:*35却三:dES|图4.2WM8731外围电路X&SX里鼻Isfi-ux-s号gE专5scX舍2g115硬件模块设计与实现5.1 开发环境在硬件模块设计部分,主要是利用Altera公司推出的FPGA/CPLD集成开发环境QuartusII,并使用硬件描述语言VerilogHDL对FPGA器件的编程设计,以控制WM8731高品质语音芯片正常工作,达到预期的功能。5.1.1 Quar

26、tusIIQuartusII是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。5.1.2 VerilogHDLVerilogHDL是一种硬

27、件描述语言,是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。VerilogHDL由GatewayDesignAutomation公司开发,是目前世界上最流行的硬件描述语言之一。125.2 硬件模块设计框图硬件模块设计框图,如图5.1所示顶层控制器模块WM8731i2c控制字配置模块WM8731音频数据处理I2S时序接口模块时钟分频模块I2S串行数据转并行数据模块A频数据读入i2c时序接口模块图5.1硬件模块设计框图硬件模块的设计大致包含顶层控制器模块、时钟分频模块、I2C控制字配置模块、I2C时序接口模块、I2S

28、时序接口及音频数据处理模块、I2S串行数据转并行数据模块等6个模块。135.3 功能模块的实现5.3.1 顶层控制器模块此模块主要实现的功能是对上述其余5个模块的配置以及连线。图5.2所示为该模块的设计结果。ParamelErValueType1CLDK_REF1型32m口SigrBdiMflQarCL&CK_SA1MPLE能DOOSignedInleaftr3KfiG3IX3tclkdivzRafe修帏百口二皿|旧皿grKIWCIMHIOptrabonModehtofrnai出HNidcdjidock"taps.时图5.2顶层控制器模块其VerilogHDL描述的设计关键代

29、码如下:moduleAUD_TOP(clock_50m,sclk,sdat,dacclk,dacdat,bclk,adcdat,adcclk,rst_n,key1,key2,led1,led2,led,MCLK,sw1,sw2,LED);/端口定义assignled=rst_n;/复位按钮连接一个LED灯,显示按钮状态/I2C控制字配置模块端口连接assignMCLK=c0;/18.432MHz主时钟输入set_wm8731(.clock_50m(clock_50m),14.i2c_sclk(sclk),.i2c_sdat(sdat),.reset_n(rst_n),.key1(key1),.

30、key2(key2),.led1(led1),.led2(led2),.sw1(sw1),.sw2(sw2);I2S_com(.clock_ref(c0),12s时序接口及音频数据处理模块端口连接.dacclk(dacclk),.bclk(bclk),.dacdat(dacdat),.reset_n(rst_n),.adcclk(adcclk),.adcdat(adcdat),.data(data);clkdivz(.inclk0(clock_50m),.c0(c0);时钟分频模块端口连接endmodule5.3.2 时钟分频模块由于要使WM8731工作,必须给其提供一个主时钟频率。此主时钟频

31、率依照该芯片工作的不同模式有12.288MHz、18.432MHz、11.2896MHz以及16.9344MHz这4中频率可选。在本设计中,选择WM8731工作在普通模式(Normalmode)下,并选择18.432MHz为其主时钟频率。该频率可以通过XTI和XTO端口,由晶振提供。但本设计利用FPGA自带的锁相环(PLL)和全局时钟网络,将DE2开发板上自带的50MHz晶振分频得到。因此本模块主要运用QuartusII环境下的MegaWizard定制功能自动生成的。但由于50MHz不能精确地分频到18.432MHz,所以采用了一个能分到一个最接近的频率,即18.421053MHz。如图5.3

32、所示,该模块以50MHz的时钟为输入,输出18.432MHz分别连接到MCLK以及I2S时序接口及音频数据处理模块的时钟输入。15图5.3时钟分频模块该模块VerilogHDL描述的设计关键代码如下:moduleclkdivz(/端口定义inclk0,/50MHz时钟输入/调用altpllIP核c0);/18.432MHz时钟输出altpllaltpll_component(.inclk(sub_wire3),.clk(sub_wire0),.vcounderrange();defparamaltpll_component.clk0_divide_by=3125,16altpll_compon

33、ent.clk0_duty_cycle=50,altpll_component.clk0_multiply_by=1152,altpll_component.clk0_phase_shift="0",altpll_pensate_clock="CLK0",altpll_component.inclk0_input_frequency=20000,altpll_ended_device_family="CycloneII",endmodule5.3.3 I2C时序接口模块该模块主要实现对I2C时序的模拟,控制S

34、CLK(数据时钟)和SDAT(数据线)将存放在i2c_data中的24位控制字串行发送给WM8731,该模块例化于I2C控制字配置模块之中,以实现对该芯片的控制字写入。如图5.4所示,在此模块中i2c_data为24位控制字写入;reset_n为复位输入;clock_i2c为I2C接口传输时钟;start为传输开始标志输入;ack为I2C时序中3位应答位进行或操作合并为一个应答位的输出;tr_end为传输结束信号输出;i2c_sclk为I2C接口数据时钟输出;i2csdat为I2C接口串行数据输出。图5.4I2C时序接口模块I2C时序接口模块时序仿真,如图5.5所示。此处以i2cdata中24

35、位数据17为011100111000010011000111为例,当start信号拉低后,i2c_sclk开始传输串行数据时钟。这里I2C时序采用33个|2C时钟周期进行,其中4-11位、13-20位、22-29位传送数据,12、21、30为应答位。传输状态时,数据高位在前低位在后,24位数据每8位为一字节,每发送1个字节的数据,就应返回一个应答信号将i2c_sdat状态拉高。空闲状态时,i2c_sdat为高阻态,i2c_sclk为高电平状态。该模块的VerilogHDL设计,关键代码如下:modulei2c_com(clock_i2c,reset_n,ack,i2c_data,start,t

36、r_end,i2c_sclk,i2c_sdat);assignack=ack1|ack2|ack3;/应答信号assigni2c_sclk=sclk|(cyc_count>=4)&(cyc_count<=30)?clock_i2c:0);/数据时钟assigni2c_sdat=reg_sdat?1'bz:0;/串行数据线always(posedgeclock_i2cornegedgereset_n)/模拟I2C传输数据时钟beginif(!reset_n)/复位cyc_count<=6'b111111;elsebegin18if(start=0)cyc

37、_count<=0;elseif(cyc_count<6'b111111)cyc_count<=cyc_count+1;endendalways(posedgeclock_i2cornegedgereset_n)/模拟I2C传输串行数据beginif(!reset_n)/复位beginelsecase(cyc_count)/I2C时钟周期赋值0:beginack1<=1;ack2<=1;ack3<=1;tr_end<=0;sclk<=1;reg_sdat<=1;end1:reg_sdat<=0;/开始传输10:reg_sdat

38、<=i2c_data16;11:reg_sdat<=1;/应答信号112:beginreg_sdat<=i2c_data15;ack1<=i2c_sdat;end19/应答信号219:reg_sdat<=i2c_data8;20:reg_sdat<=1;21:beginreg_sdat<=i2c_data7;ack2<=i2c_sdat;end28:reg_sdat<=i2c_data0;29:reg_sdat<=1;应答信号332:beginreg_sdat<=1;tr_end<=1;endendcaseendendmo

39、dule5.3.4 I2C控制字配置模块该模块是基于I2C时序接口模块之上的控制单元。如图5.6所示,该模块主要实现对语音芯片WM8731的初始配置、生成I2C控制时钟、输出音量控制以及输出模式选择等功能。以下将以实现的功能为单位来介绍该模块。20图5.6I2C控制字配置模块(1)初始配置初始配置功能是本模块要实现的主要功能。该部分主要是对I2C时序接口模块例化,并向该模块写入预设定的控制字以及开始信号、等待结束信号、校验应答信号,以实现I2C设置过程。针对语音芯片WM8731的10个控制寄存器预设控制字,并逐个周期将预设定的控制字写入该芯片。该部分关键VerilogHDL代码如下所示。i2c

40、_comu1(.clock_i2c(clock_20k),.reset_n(reset_n),.ack(ack),.i2c_data(i2c_data),.start(start),.tr_end(tr_end),.i2c_sclk(i2c_sclk),.i2c_sdat(i2c_sdat);/例化I2C时序接口模块always(posedgeclock_20kornegedgereset_n)/配置过程控制beginif(!reset_n)beginelse/I2C设置过程21beginif(reg_index<11)begincase(config_step)0:begini2c_d

41、ata<=8'h34,reg_data;/写入地址与控制字start<=1;/写入开始信号config_step<=1;end1:beginif(tr_end)/等待结束信号beginif(!ack)/校验应答信号config_step<=2;elseconfig_step<=0;start<=0;endend2:beginreg_index<=reg_index+1;config_step<=0;22always(reg_index)/I2C配置预设数值begincase(reg_index)0:reg_data<=16'

42、h011f;10:reg_data<=left;default:reg_data<=16'h001a;endcaseend生成I2C控制时钟该部分是主要功能是产生I2C控制时钟,由于WM8731允许的I2C控制时钟在400KHz内有效,所以无法直接用外设的50MHz的晶振频率。出于简单、易分频的原则,本设计选用20KHz作为I2C总线的控制时钟。该部分关键代码如下:always(posedgeclock_50mornegedgereset_n)/产生I2C控制时钟-20KHzbeginif(!reset_n)beginelseif(clock_20k_cnt<2499

43、)/计数至U2500跳变一次clock_20k_cnt<=clock_20k_cnt+1;elsebeginclock_20k<=!clock_20k;23clock_20k_cnt<=0;endend输出模式选择由于WM8731同时支持如图5.7所示的BypassSideTone和DACSEL三种模式,因此在预设控制字代码段中加入了模式选择控制。SIDETONE图5.7WM8731模式示意图通过读取开关Sw1和Sw2的值来改变预设控制字,以达到模式切换的功能。的VerilogHDL代码如下所示:4:if(sw1=1)reg_data<=16'h080a;/By

44、pass模式elseif(sw2=1)reg_data<=16'h0825;/SideTone模式24elsereg_data<=16'h0810;/DACSEL模式输出音量控制该部分主要是实现通过按键来增大或减小音量的功能。由于存在利用按键改值的要求,所以去抖动是必不可少的。因此该部分主要涉及两个方面的程序。按键计时检测程序在这一部分的程序中,主要是利用供给I2C总线的20KHz的时钟频率,计时每20ms检测一次按键值。如果两次相邻时间的键值不同,则可判断有按键按下,进而触发音量增减程序。具体程序代码如下所示:always(posedgeclock_20korne

45、gedgereset_n)S/键计时程序beginif(!reset_n)cnt<=cnt+1'b1;endalways(posedgeclock_20k)beginif(cnt=10'd400)/每隔20Ms检测一次按键beginkey1_f<=key1;25key2_f<=key2;endkey1_f_w<=key1_f;key2_f_w<=key2_f;endwirekey1_ctrl=key1_f_w&(-key1_f);/检测两次相邻时间键值,wirekey2_ctrl=key2_f_w&(key2_f);/若不同则改变c

46、trl的值音量增减程序若有按键按下,则变量key1(2)_ctrl的值将置为一,进而触发对应的音量增减程序。以增加音量为例,当有Key1按键按下时,key1_ctrl的值变为1,此时对应控制音量的预设值会增加一个音量档位。若多次增加音量以至于超过最大音量,预设值将以最大音量送入语音芯片,则音量不会继续增大,减小音量与之类似。具体程序代码如下所示:elseif(key1_ctrl)/按键增加音量beginleft<=left+16'h0008;if(left>=16'h057f)beginleft<=16'h057f;endreg_index<=4

47、'b1010;end26elseif(key2_ctrl)begin/按键减小音量5.3.5 I2S时序接口及音频数据处理模块该模块主要是对I2S时序的模拟以实现音频数据的传输。对于I2S时序的模拟主要是将18.432MHz的主时钟分频,产生均为48KHz的数模转换和模数转换采样率时钟以及对应的数字音频时钟(BCLK)。除此之外,在此模块中还调用了rS串行数据转并行数据模块,并定义变量state作为串并变换的起始标志。如图5.8所示,在I模块中DACLC、DACDAT、ADCLC、ADCDAT以及BCLK这五个接口与WM8731相连。其中DACLC、ADCLC和BCLK时钟信号在主模式

48、下由WM8731提供,而在从模式下由FPGA提供,因此在本设计中这三个信号均作为输出端口。16位的data接口是串并转换后的并行输出;adcdat是串行音频数据输入;dacdat是串行音频数据输出;该模块的时钟输入clock_ref是时钟分频模块产生的18.432MHz的主时钟。OvCTuKHWadcdatdarDdatadcclkiMillParameterValueTvdsCLOCK_REF18432000SignedIntegerCLOCK_SAMPLE阴皿。SignedInteger图5.8I2s时序接口及音频数据处理模块27该模块VerilogHDL描述的设计关键代码如下:modul

49、eI2S_com(clock_ref,dacclk,bclk,dacdat,reset_n,adcclk,adcdat,data);I2S_datau1(.bclk(bclk),.adcclk(adcclk),.adcdat(adcdat),.data(data),.state(state);/例化I2S用并转化模块always(posedgeclock_refornegedgereset_n)/产17位数据传输时钟bclkbeginif(!reset_n)elseif(bclk_cnt>=(CLOCK_REF/(CLOCK_SAMPLE*2*17*2)-1)beginbclk<=

50、bclk;always(posedgeclock_refornegedgereset_n)独产48KHz的DAC时钟dacclkbeginif(!reset_n)elseif(dacclk_cnt>=(CLOCK_REF/(CLOCK_SAMPLE*2)-1)begindacclk<=dacclk;always(posedgeclock_refornegedgereset_n)独产48KHz的ADC时钟adcclk28beginif(!reset_n)elseif(adcclk_cnt>=(CLOCK_REF/(CLOCK_SAMPLE*2)-1)beginadcclk<

51、;=adcclk;assigndacdat=adcdat;/将ADC的数据直接从DAC输出always(negedgeadcclk)/生成串并变换的起始标志beginif(!reset_n)elseif(bclk)state<=0;elsestate<=1;endendmodule5.3.6 I2S申行数据转并行数据模块该模块已例化在I2S时序接口及音频数据处理模块之中。其功能是逐位将adcdat串行输入的音频数据转化成并行数据由data端口输出,在整个系统中并行data输出端口为后续开发的预留端口。29moduleI2S_data(bclk,adcclk,adcdat,data,

52、state);always(posedgebclkorposedgestate)beginif(state)/开始转化标志beginnum<=5'h0;endelseif(!adcclk)/随着bclk的变化逐位转化beginnum<=num+1'b1;endendalways(num)/用并转化case(num)1:data_reg15<=adcdat;17:data<=data_reg;/转化完成赋值给端口default:data<=16'h0;endcaseendmodule306系统调试本系统是基于FPGA的音频编解码芯片控制器,用

53、以实现对语音芯片WM8731的控制。在整个系统中,用到了标准MIC、Line-in、Line-out接口、两个开关按键以及三个按钮式按键。FPGA器件主要通过I2C总线给语音芯片WM8731经行控制字配置。初始化完成后,音频数据从MIC或LineIn输入,经过A/D转换后,成为串行的数字信号并由I2S总线传入FPGA器件。经过串并变换等处理之后,再经过D/A转换由LineOut通过耳机输出。在调试过程中,两个开关按键用以控制WM8731中Bypass、SideTone和DACSEL三种模式的切换。三个按钮式按键用以实现增大或减小音量,以及复位的功能。在测试中,上述功能均已实现,并能正常控制WM

54、8731输出预期的音频数据。31结论随着可编程逻辑器件及相关技术的不断发展和完善,人们越来越多的利用EDA技术进行数字系统的设计和开发。本设计方案基于SOPC技术,将I2C总线控制器、音频数据处理I2S总线模块和各个数字控制模块都设计在FPGA内部。极大地提高了系统的集成度和稳定性。利用VerilogHDL硬件描述语言开发的基于FPGA的音频编解码芯片控制器,经过验证功能完整正确,可以实现对音频编解码芯片WM8731的控制。不仅如此,根据VerilogHDL可移植性和不依赖器件的特点,经过适当的修正该控制器可以移植到各类FPGA中,以控制兼容I2C和I2S总线的音频编解码芯片。避免了重复开发,

55、这样既缩短了设计周期又降低了设计成本,可大大提高设计的效率。系统在功能扩展上具有极大的潜力,有很好的应用前景和科研价值。32致谢经过将近一个学期的努力,终于如期完成了本次毕业设计。首先我要感谢我的毕设导师杨扬老师,在整个完成毕设的过程中,杨老师给予了我很大的帮助,在一些关键点上给我思路和技术上的点拨,以使我少走了很多的弯路。从杨老师那里我不仅学习到了知识,更重要的是他严格要求,精益求精,严谨求实的治学态度给我留下深刻印象,这定会让我受益终身。在此,我特别要向杨老师表达我深深的谢意。感谢信息工程学院所有帮助过我、指导过我的老师,是他们细心的指导和耐心的教诲,让我学到了很多,懂得了很多。另外还要感

56、谢通信07A-4班的所有同学。在与他们共同学习,共同生活的四年里,我们一同经历了四年的风风雨雨,与他们的交流和讨论,扩展了我的思路,锻炼了我的能力,对论文的完成颇有益处。最后,再次对关心、帮助我的老师和同学表示衷心地感谢。33参考文献1王杰玉,杜炜,潘红兵.基于FPGA的音频编解码芯片接口设计.现代电子技术,2009,(05).2徐峰,叶辉.音频解码芯片在嵌入式系统中的应用.黑龙江科技信息,2008,(22)3任文平,梁竹关,李海燕.基于FPGA的I2C总线的控制电路的设计.第六届全国信息获取与处理学术会议论文集(3)C,20084袁海林.WM8731的I2C配置模块的FPGA设计.电脑知识与技术(学术交流),2007,(06)5袁海林.基于NiosII的数字音频录放系统的设计.微计算机信息,2007,(14)6吕炎军,王泽勇.基于FPGA的I2C总线接口设计J.自动化技术与应用,2006,(04)7徐睿,李斐,王中康.基于IIS总线的嵌入式音频系统设计.电子技术应用,2004,(04)8李云,刘桂华.FPGA与I2C总线器件接口设计A.中国自动化学会、中国仪器仪表学会2004年西南三省一市自动化与仪器仪表学术年会论

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论