乐曲硬件演奏电路设计verilogWord格式文档下载.docx

上传人:b****1 文档编号:269035 上传时间:2023-04-28 格式:DOCX 页数:26 大小:239.31KB
下载 相关 举报
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第1页
第1页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第2页
第2页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第3页
第3页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第4页
第4页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第5页
第5页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第6页
第6页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第7页
第7页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第8页
第8页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第9页
第9页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第10页
第10页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第11页
第11页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第12页
第12页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第13页
第13页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第14页
第14页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第15页
第15页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第16页
第16页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第17页
第17页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第18页
第18页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第19页
第19页 / 共26页
乐曲硬件演奏电路设计verilogWord格式文档下载.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

乐曲硬件演奏电路设计verilogWord格式文档下载.docx

《乐曲硬件演奏电路设计verilogWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《乐曲硬件演奏电路设计verilogWord格式文档下载.docx(26页珍藏版)》请在冰点文库上搜索。

乐曲硬件演奏电路设计verilogWord格式文档下载.docx

在两个8度音之间,又可分为12个半音,每两个半音的频率比为12√2。

另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E到F之间为半音,其余为全音[4]。

由此可以计算出简谱中从低音1至高音1之间每个音名对应的频率,如表2所示:

表2简谱中的音名与频率的关系

音名

频率/Hz

低音1

261.6

中音1

523.3

高音1

1046.5

低音2

293.7

中音2

587.3

高音2

1174.7

低音3

329.6

中音3

659.3

高音3

1318.5

低音4

349.2

中音4

698.5

高音4

1396.9

低音5

392

中音5

784

高音5

1568

低音6

440

中音6

880

高音6

1760

低音7

493.9

中音7

987.8

高音7

1975.5

所有不同频率的信号都是从同一个基准频率分频得到的。

由于音阶频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。

若基准频率过低,则由于分频比太小,四舍五入取整后的误差较大;

若基准频率过高,虽然误差变小,但分频数将变大。

实际的设计综合考虑这两方面的因素,在尽量减小频率误差的前提下取合适的基准频率。

本例中选取6MHz为基准频率。

若无6MHz的基准频率,则可以先分频得到6MHz,或换一个新的基准频率。

实际上,只要各个音名间的相对频率关系不变,演奏出的乐曲听起来都不会"

走调"

本例需要演奏的是梁祝乐曲,该乐曲各音阶频率及相应的分频比如表2所示。

为了减小输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前,有一个二分频的分频器。

表2中的分频比就是从6MHz频率二分频得到的3MHz频率基础上计算得出的。

由于最大的分频系数为9102,故采用14位二进制计数器分频可满足需要。

在表2中,除给出了分频比以外,还给出了对应于各个音阶频率时计数器不同的预置数。

对于不同的分频系数,只要加载不同的预置数即可。

采用加载预置数实现分频的方法比采用反馈复零法节省资源,实现起来也容易一些,如表3所示:

表3各音阶频率对应的分频比及预置数

分频比

预置数

9102

7281

5111

11272

7653

8730

4552

11831

6818

9565

3827

12556

6073

10310

3409

12974

5736

10647

2867

13516

此外,对于乐曲中的休止符,只要将分频系数设为0,即初始值为2141=16383即可,此时扬声器将不会发声。

音长的控制

音符的持续时间必须根据乐曲的速度及每个音符的节拍数来确定。

本例演奏的梁祝片段,最短的音符为4分音符,如果将全音符的持续时间设为1s的话,则只需要再提供一个4Hz的时钟频率即可产生4分音符的时长。

三、底层模块设计

由顶层模块图可以看到本方案分成8个模块。

1、48MHz分频成12MHz波形分频器,源代码和顶层模块如下

//48mhz分成12mhz的分频模块

modulediv_clk12mhz(clk_48mhz,clk_12mhz);

inputclk_48mhz;

outputclk_12mhz;

regclk_12mhz;

reg[21:

0]cnt;

always@(posedgeclk_48mhz)

if(cnt<

1)cnt=cnt+1;

//(48mhz/12mhz=4,cnt<

[4/2-1=1])

elsebegincnt=0;

clk_12mhz=!

clk_12mhz;

end

endmodule

2、12MHz分频成6MHz波形分频器,源代码和顶层模块如下:

//12mhz分成6mhz的分频模块,提供给song模块

modulediv_clk6mhz(clk_12mhz,clk_6mhz);

inputclk_12mhz;

outputclk_6mhz;

regclk_6mhz;

regcnt;

always@(posedgeclk_12mhz)

clk_6mhz=!

clk_6mhz;

endmodule

3、12MHz分频成4Hz波形分频器,源代码和顶层模块如下:

//12mhz分成4hz的分频模块,提供给song模块

modulediv_clk4hz(clk_12mhz,clk_4hz);

outputclk_4hz;

regclk_4hz;

1499999)cnt=cnt+1;

//(12mhz/4hz=3000000,cnt<

[3000000/2-1=1499999])

clk_4hz=!

clk_4hz;

end

4、12MHz分频成1mhz波形分频器,源代码和顶层模块如下:

//12mhz分成1mhz的分频模块,提供给quma模块

modulediv_clk1mhz(clk_12mhz,clk_1mhz);

outputclk_1mhz;

regclk_1mhz;

5)cnt=cnt+1;

//(12mhz/1mhz=12,cnt<

[12/2-1=5])

clk_1mhz=!

clk_1mhz;

5、12MHz分频成1khz波形分频器,源代码和顶层模块如下:

//12mhz分成1khz的分频模块,提供给quma模块

modulediv_clk1khz(clk_12mhz,clk_1khz);

outputclk_1khz;

regclk_1khz;

5999)cnt=cnt+1;

//(12mhz/1khz=12000,cnt<

[12000/2-1=5999])

clk_1khz=!

clk_1khz;

6、song模块源代码和顶层模块如下:

//音乐产生模块

modulesong(clk_6mhz,clk_4hz,speaker,high,med,low,k);

inputclk_6mhz,clk_4hz;

inputk;

outputspeaker;

output[3:

0]high,med,low;

reg[3:

reg[13:

0]divider,origin;

reg[9:

0]counter;

regspeaker;

wirecarry;

assigncarry=(divider==16383);

always@(posedgeclk_6mhz)

beginif(carry)divider<

=origin;

elsedivider<

=divider+1;

always@(posedgecarry)

beginspeaker<

=~speaker;

endalways@(posedgeclk_4hz)

begin

case({high,med,low})

'

b000000000011:

origin<

=7281;

//低音3

b000000000101:

=8730;

//低音5

b000000000110:

=9565;

//低音6

b000000000111:

=10310;

//低音7

b000000010000:

=10647;

//中音1

b000000100000:

=11272;

//中音2

b000000110000:

=11831;

//中音3

b000001010000:

=12556;

//中音5

b000001100000:

=12974;

//中音6

b000001110000:

=13347;

//中音7

b000100000000:

=13516;

//高音1

b000000000000:

=16383;

//休止符

endcase

always@(posedgeclk_4hz)

if(k==0)

if(counter==149)counter<

=0;

elsecounter<

=counter+1;

case(counter)//记谱

0:

{high,med,low}<

='

b000000000011;

//低音"

3"

1:

//持续4个时钟节拍

2:

3:

4:

b000000000101;

5"

5:

//发3个时钟节拍

6:

7:

b000000000110;

6"

8:

b000000010000;

//中音"

1"

9:

10:

11:

b000000100000;

2"

12:

13:

14:

15:

16:

b000001010000;

17:

18:

19:

b000100000000;

//高音"

20:

b000001100000;

21:

22:

b000000110000;

23:

24:

25:

//持续11个时钟节拍

26:

27:

28:

29:

30:

31:

32:

33:

34:

35:

36:

b000000000111;

7"

37:

38:

39:

40:

41:

42:

43:

44:

45:

46:

47:

48:

49:

50:

51:

52:

53:

54:

55:

56:

57:

//持续8个时钟节拍

58:

59:

60:

61:

62:

63:

64:

65:

66:

67:

68:

69:

70:

71:

72:

73:

74:

75:

76:

77:

78:

b000000000000;

79:

80:

81:

82:

83:

84:

85:

86:

87:

88:

89:

//持续6个时钟节拍

90:

91:

92:

93:

94:

95:

96:

97:

98:

99:

100:

101:

102:

103:

104:

105:

106:

107:

108:

109:

110:

111:

112:

113:

114:

115:

116:

117:

118:

119:

120:

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

当前位置:首页 > 自然科学 > 物理

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

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