fpga课设蜂鸣器音乐演奏Word文档格式.docx

上传人:b****3 文档编号:7774616 上传时间:2023-05-09 格式:DOCX 页数:17 大小:132.60KB
下载 相关 举报
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第1页
第1页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第2页
第2页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第3页
第3页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第4页
第4页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第5页
第5页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第6页
第6页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第7页
第7页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第8页
第8页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第9页
第9页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第10页
第10页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第11页
第11页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第12页
第12页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第13页
第13页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第14页
第14页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第15页
第15页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第16页
第16页 / 共17页
fpga课设蜂鸣器音乐演奏Word文档格式.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

fpga课设蜂鸣器音乐演奏Word文档格式.docx

《fpga课设蜂鸣器音乐演奏Word文档格式.docx》由会员分享,可在线阅读,更多相关《fpga课设蜂鸣器音乐演奏Word文档格式.docx(17页珍藏版)》请在冰点文库上搜索。

fpga课设蜂鸣器音乐演奏Word文档格式.docx

音调分频模块fenpin接收tabled输出的分频系数tone,并据此分频,将对应频率的信号buzz输出给扬声器供其发声。

b.流程图:

数码管显示

clk输出buzz

五.实验过程

1.时钟分频模块fdiv

通过基准时钟频率clk(50mhz)产生两个时钟信号clk1(1mhz),clk2(5hz)。

程序见附录1:

其仿真结果如下:

2.自动演奏autoplays模块

这个模块用FPGA的片内ROM存放乐曲的简谱真值表,由一个二进制计数器为乐曲数据存储ROM的地址发生器随着autoplay中计数器按clk2时钟频率做加法计数时,乐曲数据存储器ROM中的音符数据,将从ROM中的输出口输向音符查表模块table,所存储的乐曲就开始连续自然地演奏起来。

ROM的定制过程,利用MegawizardPlug-InManager定制音符数据存储器music,其中music_rom的程序见附录二。

在定制ROM的过程中,由于需要存入296个音符数据,选择ROM的数据位宽为8,地址为64(共计512个字),ROM的类型选择为Auto。

根据义勇军进行曲的音乐简谱,以及简谱中的低、中、高和额节拍与发生频率的关系等等,化成个音符数字有296个,存入ROM中。

在数据文件编辑窗中,在mif格式表格中填入义勇军进行曲的296个音符数据,并以十进制填入,最后保存数据文件名为music.mif,存入原路径中。

其中1—7表示低音,8—14表示中音,15—21表示高音。

Autoplay的程序见目录三。

在源程序中index_auto是音乐节拍发生器输出地音符数据;

clk2是计数时钟输入端,该信号作为音符的快慢信号,频率越高,时钟的输出节拍速度就越快,演奏的速度也越快。

该模块仿真结果如下:

3、查表及显示table模块

利用index_auto查找并输出分频系数tone。

其程序见目录四。

在源程序中,tone是音调分频模块提供音符频率的分频系数,此处有一个位选信号come和段选信号seg可以通过数码管来显示乐曲演奏时对应的高中低音符。

在此模块中假设index_auto音符为15,其仿真结果如下:

4、音调分频模块(speakera)设计

分频器对FPGA的clk1进行分频,得到与各个音阶对应的频率输出,里面包含一个计数器,当计数器满时,产生一个进位信号,该信号就是用作发音的频率信号,在计数器端的预置值端给定不同的初值时,产生不同频率的信号。

其程序见附录五。

假设tone为252,其仿真结果如下:

5、根据层次化设计要求把各个部分根据实验设计流程,设计成顶层文件。

其程序见附录六。

6、经编译无错后,绑定引脚,下载测试。

其管脚分配如下:

六、实验结果及分析

下载测试,下载完毕,听到完整的一段《义勇军进行曲》音乐,并且音调很好,数码管显示没有错误。

频率折算中,由于频率计数不能是小数,采用了四舍五入的方法,所以得到的频率并不是十分精确的,但是不会影响结果。

附录

附录一

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityfdivis

port(clk:

instd_logic;

clk1:

outstd_logic;

clk2:

outstd_logic);

--50MHz

endfdiv;

architecturebehaveoffdivis

signaltemp:

std_logic;

--f=1/(2*(cnt+1))*f0

signaltemp1:

signalcnt1:

integerrange0to25;

--1mhz

signalcnt2:

integerrange0to5000000;

--5hz

begin

process(clk)--1mhz

begin

if(clk'

eventandclk='

1'

)then

if(cnt1=24)then

cnt1<

=0;

temp<

=nottemp;

else

=cnt1+1;

endif;

endif;

endprocess;

clk1<

=temp;

process(clk)--5hz

if(cnt2=4999999)then

cnt2<

temp1<

=nottemp1;

cnt2<

=cnt2+1;

clk2<

=temp1;

end;

附录二

LIBRARYieee;

USEieee.std_logic_1164.all;

LIBRARYaltera_mf;

USEaltera_mf.altera_mf_components.all;

ENTITYmusic_romis

PORT

address:

INSTD_LOGIC_VECTOR(8DOWNTO0);

inclock:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(4DOWNTO0));

ENDmusic_rom;

ARCHITECTURESYNOFmusic_romIS

SIGNALsub_wire0:

STD_LOGIC_VECTOR(4DOWNTO0);

COMPONENTaltsyncram

GENERIC(

intended_device_family:

STRING;

width_a:

NATURAL;

widthad_a:

numwords_a:

operation_mode:

outdata_reg_a:

address_aclr_a:

outdata_aclr_a:

width_byteena_a:

init_file:

lpm_hint:

lpm_type:

STRING

);

PORT(

clock0:

address_a:

q_a:

ENDCOMPONENT;

BEGIN

q<

=sub_wire0(4DOWNTO0);

altsyncram_component:

altsyncram

GENERICMAP(

intended_device_family=>

"

Cyclone"

width_a=>

8,

widthad_a=>

9,

numwords_a=>

512,

operation_mode=>

ROM"

outdata_reg_a=>

UNREGISTERED"

address_aclr_a=>

NONE"

outdata_aclr_a=>

width_byteena_a=>

1,

init_file=>

music.mif"

lpm_hint=>

ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=ROM"

lpm_type=>

altsyncram"

PORTMAP(clock0=>

inclock,address_a=>

address,q_a=>

sub_wire0);

END;

附录三

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYautoplayIS

PORT(clk2:

INSTD_LOGIC;

index_auto:

OUTSTD_LOGIC_VECTOR(4DOWNTO0));

ENDautoplay;

ARCHITECTUREbehavOFautoplayIS

componentmusic_rom

PORT

ENDcomponent;

SIGNALCQI:

STD_LOGIC_VECTOR(8DOWNTO0);

PROCESS(clk2)

IFclk2'

EVENTANDclk2='

THENCQI<

=CQI+1;

ENDIF;

ENDPROCESS;

u1:

music_romPORTMAP(address=>

CQI,q=>

index_auto,inclock=>

clk2);

附录四:

entitytableis

port(index_auto:

inSTD_LOGIC_VECTOR(4DOWNTO0);

come:

outstd_logic_vector(7downto0);

seg:

tone:

outintegerrange0to1910);

architecturesearchoftableis

process(index_auto)

caseindex_autois

when"

00001"

=>

tone<

=1910;

come<

="

11111110"

;

seg<

11111001"

00010"

=1701;

10100100"

00011"

=1516;

10110000"

00100"

=1431;

10011011"

00101"

=1275;

10010010"

00110"

=1135;

00111"

=1011;

11111000"

01000"

=954;

11111101"

01001"

=850;

01010"

=757;

01011"

=715;

01100"

=637;

01101"

=567;

01110"

=505;

01111"

=477;

11111011"

10000"

=425;

10001"

=378;

10010"

=357;

10011"

=318;

10100"

=283;

10101"

=252;

whenothers=>

=0;

00000000"

endcase;

附录五

entityfenpinis

port(clk1:

--1MHz

inintegerrange0to1910;

buzz:

architecturebehaveoffenpinis

signalclk_data:

signali:

integerrange0to1910;

yinpin:

process(clk1)

if(clk1'

eventandclk1='

if(i=tone)then

i<

clk_data<

=notclk_data;

=i+1;

endprocessyinpin;

--f=1/(2*(tone+1))*f0

buzz<

=clk_data;

附录六

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

entitytopis

port(clk:

come_top:

seg_top:

spkout:

endtop;

architecturebehaveoftopis

componentfdiv

--4hz

endcomponent;

componenttable

componentautoplay

componentfenpin

--输入分频系数

signalclk1_top:

std_logic;

signalclk2_top:

signalindex_auto_top:

std_logic_vector(4downto0);

signaltone_top:

integerrange0to1910;

u1:

fdivportmap(clk=>

clk,clk1=>

clk1_top,clk2=>

clk2_top);

u2:

tableportmap(index_auto=>

index_auto_top,tone=>

tone_top,come=>

come_top,seg=>

seg_top);

u3:

autoplayportmap(clk2=>

clk2_top,index_auto=>

index_auto_top);

u4:

fenpinportmap(clk1=>

clk1_top,tone=>

tone_top,buzz=>

spkout);

endbehave;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2