已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编号: EDA技术与Verilog HDL设计报告题 目: 基于FPGA的ADPCM语音编码器设计 院 (系): 电子工程与自动化学院 专 业: 学生姓名: 学 号: 同 作 者: 指导教师: 潘 明 职 称: 副教授 题目类型: 理论研究 实验研究 工程设计 工程技术研究 软件开发2011 年 11 月 29 日摘 要本文介绍了自适应差分脉冲编码调制技术ADPCM的编码原理和结构,以及脉冲宽度调制技术PCM的原理,利用硬件描述语言设计并仿真了ADPCM编码器及相关电路,以完成语音的编码功能。ADPCM算法有4:1压缩率,将16bit声音波形数据的压缩方法,但抗噪音和实时性比较差,而利用 FPGA具有很好的可配置型,硬件处理速度快等优点,便可以得到较好的编码效果。关键字:自适应差分脉冲编码;脉冲宽度调制技术;FPGAAbstractIn this paper, the principle of the encoder of Adaptive Differential Pulse Code Modulation (ADPCM) and Pulse Code Modulation (PCM) are introduced. And we use hardware description language to design circuit of ADPCM encoder and simulate the circuit in order to achieve the function of voice encode. The ADPCM algorithm has a compression ratio of 4:1,but it is weak in anti-noise and instantaneity. Because the configuration of FPGA is well adapted and also the process rate of the hardware is quick, so we improve the encoder in the basic of early version.Keywords: Adaptive Differential Pulse Code Modulation; Pulse Code Modulation; FPGA;绪 论近年来多媒体技术正逐渐融入到人们的生活中,而其中的语音编码技术就是最基本的技术之一。语音编码就是将模拟语音信号数字化,语音信号的数字化表示具有许多优点,但是如果对语音信号直接采用A/D转换技术进行编码,则传输或者存储的语音量太大,因此为了降低传输速率和存储容量,就必须对其进行压缩编码,还原时以压缩相反的算法进行解码,再经过数模转换成相似的模拟语音信号。语音压缩编码,就是在给定的编码速率前提下,利用某种算法去掉冗余信息再编码,力求用最少的码字表示原来的语音信息,并保证编码后恢复的重构语音质量尽可能高。语音编码走出实验室,投入实际使用,主要归功于语音信号处理技术和数字信号处理等计算能力的迅速提高和超大规模集成电路的发展。由于存储容量的不断扩充,而其价格却不断下降,使语音编解码芯片的产品能迅速打开市场,而应用的发展又促使研究人员不断研究出更为复杂的新算法,并形成了多项国际标准。迄今已有各种各样的语音编解码技术,而自适应脉冲差分编码调制是波形编码中非常有效的一种数字编码方式。它的编解码器都是根据前面出现的PCM抽样值对下一个PCM抽样值进行预测,将当前的PCM数据与预测值进行求差,对差值进行的编码位数比对原始信号进行的编码位数要少的多,编码包含的信息从原来的原始语音信号变为语音信号的变化从而达到压缩目的。而可编程逻辑器件FPGA的日趋成熟与强大为语音信号处理提供了一种新的开发方式。它不但可以提高语音处理速度,同时使系统的配置与升级更加灵活。本论文研究采用FPGA系统实现ADPCM编码的应用。ADPCM算法是一种针对16-bit声音波形数据的压缩算法,具有空间消耗低,语音质量高等特点。第一章 差分PCM和ADPCM编码原理1.1 差分PCM脉冲编码调制是使用最为广泛的调制方法。在PCM的调制过程中,将输入的模拟信号进行取样,量化和编码。这种方法通过用脉冲编码来代表取样后的模拟信号幅度。即用二进制的大小来代表取样后的信号幅度,在接收端再将这些编码的二进制数还原成为原来的模拟信号。其包括三个方面,采样、量化和编码。采样也称抽样,是信号在时间上的离散化,即按照一定时间间隔在模拟信号上逐点采取其瞬时值。它是通过采样脉冲和模拟信号相乘来实现的。在规定的时间内,以有效信号最高频率的二倍或二倍以上的速率对该信号进行采样,则这些采样信息值中包含了全部原始信号信息。在数字通信中,根据采样定理, 最小采样频率为语音信号最高频率的2倍。电话通令的频带是300-3400Hz,所以最低采样频率为6800Hz。根据CCITT的长途通信协议的标准,目前各国一般采用的声音采样频率为8kHz;所以,为了将来系统与其他通信设备交流的方便,最终采样频率确定为8000Hz。抽样信号虽然是时间轴上离散的信号,但仍然是模拟信号,其样值在一定的范围内,可有无限多个值。显然,对无限个样值给出数字码组来对应是不可能的。为了实现以数字码表示样值,必须采用“四舍五入”的方法把样值分级“取整”,使一定取值范围内的样值由无限多个值变为有限个值。这一过程称为量化。量化后的抽样信号与量化前的抽样信号相比较,当然有所失真,且不再是模拟信号。这种量化失真在接收端还原模拟信号时表现为噪声,并称为量化噪声。量化噪声的大小取决于把样值分级“取整”的方式,分的级数越多,即量化级差或间隔越小,量化噪声也越小。量化级数越多误差越小,相应的二进制码位数越多,要求传输速率越高,频带越宽。为使量化噪声尽可能小而所需码位数又不太多,通常采用非均匀量化的方法进行量化。非均匀量化根据幅度的不同区间来确定量化间隔,幅度小的区间量化间隔取得小,幅度大的区间量化间隔取得大。量化后的抽样信号在一定的取值范围内仅有有限个可取的样值,且信号正、负幅度分布的对称性使正、负样值的个数相等,正、负向的量化级对称分布。若将有限个量化样值的绝对值从小到大依次排列,并对应地依次赋予一个十进制数字代码,在码前以“+”、“-”号为前缀,来区分样值的正、负,则量化后的抽样信号就转化为按抽样时序排列的一串十进制数字码流,即十进制数字信号。简单高效的数据系统是二进制码系统,因此,应将十进制数字代码变换成二进制编码。根据十进制数字代码的总个数,可以确定所需二进制编码的位数,即字长。这种把量化的抽样信号变换成给定字长的二进制码流的过程称为编码。语音PCM的抽样频率为8KHz,每个量化样值对应一个8位二进制码,故话音数字编码信号的速率为8bits*8kHz=64kb/s。量化噪声随量化级数的增多和级差的缩小而减小。量化级数增多即样值个数增多,就要求更长的二进制编码。因此,量化噪声随二进制编码的位数增多而减小,即随数字编码信号的速率提高而减小。自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。1.2 自适应差值脉冲编码ADPCM原理自适应差分脉冲编码调制ADPCM(Adaptive Differential Pulse Code Modulation)用预测编码来压缩数据量。它结合了ADM的差分信号与PCM的二进制码的方法,是一种性能比较好的波形编码。它的核心想法是:利用自适应的思想改变量化阶的大小,即使用小的量化阶(step-size)去编码小的差值,使用大的量化阶去编码大的差值,使用过去的样本值估算下一个输入样本的预测值,使实际样本值和预测值之间的差值总是最小。图一 ADPCM编码器系统 编码的核心思想是对差值进行编码和预测,采用非均匀量化,并使不同幅值的信号信噪比接近一致,避免大幅值语音信号信噪比大而小幅值语音信号信噪比小。ADPCM编码过程如图四所示输示。输入是一个16bit二进制补码语音数据,其范围在32767到-32767之间。预测采样值,与线性输入的差值为。量化器对差值进行量化产生一个有符号的4位编码数据,这个数据的表示范围在7到-7之间,最高位为符号位。编码时,首先计算16位的二进制补码的当前采样值和上一预测采样值之间的差值,这个差值的量化编码即输出4位ADPCM值。在算法实现中,定义一个结构变量存储预测采样和量化步长索引,并制定了两个表。一个表为索引调整表,其输人为差值量化编码,用来更新步长索引。另一个表为步长调整表,其输人为步长索引,输出为步长。编码时,首先用上一个采样点的步长索引查步长调整表求出步长。如果当前采样值和采样预测值之间的差值为负,则的位置1。如果该差值绝对值大于步长,则I的位置1。如果大于,则的位置1,如果大于,则的位置1。如果以上条件不满足,则相应位置0。这样就确定了编码值。然后编码值作为索引调整表的输入,查表输出索引调整,并和结构变量中原步长索引相加,产生新的步长索引,在下一个采样值的编码中使用。编码输出后,编码还需要重复进行和解码完全一样的计算过程,求出新的预测采样值。1.3 ADPCM在通信系统中的应用根据CCITT的G.721建议,以码率为32kb/s的ADPCM作为语音压缩的国际标准。在ADPCM算法中,它的采样率可以是8KHz,采样精度16bit,量化阶的保存为4位,因此压缩比为4:1,即每秒保存或者传送大小为32Kbit。且从波形恢复出来的声音效果与原始声音几乎没有区别,人耳无法辨别。ADPCM在语音编码的技术要求如下:语音信号经ADPCM编码后,客观测量SNR完全符合PCM编码系统的指标要求,主观听觉测试性能,应非常接近于PCM质量。经过4次音频转接后,主观语音测试质量良好。在信道误码率低于的情况下能稳定工作。的Modem信号经过4次编解码后,其误码率应小于。输人输出接口采用标准的A律或律PCM信号。目前ADPCM主要应用于扩充现有PCM信道传输容量,即把两个30路PCM信号合并成一个的60路ADPCM信号,这是CCITT G.761建议的国际标准。由于标准PCM是经过对数压缩后的数字信号,它不能直接进行一般算术运算。所以,在进人ADPCM编码前,必须把A律PCM码变换成自然二进码,又称为PCM线性码。这可以通过两者之间内在的对应关系来实现。在接收端,则需要进行一次反变换,即将收到的60路的的信号,分解成两个含30条话路的信号,且这两个PCM信号中各话路所占时隙位置与编码转换前完全相同,从而实现了在不提高传输速率的情况下将数字信道的容量扩大一倍。即用ADPCM码解码得到的线性PCM码来表示重建的信号,然后变换成成律或律后对数信号输出。图二是一个ADPCM在实际应用中的示意图。图二 ADPCM实际应用示意图第二章 FPGA流程及其相关工具软件的介绍2.1 FPGA流程FPGA开发流程可以分为如下几步:(1)设计输入,设计输入主要包括原理图输入、状态图输入、波形图输入以及verilog HDL硬件描述语言。它是利用这些输入去描述一个电路的功能。(2)功能仿真,功能仿真就是利用相关仿真工具对相关电路进行功能级别仿真,也就是说对你的输入设计的逻辑功能进行相关的模拟测试。在功能上面来了解电路是否能够达到预期要求。这里的功能仿真纯粹是模拟性质的,不会设计的任何具体器件的硬件特性。(3)综合,综合就是行为或者功能层次表达的电子系统转换成低层次门级电路的网表。(4)布局布线,就是将综合后的网表文件针对某一个具体的目标器件进行逻辑映射。此时应该使用FPGA厂商提供的实现与布局布线工具,根据所选芯片的型号,进行芯片内部功能单元的实际连接与映射。(5)时序验证,就是要使得时序仿真过程中,建立与保持时间要符合相关的制约,以便数据能被正确的传输。使仿真既包含门延时,又包含线延时信息。能较好地反映芯片的实际工作情况。(6)生成SOF等文件,此文件可以通过调试器把它下载到系统中间去。而FPGA设计流程的其他步骤基本上由相关工具去完成,因此只要自己设置好相关参数,不要人为干预太多。而验证的话就需要用户花费大量的时间去完成。2.2 Quartus II软件此次所使用的软件是Quartus II9.0,编程语音是verilog HDL。Quartus II是世界最大可编程逻辑器件供应商之一的Altera提供的FPGA/CPLD开发集成环境。Quartus II在21世纪初推出,是Altera前一代FPGA/CPLD集成开发环境MAX+plus II的更新换代产品,其界面友好,使用便捷。在Quartus II上可以完成设计输入、HDL综合、布线布局、仿真和下载和硬件测试等流程,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。Altera的Quartus II 提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统设计的综合性环境和SOPC开发的基本设计工具,并为AlteraDSP开发包进行系统模型设计提供了集成综合环境。Quartus II设计工具完全支持VHDL、Verylog的设计流程,其内部嵌有VHDL、Verilog逻辑综合器。Quartus II也可以利用第三方的综合工具,如Leonardo Spectrum、Synplify Pro、FPGA Complier II,并能直接调用这些工具。同样,Quartus II具备仿真功能,同时也支持第三方的仿真工具,如ModelSim。此外,Quartus II与MATLAB和DSP Builder结合,可以进行基于FPGA的DSP系统开发,是DSP硬件系统实现的关键EDA工具。图三中所示的是Quartus II编译设计主控界面,它显示了Quartus II自动设计的各主要处理环节和设计流程,包括设计输入编辑、设计分析与综合、适配、编程文件汇编、时序参数提取以及编程下载几个步骤。在图七下排的流程框图,是与上面的Quartus II设计流程相对照的标准的EDA开发流程。图三 Quartus II设计流程2.3 Simulink软件本次使用的仿真软件modelsim6.5。2.3.1代码仿真在完成一个设计的代码编写工作之后,可以直接对代码进行仿真,检测源代码是否符合功能要求。这时,仿真的对象为HDL代码,比较直观,速度比较快,可以进行与软件相类似的多种手段的调试(如单步执行等)。在设计的最初阶段发现问题,可以节省大量的精力。1设计HDL源代码:可以使VHDL语言或Verilog语言。2测试激励代码:根据设计要求输入/输出的激励程序,由于不需要进行综合,书写具有很大的灵活性。3仿真模型/库:根据设计内调用的器件供应商提供的模块而定,如:FIFO(Altera常用的FIFO有:lpm_fifo /lpm_fifo_dc等)、DPRAM等。2.3.2 时序仿真使用综合软件综合后生成的“.sdf”文件的仿真就是时延仿真。可以检验综合后或实现后的功能是否满足功能要求。它的优点是:比较真实的反映逻辑的时序与功能,缺点是速度比较慢,如果逻辑比较大,那么需要很长的时间。在这里仿真以Altera的器件为例,可以比较精确的仿真逻辑的时序是否满足要求。2.3.3 testbench编写通常testbench用工业标准的VHDL或Verilog硬件描述语言来编写。Testbench调用功能设计,然后进行仿真。复杂的testbench完成一些附加的功能例如它们包含一些逻辑来选择产生合适的设计激励或比较实际结果和预期结果。图四给出了一个如上所描述步骤的标准HDL验证流程。由于testbench使用VHDL或Verilog来描述,testbench的验证过程可以根据不同的平台或不同的软件工具实现。由于VHDL或Verilog是公开的通用标准,使用VHDL或Verilog编写的testbench以后也可以毫无困难地重用。图四 使用Testbench的HDL验证流程Testbench用VHDL或Verilog来编写。由于testbench只用来进行仿真,它们没有那些适用于综合的RTL语言子集的语法约束限制,而是所有的行为结构都可以使用。因而testbench可以编写的更为通用,使得它们可以更容易维护。所有testbench包含了基本程序段。正如上面所提到的,testbench通常包含附加功能,如在终端上可视的结果和内建的错误检测。仿真器使用基于事件或基于周期的仿真方法。基于事件的仿真器,当输入,信号,或是门改变了值,来确定仿真器事件的时间。在一个基于事件的仿真器中,一个延时值可以附加在门电路或是电路网络上来构建最优的时序仿真。基于周期的仿真器面向同步设计。这类工具优化组合逻辑,在时钟沿分析结果。这个功能使得基于周期的仿真器比基于事件的仿真器更快更有效。基于事件的仿真器提供商使用不同的运算法则来确定仿真事件。所以,根据仿真器用来确定的运算法则不同,同一个仿真时间的事件被确定为不同的次序。为避免对运算法则的依赖和确保正确的结果,一个事件驱动测试应该详细描述明确的激励顺序。当一个事件添加到基于事件的仿真器,cpu和内存的使用就增加了,仿真过程就会变慢。除非是评价testbench,无限循环不应该使用来作为设计的激励。一般地,只有时钟被描述成一个无限循环。在测试中,所有initial块(verilog)并行执行。如果无关的激励被分离到独立的块中,测试激励的顺序会变得更容易实现和检查。因为每个并行的块相关于仿真时间的零点开始执行,对于分离的块传递激励更容易。使用分离激励块使得testbench的建立,维护和升级更加容易。第三章 实验步骤及仿真调试结果3.1时钟模块此次模块基本时钟使用的是MAX II器件的内部振荡器UFM模块。内部振荡器能满足很多设计对时钟的需求,这样就可以不需要外接晶振做为系统时钟。不但减少了元件数量,节省了电路板面积,还节省了成本。未分频的内部振荡器工作频率范围在13.33MHz至22.22MHz之间。振荡器输出频率OSC是未分频的四分之一,在3.3MHz到5,5MHz之间。不需要例化UFM就可以例化内部振荡器。这可以通过使用Quartus II 软件的MAX II振荡器宏功能来实现。配置内部振荡器的宏功能具体步骤如下:点击Tools-Megawizard Plug-In Manager 在弹出的第一个对话框中使用默认选项新建一个宏功能。然后在新弹出的窗口中选择I/O下拉选项的最后一个“MAX II oscillater”,器件选择”MAX II”,语言选择“Verilog HDL”,在输出文件最后加上文件名,这里命名为“internal_osc”,完成设置后点击“next”,界面如图五。图五 内部晶振配置图本时钟模块的输入信号是系统内部提供的5.56MHz,目的是产生3个时钟信号,时钟频率分别8KHz,32KHz,64KHz,8KHz是ADPCM采样时钟频率,64KHz为8位PCM非线性量化码的频率,32KHz为4位ADPCM编码的频率。本模块是通过例化实现调用内部主时钟模块的。代码见附录1。3.2 8位非线性码转换12位均匀模块该模块实现将输入的8位非线性PCM码转换为12位均匀PCM码,输入为8位串行非线性PCM码,以及时钟模块的3个时钟信号。该模块首先将每次一采样时钟频率为开始的每125us秒内通过64KHz频率采集8位串行PCM码,然后通过串并转换为8位并行输出PCM码,再通过8位转12位均匀量化的算法实现12位并行PCM均匀量化码输出。代码见附录2。3.3 4位ADPCM码输出模块本模块为顶层模块,它包括时钟模块以及8位非线性码转换成12位均匀量化模块的部分,其输入为8位非线性PCM码,复位,输出为8KHz,32KHz,64KHz时钟,4位ADPCM码,输出时钟提供参考及时间校准。现在我们使用的是IMA ADPCM算法,该算法中对量化步长的调整使用了简单的查表方法,对于一个输入的PCM值X(n),将其与前一时刻的X(n-1)预测值做差值 得到d(n),然后根据当前的量化步长对d(n)进行编码,再用此sample点的编码值调整量化步长,同时还要得到当前sample点的预测值供下一sample点编码使用。通过此算法可将样点编码成4bit的码流,一个符号位和三个幅度位。代码见附录3。3.4 testbench模块此次我们通过输入4个8位码来验证所设计的功能是否正确,其输入4个二进制8位数为:11010011,01001110,10000001,10001000,其输出ADPCM应该为:1111,0111,1111,1000。其简单的testbench代码见附录4。3.5 仿真结果 由图六可知voice_4bit_output输出波形为1111,0111,1111,1000与实际计算结果一致,达到预先设计要求,且时钟信号clk_div_8及clk_div_32及clk等精确度很高,与预期要求基本一致。 图六 仿真波形图结 论本文通过对基于FPGA的ADPCM语音编码器设计问题的深入探讨,我获益非浅,一方面对于ADPCM算法的定义以及相关理论的熟练掌握。同时利用FPGA本身可配置的结构特点,能够很好地压缩语音信号,从而大大缩减数据存储空间,并且提高数据的传输速度。所设计的FPGA语音处理系统能有效的压缩原始声音波形数据,客服了抗噪音和实时性差的特点,较好的完成了语音的编码功能。致 辞很荣幸,有潘明老师作我的FPGA课程设计导师, 首先感谢潘明老师的悉心教导。在这一段时间里,使得我对学习FPGA的知识有很大的提升 ,而且在治学态度、工作作风甚至是为人处事等方面也得到了许多有益的启示。同时也要感谢一起参与设计该语音编码器的&同学的倾力合作,共同完成了此次课程设计,还有其他同学们的积极帮助资料的查询和提供有利于论文写作的建议和意见,在他们的帮助下,论文得以不断的完善,最终帮助我完整的写完了整个论文。参考文献1 赵力.语音信号处理 M ,机械工业出版社 , 20032 姚天任.数字语音处理 M ,华中科技大学出版社, 2003.3 Ken C.Pohlmann.Princip les of D igital Audio, Fourth Edition, M cGraw - H ill Education Co. 2002.4 Rodger Richey. Adaptive Differential Pulse Code Modulation using PICmicroTM MicrocontrollersR. Microchip Technology Inc,2002.5 胡凯华.VHDL与FPGA设计M.北京:中国铁道出版社,2002.6 徐东明,黄海生.电路设计状态机描述算法研究J.微电子学与计算机;2001.7 潘松,黄继业,陈龙.EDA技术与Verilog HDL.北京:清华大学出版社.附 录附录1:时钟模块的输入信号代码module ufm_osc(rst_n,clk_div_8,clk_div_64,pro_ena_clk,clk_div_32,clk);input rst_n;output clk_div_8,clk_div_64,clk_div_32;output pro_ena_clk;output clk;wire oscena=1b1;wire clk;reg9:0 cnt_8;reg6:0 cnt_64;reg7:0cnt_32;reg pro_ena_clk=0;reg clk_div_8=0;reg clk_div_64=0;reg clk_div_32=0;internal_osc internal_osc(.oscena(oscena),.osc(clk);always (posedge clk or negedge rst_n)beginif(!rst_n)cnt_8=10d0;else if(cnt_8 =10d625)begincnt_8=cnt_8+1b1;pro_ena_clk=pro_ena_clk;endelse if(cnt_8 =10d694)begincnt_8=cnt_8+1b1;clk_div_8=clk_div_8; endelse if(cnt_8 =10d695)beginclk_div_8=clk_div_8;pro_ena_clk=pro_ena_clk;cnt_8=10d0;end else cnt_8=cnt_8+1b1;endalways (posedge clk_div_8 or negedge clk or negedge rst_n)beginif(!rst_n)begincnt_64=7d0;/cnt_32=8d0;endelse if(clk_div_8)begin cnt_64=7d0;/cnt_32=8d0;clk_div_64=0;/clk_div_32=0;endelse if(cnt_64 =7d5)beginclk_div_64=clk_div_64;cnt_64=cnt_64+1b1;endelse if(cnt_64 =7d87)begincnt_64=0;clk_div_64=clk_div_64;endelse cnt_64=cnt_64+1b1;endalways (posedge clk_div_8 or negedge clk or negedge rst_n)beginif(!rst_n)begin/cnt_64=7d0;cnt_32=8d0;endelse if(clk_div_8)begin /cnt_64=7d0;cnt_32=8d0;/clk_div_64=0;clk_div_32=0;endelse if(cnt_32 =8d5)beginclk_div_32=clk_div_32;cnt_32=cnt_32+1b1;endelse if(cnt_32 =8d174)begincnt_32=0;clk_div_32=clk_div_32;endelse cnt_32=cnt_32+1b1;endendmodule附录2:8位非线性码转换的12位均匀化输出代码/*LSB*/module conv_8_12(voice_pcm_input,voice_12bit_output,rst_n,status,clk_div_32,clk_div_64,clk_div_8);input voice_pcm_input,rst_n;output11:0 voice_12bit_output;output status;output clk_div_32,clk_div_64,clk_div_8;reg11:0 voice_12bit_output;reg7:0 voice_8bit=8d0;reg voice_symbol;reg3:0 page_in;reg2:0 page_out;reg2:0 i;reg status=0;/wire clk_div_64,clk_div_8,pro_ena_clk,clk_div_32;ufm_osc ufm_osc(.clk_div_64(clk_div_64),.clk_div_8(clk_div_8),.pro_ena_clk(pro_ena_clk),.rst_n(rst_n),.clk_div_32(clk_div_32);always (posedge clk_div_8 or negedge rst_n or posedge clk_div_64)begin if(!rst_n)voice_8bit=0;else if(clk_div_8) voice_8bit=8d0; else voice_8bit=voice_8bit,voice_pcm_input;endalways (posedge pro_ena_clk or negedge rst_n or posedge clk_div_8)beginif(!rst_n)beginvoice_12bit_output=12d0;page_in=4d0;page_out=3d0;voice_symbol=1d0;status=0;endelse if(clk_div_8)status=0;elsebeginvoice_symbol=voice_8bit0;for(i=0;i3;i=i+1)beginpage_outi=voice_8bit3-i;endfor(i=0;i(12d8-page_out)+(12d2048(12d8-page_out)12d4)*page_in;else if(!page_out)voice_12bit_output11:0=12d0,page_in;voice_12bit_output11=voice_symbol;status=1;endendendmodule附录3:4位ADPCM码输出代码module conv_12_adpcm(voice_pcm_input,voice_4bit_output,rst_n,clk_div_8,clk_div_32,clk_div_64);input rst_n;input voice_pcm_input;output voice_4bit_output;output clk_div_8,clk_div_32,clk_div_64;wire11:0 voice_12bit_input;wire status;wire clk_div_32,clk_div_64,clk_div_8;reg voice_4bit_output;reg 7:0 index_adjust7:0;reg 10:0 step_table59:0;reg 11:0 prev_sample;reg 11:0 cur_sample;reg11:0 delta;reg13:0 code;reg sb;/reg clk_div_64;reg5:0 index;reg3:0 enc_4bit;reg2:0 shift;conv_8_12 conv_8_12(.status(status),.voice_12bit_output(voice_12bit_input),.rst_n(rst_n),.voice_pcm_input(voice_pcm_input),.clk_div_32(clk_div_32),.clk_div_64(clk_div_64),.clk_div_8(clk_div_8);always (posedge status or negedge rst_n)beginif(!rst_n)begin prev_sample=0;cur_sample=0;index=0;enc_4bit=0;code=0;index_adjust0=-1;index_adjust1=-1;index_adjust2=-1;index_adjust3=-1;index_adjust4=2;index_adjust5=4;index_adjust6=6;index_adjust7=8;step_table0=7;step_table1=8;step_table2=9;step_table3=10;step_table4=11;step_table5=12;step_table6=13;step_table7=14;step_table8=16;step_table9=17;step_table10=19;step_table11=21;step_table12=23;step_table13=25;step_table14=28;step_table15=31;step_table16=34;step_table17=37;step_table18=41;step_table19=45;step_table20=50;step_table21=55;step_table22=60;step_table23=66;step_table24=73;step_table25=80;step_table26=88;step_table27=97;step_table28=107;step_table29=118;step_table30=130;step_table31=143;step_table32=157;step_table33=173;step_table34=190;step_table35=209;step_table36=230;step_table37=253;step_table38=279;step_table39=307;step_table40=337;step_table41=371;step_table42=408;step_table43=449;step_table44=494;step_table45=544;step_table46=598;step_table47=658;step_table48=724;step_table49=796;step_table50=876;step_table51=963;step_table52=1060;step_table53=1166;step_table54=1282;step_table55=1411;step_table56=1552;step_table57=1707;step_table58=1878;step_table59=2047;endelse if(status)begin cur_sample=voice_12bit_input;if(cur_sample10:0prev_sample10:0)case(cur_sample11,prev_sample11)2b00:begindelta=prev_sample10:0-cur_sample10:0;sb=1b1;end2b01:begindelta=prev_sample10:0+cur_sample10:0;sb=1b0;end2b10:b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【必做】上海安全员C3历年考试真题库及答案(高频500题)
- 2025年南京市中小学教师招聘笔试备考试题及答案解析
- 2025年虚拟演唱会版权合作
- 2025年甘孜藏族自治州中小学教师招聘笔试参考题库及答案解析
- 2025年新兴县中小学教师招聘笔试备考试题及答案解析
- 山西林业职业技术学院《马克思主义经典著作选读》2024-2025学年第一学期期末试卷
- 2025年虚拟数字人软件开发合作合同
- 2025年小学教师资格证考试(音乐学科知识与教学能力)考前测验卷后附答案
- 2025年三都水族自治县中小学教师招聘笔试参考试题及答案解析
- 上海市鲁迅中学2026届数学高一第一学期期末联考模拟试题含解析
- 装修公司施工制度总则参考
- 初中英语比较级和最高级专项练习题含答案
- 水文比拟法估算年径流量举例 (1)讲解
- 商务宴请的点菜技巧课件
- 软件开发chapter3(软件分析与设计CASE工具)
- 低压柜试验报告
- 单招协议培训
- 扑克牌搭高塔 课件(16张PPT) 小学班会活动
- 2023学年完整公开课版插座安装
- 医疗机构麻醉药品和精神药品的使用管理
- GB/T 3672.1-2002橡胶制品的公差第1部分:尺寸公差
评论
0/150
提交评论