fpgamp3实验报告

上传人:飞*** 文档编号:44316779 上传时间:2018-06-09 格式:DOCX 页数:18 大小:753.37KB
返回 下载 相关 举报
fpgamp3实验报告_第1页
第1页 / 共18页
fpgamp3实验报告_第2页
第2页 / 共18页
fpgamp3实验报告_第3页
第3页 / 共18页
fpgamp3实验报告_第4页
第4页 / 共18页
fpgamp3实验报告_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《fpgamp3实验报告》由会员分享,可在线阅读,更多相关《fpgamp3实验报告(18页珍藏版)》请在金锄头文库上搜索。

1、基于基于 Xilinx XUPV2P 的数字音乐播放器设计的数字音乐播放器设计一、实验目的和要求一、实验目的和要求 学习并熟练使用 verilog 语言来描述和设计数字系统, 掌握以 xilinx 公司的 XUP Virtex-Pro 开发系统为硬件平台,设计并完成一系列实验项目的能力 掌握 DDS 设计技术,了解 DS 技术的应用。 掌握用 chioscope Pro 观察波形的方法。二、主要仪器设备二、主要仪器设备 装有ISE、ModelSim SE和ChipScope Pro软件的计算机、XUP Virtex-II Pro开发系统。三、实验内容和数据记录、处理三、实验内容和数据记录、处理

2、 (1)DDS 模块的设计模块的设计 原理:原理:直接数字频率合成技术 DDS(Direct Digital Frequency Synthesis)是一种从相位出发直接合成所需波形的频率合成技术。它是以一个固定频率精度的时钟作为参考时钟源,通过数字信号处理技术产生一个频率与相位可调的输出信号(本实验主要是频率可调)。实质上,它是通过对现有的正弦信号进行不同采样率的采样,来实现输出信号的频率控制。DDS 工作原理:设一路频率为 f 的余弦信号:现以采样频率 fc 对该路信号采样,得到离散序列为:式中:Tc=1/fc 为采样周期。式(2)所对应的相位序列为:该相位序列的显著特性就是线性,即相邻样

3、值之间的相位增量是一常数,且仅与信号频率 f 有关,即相位增量为:由于频率厂与参考源频率 fc 之间满足:式中:K 和 M 为正整数。相位增量为:由式(6)可知,若将 2 的相位均匀量化为 M 等份,则频率为 f=(K/M)fc 的余弦信号以频率 fc 采样后,其量化序列的样本之间的量化相位增量为一变值 K。根据以上原理,用变量 K 构造一个量化序列:完成 (n)到另一序列 s(n)的映射,即由 (n)构造序列:式(8)是连续时间信号 s(t)经采样频率 fc 为采样后的离散时间序列。根据采样定理,当时,s(n)经低通滤波器滤波后,可唯一恢复 s(t)。可见,通过上述系列变换变量 K 将唯一确

4、定一个单频模拟余弦信号 s(t):该信号频率为:式(11)是 DDS 方程,在实际的 DDS 中,一般取 M=2N,N 为正整数,于是 DDS 方程可写成:本实验中采用正弦信号,Sine ROM 中存放一个完整的正弦信号样品,正弦信号样品表达式为:)22 , 1 , 0).(2*2(sin*) 12(iS11m nniipi。)(式中,m 为 SineRom 地址线位数,n 为 ROM 的数据线宽度,S(i)的数据形式为补码;fc 为取样时钟 clk 的频率,K 为相位增量,输出正弦信号的频率 fo和 K 共同决定,即:mc ofKf2*设计过程:设计过程: 实验原理图 :地址 处 理数据 处

5、理DQDQdoutaddrReset 复位,使原始地址 raw-addr 为 0,随着时钟 clk 的变化,原始地址 raw_addr 从 0 开始以增量 K 进行递增,原始地址 raw_addr 通过地址处理得到最终地址 rom_addr ,通过 rom_addr 读得波形数据,该 数据经过数据处理后得到最终的正弦信号。 几个要点: (1)由于正弦信号的对称性,我们采用储存 1/4 个周期的正弦信号样品的 SineROM,其地址为 10 位。对一个完整周期内的信号进行编号 00,01,10,11 ,因此读取完整周期信号,需 10+2=12 位地址, 即 m=12。 (2)需对 Sine Ro

6、m 的地址和数据进行处理DDS 模块主要代码:顶层文件(屈老师提供,这里对关键部分进行解释)timescale 1ns / 1psmodule dds(K, clk, reset, sine_data);input 21:0 K;input clk;input reset;output 15:0 sine_data;/Accumulatorwire23:0 raw_addr;wire23:0 sum1;add24 add24_inst(.a(2b00,K),.b(raw_addr),.ci(1b0),.sum(sum1),.co();dffr #(24) dffr24(.d(sum1), .c

7、lk(clk),.r(reset),.q(raw_addr);/address processwire9:0 rom_addr; wire9:0 addr_temp;assign rom_addr=(raw_addr21add12 add12_inst(.a(10raw_addr21raw_addr20:11),.b(12d0),.ci(raw_addr21),.sum(addr_temp),.co();DQ/rom readwire15:0 raw_data;sine_rom rom_inst(.clk(clk), .dout(raw_data), .addr(rom_addr);/data

8、 processwire addr_22;wire15:0 data;dff #(1) dff_inst1(.d(raw_addr22), .clk(clk), .q(addr_22);add16 add16_inst(.a(16addr_22raw_data),.b(16d0),.ci(addr_22),.sum(data),.co();/sine_datadff #(16) dff_inst16(.d(data), .clk(clk), .q(sine_data);endmodule 代码解释:代码解释:(a)assign rom_addr=(raw_addr21当 raw_adrr21:

9、11=1024 即波形达到最高点时,rom_addr 直接取 1023;(b)add12 add12_inst(.a(10raw_addr21raw_addr20:11),.b(12d0),.ci(raw_addr21),.sum(addr_temp),.co();a(10raw_addr21raw_addr20:11)是对 Sine Rom 地址进行处理:当 raw_addr21=0 时,a 取原值 raw_addr20:11,但 raw_addr21=1 时,对 raw_addr20:11取反,且此时 c= raw_addr21=1,即 对地址取反后加一;同样的编写思想用于 16 位加法器

10、add16 add16_inst(.a(16addr_22raw_data),.b(16d0),.ci(addr_22),.sum(data),.co();这是对对 Sine Rom 数据进行处理:当 addr_22=0 时,数据取原值,当 addr_22=1 时,数据取反后加一;注:注:以上代码较为精简精妙,也可由 IF 语句来描述,当效果没这么好;由于采样频率较高,对加法器工作速率要求高,采用选择进位加法器;仿真:采用 CHIPSCOPE 测试输出信号的波形如图 :有波形可知,本实验设计成功。(2)LAB21 以及以及 DDS 模块模块 音乐播放器设计要求: (1)可以播放四首乐曲,设置

11、play、next、reset 三个按键。按 play 键播放当前音乐,按 next 键播放 下一首乐曲。 (2)LED0 指示播放情况(播放时点亮)、LED2 和 LED3 指示当前乐曲序号。 根据实验任务可将系统划分为主控制器(mcu)、乐曲读取(song_reader)、音符播放(note_player)、AC97 音频接口(codec_conditioner)和 ac97_if 五个字模块,各子模块作用如下: mcu 模块接收按键信息,通知 song_reader 模块是否要播放(play)及播放哪首乐曲(song)。song_reader 模块根据 mcu 模块的要求,逐个取出音符n

12、ote,duration送给 note_player 模块播放,当 一首乐曲播放完毕,回复 mcu 模块乐曲播放结束信号(song_done)。 note_player 模块接收到需播放的音符,在音符的持续时间内,以 48kHz 速率送出该音符的正弦波样 品给 AC97 音频接口模块。当一个音符播放结束,向 song_reader 模块发送一个 note_done 脉冲索取新的 音符。 codec_conditioner、ac97_if 模块负责与 AC97 音频系统接口工作。 另外,按键处理模块完成输入同步化、防颤动和脉宽变换等功能。实验结果:将所有文件加入工程,对工程进行综合、约束、实现,

13、并下载工程文件到 XUP Virtex-II Pro 开发实 验板中。连接耳机,操作 play、reset、next 三个按键。 当按动 reset 按键时,所有状态复位,乐曲序号为 00。进入准备状态。 当按动 play 按键时,进入播放状态,指示灯 LED0 点亮,当前乐曲播放。 当按动 next 按键时,乐曲序号+1,乐曲序号指示灯变化,进入下一曲状态,播放指示灯点亮,同时 播放乐曲。 综上所述,实验结果符合设计要求。Lab21 的的 DDS 模块代码模块代码:对于 LAB21 中的 DDS 模块,K 为 20 位,整数部分 10 位,小数部分 10 位;因为采样频率低对加法器要求不高,

14、采用超前进位加法器,不采用流水线处理;顶层文件:(去除流水线用的触发器、修改相应的信号位数)module sine_reader(input19:0 step_size,input clk,input reset,input generate_next_sample,output 15:0 sample_out,output new_sample_ready);/Accumulatorwire21:0 raw_addr;wire21:0 sum1;add24 add24_inst(.a(4b0000,step_size),.b(2b00,raw_addr),.ci(1b0),.sum(sum1

15、),.co();dffre #(24) dffr24(.d(sum1), .clk(clk),.r(reset),.en(generate_next_sample),.q(raw_addr);/address processwire9:0 rom_addr; wire9:0 addr_temp;assign rom_addr=(raw_addr20add12 add12_inst(.a(10raw_addr20raw_addr19:10),.b(12d0),.ci(raw_addr20),.sum(addr_temp),.co();/rom readwire15:0 raw_data;sine

16、_rom rom_inst(.clk(clk), .dout(raw_data), .addr(rom_addr);/data processwire15:0 sample;/* dff #(1) dff_inst1(.d(raw_addr22), .clk(clk), .q(addr_22);*/add16 add16_inst(.a(16raw_addr21raw_data),/修改点.b(16d0),.ci(raw_addr21),.sum(sample),.co();/sine_datadffre #(16) dff_inst16(.d(sample),.r(1b0),.clk(clk),.en(ge

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号