音频编解码芯片毕业论文内容摘要:
其中 FPGA 器件处于中心地位, FPGA 器件主要通过 I2C 总线给语音芯片WM8731 经行控制字配置。 初始化完成后,音频数据从 MIC 或 Line In 输入,经过 A/D 转换后 , 成为串行的数字信号并由 I2S 总线传入 FPGA 器件。 经过串并变换等处理之后,再经过 D/A 转换由 Line Out 输出。 I2S总线 Altera FPGA 器件 EP2C35F672C6 按键 I2C 总线 麦克风 Line In WM8731 Line Out 11 ED2 开发板 本设计主要用到了 Altera 公司推出的 ED2 开发板,该开发板是以 FPGA器件 EP2C35F672C6 为核心,板上含有 Flash、 SRAM 等存储器,标准 MIC、Linein、 Lineout 接口, Videoin 和 VGA 等音频视频接口,以及各种输入输出设备。 利用该开发板能方便设计开发,以利于后续的功能扩展。 语音芯片 WM8731 外围电路 ED2 开发板 上已集成了语音芯片 WM8731。 并连接 标准 MIC、 Linein、Lineout 接口 以连接麦克风和耳机等外 部设备。 其电路图如图 所示。 图 WM8731 外围电路 12 5 硬件模块 设计 与实现 开发环境 在硬件模块设计部分, 主要是利用 Altera 公司推出的 FPGA/CPLD 集成开发环境 Quartus II, 并使 用硬件描述语言 Verilog HDL 对 FPGA 器件的编程设计,以 控制 WM8731 高品质语音芯片 正常 工作,达到预期的功能。 Quartus II Quartus II 是 Altera 公司的综合性 PLD 开发软件,支持原理图、 VHDL、Verilog HDL 以及 AHDL( Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整 PLD 设计流程。 提供了完善的用户图形界面设计方式。 具有运行速度快,界面统一,功能集中,易学易用等特点。 Quartus II 支持 Altera 的 IP 核,包含了 LPM/Mega Function 宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。 Verilog HDL Verilog HDL 是一种硬件描 述语言,是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL 由 Gateway Design Automation公司开发 , 是目前世界上最流行的硬件描述语言 之一。 13 硬件模块设计 框 图 硬件模块设计框图, 如图 所示。 图 硬件模块设计框图 硬件模块 的 设计 大致包含顶层控制器模块、时钟分频模块、 I2C 控制字配置模块 、 I2C 时序接口模块、 I2S 时序接口及音频数据处理模块、 I2S 串行数据转并行数据模块 等 6 个 模块。 I2C 时序 接口模块 音频数据写出 音频数据读入 WM8731 I2C 控制字 配置模块 音频控制字写出 时钟 分频模块 WM8731 音频数据 处理 I2S 时序 接口 模块 I2S 串行数据 转并行数据 模块 顶层控制器 模块 14 功能模块的实现 顶层控制器模块 此模块主要 实现的功能 是对 上述 其余 5 个模块的 配置以及连线。 图 所示为该模块的设计结果。 图 顶层控制器模块 其 Verilog HDL 描述的设计关键代码如下: module AUD_TOP(clock_50m,sclk,sdat,dacclk,dacdat,bclk,adcdat,adcclk,rst_n,key1,key2,led1,led2,led,MCLK,sw1,sw2,LED)。 // 端口定义 …… …… assign led=rst_n。 // 复位按钮连接一个 LED 灯,显示按钮状态 assign MCLK=c0。 // 主时钟输入 set_wm8731(.clock_50m(clock_50m), // I2C 控制字配置模块 端口连接 15 .i2c_sclk(sclk),.i2c_sdat(sdat),.reset_n(rst_n),.key1(key1), .key2(key2),.led1(led1),.led2(led2),.sw1(sw1),.sw2(sw2))。 I2S_(.clock_ref(c0), // I2S 时序接口及音频数据处理模块端口连接 .dacclk(dacclk),.bclk(bclk),.dacdat(dacdat),.reset_n(rst_n), .adcclk(adcclk),.adcdat(adcdat),.data(data))。 clkdivz (.inclk0(clock_50m),.c0(c0))。 //时钟分频模块端口连接 endmodule 时钟分频模块 由于要使 WM8731 工作,必须给其提供一个主时钟频率。 此主时钟频率依照该芯片工作的不同模式有 、 MHz、 MHz 以及 MHz 这 4 中频率可选。 在本设计中, 选择 WM8731 工作在普通模式( Normal mode)下,并选择 MHz 为其主时钟频率。 该频率 可以通过 XTI 和 XTO 端口, 由晶振 提供。 但本设计 利用 FPGA 自带的 锁相环( PLL)和全 局时钟网络, 将 DE2 开发板上自带的 50MHz晶振分频得到。 因此本 模块主要运用 Quartus II环境下的 Mega Wizard 定制功能 自动生成的。 但 由于 50MHz 不能精确地分频到 ,所以采用了一个能分到一个最接近的频率,即。 如 图 所示 ,该模块以 50MHz 的时钟为输入,输出 分别连接到 MCLK 以及 I2S 时序接口及音频数据处理模块的时钟输入。 16 图 时钟分频模块 该模块 Verilog HDL 描述的设计关键代码如下: module clkdivz ( // 端口定义 inclk0, // 50MHz 时钟输入 c0)。 // 时钟输出 …… …… altpll altpll_ponent (.inclk (sub_wire3), // 调用 altpll IP 核 .clk (sub_wire0), …… …… .vcounderrange ())。 defparam = 3125, 17 = 50, = 1152, = 0, = CLK0, = 20200, = Cyclone II, …… …… endmodule I2C 时序接口模块 该模块主要实现对 I2C 时序的模拟, 控制 SCLK(数据时钟)和 SDAT(数据线)将存放在 i2c_data 中的 24 位控制字串行发送给 WM8731, 该模块 例化于 I2C 控制字配置模块 之中, 以实现对该芯片的控制字写入。 如 图 所示 ,在此模块中 i2c_data 为 24 位控制字写入; reset_n 为复位输入; clock_i2c 为 I2C 接口传输时钟; start 为传输开始标志输入; ack 为 I2C 时序中 3 位 应答位 进行或操作合并为一个 应答位 的输出; tr_end 为传输结束信号输出; i2c_sclk 为 I2C 接口数据 时钟输出; i2c_sdat 为 I2C 接口串行数据输出。 图 I2C 时序接口模块 I2C 时序接口模块时序仿真,如 图 所示。 此处 以 i2c_data 中 24 位数据 18 为 0111 0011 1000 0100 1100 0111 为例,当 start 信号拉低后, i2c_sclk 开始 传输串行数据时钟。 这里 I2C 时序采用 33 个 I2C 时钟周期进行,其中 411 位、1320 位、 2229 位 传送数据, 1 2 30 为应答位。 传输 状态 时, 数据高位在前低位在后, 24 位数据每 8 位为一字节, 每发送 1 个字节的数据,就应返回一个应 答信号将 i2c_sdat 状态拉 高。 空闲状态时, i2c_sdat 为高阻态, i2c_sclk为高电平状态。 图 I2C 时序接口模块时序仿真 该模块的 Verilog HDL 设计,关键代码如下: module i2c_(clock_i2c,reset_n,ack,i2c_data,start,tr_end,i2c_sclk,i2c_sdat)。 …… …… assign ack=ack1|ack2|ack3。 // 应答信号 assign i2c_sclk=sclk|(((cyc_count=4)amp。 (cyc_count=30))?~clock_i2c:0)。 // 数据时钟 assign i2c_sdat=reg_sdat?139。 bz:0。 // 串行数据线 always@(posedge clock_i2c or negedge reset_n) // 模拟 I2C 传输 数据 时钟 begin if(!reset_n) // 复位 cyc_count=639。 b111111。 else begin 19 if(start==0) cyc_count=0。 else if(cyc_count639。 b111111) cyc_count=cyc_count+1。 end end always@(posedge clock_i2c or negedge reset_n) // 模拟 I2C 传输串行数据 begin if(!reset_n) // 复位 begin …… …… else case(cyc_count) // I2C 时钟周期 赋值 0:begin ack1=1。 ack2=1。 ack3=1。 tr_end=0。 sclk=1。 reg_sdat=1。 end 1:reg_sdat=0。 // 开始传输 …… …… 10:reg_sdat=i2c_data[16]。 11:reg_sdat=1。 //应答信号 1 12:begin reg_sdat=i2c_data[15]。 ack1=i2c_sdat。 end …… …… 20 19:reg_sdat=i2c_data[8]。 20:reg_sdat=1。 //应答信号 2 21:begin reg_sdat=i2c_data[7]。 ack2=i2c_sdat。 end …… …… 28:reg_sdat=i2c_data[0]。 29:reg_sdat=1。 //应答信号 3 …… …… 32:begin reg_sdat=1。 tr_end=1。 end endcase end endmodule I2C 控制字配置模块 该模块 是 基于 I2C 时序接口模块 之上的控制单元。 如 图 所示,该模块主要实现对 语音芯片 WM8731 的初始配置、 生成 I2C 控制时钟 、输出音量控制 以及 输出模式选择 等功能。 以下将以实现的功能为单位来介绍该模块。 21 图 I2C 控制字配置模块 (1) 初始配置 初始配置功能是本模块要实现的主要功能。 该部分主要 是对 I2C 时序接口模块例化,并 向该模块写入 预设定的 控制字以及开始信号、等待结束信号、校验应答信号,以实现 I2C 设置过程。 针对语音芯。音频编解码芯片毕业论文
相关推荐
1200mm(远望) 光圈数 功能 水平范围 360176。 连续旋转 水平速度 水平预置点速度: 20176。 /s 垂直范 围 0176。 ~90176。 垂直速度 垂直预置点速度: 15176。 /s 比例变倍 支持 预置点 200 个 自动模式 关闭 / 预置点 / 巡航扫描 / 花样扫描 / 自动扫描 / 随机扫描 / 帧扫描 巡航扫描 8 条,每条可添加 32 个预置点 花样扫描 4
为 60Km/h,根据《城市道路设计规范》,可能通行能力为 1690 pcu/h;主干路道路分类系数为。 本项目道路单向机动车道数需求为单向。 3)设计年限末单向机动车道数 需求分析: 计算分析可知: 设计年限末所需机动车道数 ,设计单向机动车道数 4,由设计车道数大于所需车道数可见,可以满足机动车辆的行驶要求。 第四章 技术标准和采用的规范 主要技术标准 (一)道路等级和计算行速度 按规划
........................................................................................................ 2 (二)企业发展历程 ..................................................................................
Woman W Lesson 8 Part B Dialogue You Don’ t Look Very Happy Max What’ s the matter, Peter? You don’ t look very happy. Peter I’ m not, I’ m worried about my English. Max What’ s the problem? Peter I’
내솥 손잡이 内锅柄내솥 内锅请正常放入内锅。 물받이 漏水盒煮饭或保温后,必须把漏水盒中的水倒掉。 漏水盒中有饭水会出现异味。 주걱꽂이 饭板插位전원코드电源线온도감지기요리안내 料理说明书찜판蒸盘通气针청소용 핀温度传感器 (실물은 본체바닥면에부착되어 있습니다.) 전원플러그 电源插头 (通气针贴在产品底部)10기능 조작부의 이름과 역할 / 기능 표시부의 이상점검