当前位置:文档之家› FPGA硬件电子琴电路设计实验报告

FPGA硬件电子琴电路设计实验报告

.FPGA实验报告题目:硬件电子琴电路设计一.实验目的:学习利用数控分频器设计硬件电子琴实验。

二.实验原理及内容:主系统由3个模块组成,顶层设计文件中包含三个功能模块,Speakera.v 和ToneTaba.v ,NoteTabs.v 。

模块ToneTaba是音阶发生器,当8位发声控制输入Index中某一位为高电平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code 输出对应该音阶简谱的显示数码,如‘5’,并由High输出指示音阶高8度显示。

模块Speakera中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块Speakera由端口Tone获得一个2进制数后,将以此值为计数器的预置数,对端口Clk12MHZ输入的频率进行分频,之后由Spkout向扬声器输出发声。

增加一个NoteTabs模块用于产生节拍控制(Index数据存留时间)和音阶选择信号,即在NoteTabs模块放置一个乐曲曲谱真值表,由一个计数器的计数值来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。

图1 硬件电子琴电路结构三.实验步骤.1.在QUARTUSII软件下创建一工程,工程名为songer,芯片名为EP2C35F672C6;2.输入数控分频器程序并命名为Speakera.v,保存与工程相同的文件夹中。

.其功能仿真波形和时序仿真波形分别如下:3.输入音阶发生器程序并命名为ToneTaba.v ,保存与工程相同的文件夹中。

PreClk<=1'b0;Count4<=Count4+4'b1; end end always@(posedge PreClk)begin if(Count11>=11'h7FF) begin Count11<=Tone; FullSpkS<=1'b1; end else begin PreClk<=1'b1; Count4<=1;endelse beginCount11<=Count11+11'b1;FullSpkS<=0; end endalways@(posedge FullSpkS)begin Count2<=~Count2;if(Count2==1'b1) SpkS<=1'b1; else SpkS<=1'b0; end endmoduleModuleToneTaba(Index,Code,High,Tone); input[3:0] Index; output[3:0] Code; output High; output[10:0] Tone; reg[3:0] Code=0; reg High=0; reg[10:0] Tone=0;always begincase(Index)4'b0000 :begin Tone<=11'b11111111111; Code<=4'b0000;High<=1'b0;end//2047 4'b0001 :begin Tone<=11'b01100000101; Code<=4'b0001;High<=1'b0;end//773 4'b0010 :begin Tone<=11'b01110010000; Code<=4'b0010;High<=1'b0;end//912. 其功能仿真波形和时序仿真波形分别如下:4.输入27分频程序并命名为div_27.v,保存与工程相同的文件夹中。

5.4'b0011:beginTone<=11'b10000001100;Code<=4'b0011;High<=1'b0;end//10364'b0101 :begin Tone<=11'b10010101101;Code<=4'b0101;High<=1'b0;end//11974'b0110 :begin Tone<=11'b10100001010;Code<=4'b0110;High<=1'b0;end//12904'b0111 :begin Tone<=11'b10101011100;Code<=4'b0111;High<=1'b0;end//1372;4'b1000 :begin Tone<=11'b10110000010;Code<=4'b0001;High<=1'b1;end//1410;4'b1001 :begin Tone<=11'b10111001000;Code<=4'b0010;High<=1'b1;end//1480;4'b1010 :begin Tone<=11'b11000000110;4'b1010 :begin Tone<=11'b11000000110;4'b1010 :begin Tone<=11'b11000000110;Code<=4'b0011;High<=1'b1;end//1542;4'b1100 :begin Tone<=11'b11001010110;Code<=4'b0101;High<=1'b1;end//1622;4'b1101 :begin Tone<=11'b11010000100;Code<=4'b0110;High<=1'b1;end//1668;4'b1111 :begin Tone<=11'b11011000000;Code<=4'b0001;High<=1'b1;end//1728;endcaseendendmodulemodule div_27(Clk2,Q2);input Clk2;output Q2;reg Q2;reg[32:0] count;always@(posedge Clk2)begin if(count==3374999)begin count<=0;Q2=~Q2; endelse count<=count+1; endendmodulemodule div_50(Clk1,Q1);input Clk1;output Q1;reg Q1;begin if(count==1)begincount<=0;Q1=~Q1;endelse其功能仿真波形和时序仿真波形分别如下:6.建立梁祝乐曲演奏数据的MIF文件。

WIDTH = 4 ; //定义宽度为4,深度为256的mif文件DEPTH = 256 ;ADDRESS_RADIX = DEC ; //每阅读一位后,自动移动到下一位,数据也读到下一位DA TA_RADIX = DEC ;CONTENT BEGIN --注意实用文件中要展开以下数据,每一组占一行00: 3 ; 01: 3 ; 02: 3 ; 03: 3; 04: 5; 05: 5; 06: 5;07: 6; 08: 8; 09: 8;10: 8 ; 11: 9 ; 12: 6 ; 13: 8; 14: 5; 15: 5; 16: 12;17: 12;18: 12; 19:15;20:13 ; 21:12 ; 22:10 ; 23:12; 24: 9; 25: 9; 26: 9; 27: 9; 28: 9; 29: 9;30: 9 ; 31: 0 ; 32: 9 ; 33: 9; 34: 9; 35:10; 36: 7; 37: 7; 38: 6; 39: 6;40: 5 ; 41: 5 ; 42: 5 ; 43: 6; 44: 8; 45: 8; 46: 9; 47: 9; 48: 3; 49: 3;50: 8 ; 51: 8 ; 52: 6 ; 53: 5; 54: 6; 55: 8; 56: 5; 57: 5; 58: 5; 59: 5;60: 5 ; 61: 5 ; 62: 5 ; 63: 5; 64:10; 65:10; 66:10; 67:12; 68: 7; 69: 7;70: 9 ; 71: 9 ; 72: 6 ; 73: 8; 74: 5; 75: 5; 76: 5; 77: 5; 78: 5; 79: 5;80: 3 ; 81: 5 ; 82: 3 ; 83: 3; 84: 5; 85: 6; 86: 7; 87: 9; 88: 6; 89: 6;90: 6 ; 91: 6 ; 92: 6 ; 93: 6; 94: 5; 95: 6; 96: 8; 97: 8; 98: 8; 99: 9;100:12 ;101:12 ;102:12 ;103:10;104: 9;105: 9;106:10;107: 9;108: 8;109: 8;110: 6 ;111: 5 ;112: 3 ;113: 3;114: 3;115: 3;116: 8;117: 8;118: 8;119: 8;120: 6 ;121: 8 ;122: 6 ;123: 5;124: 3;125: 5;126: 6;127: 8;128: 5;129: 5;130: 5 ;131: 5 ;132: 5 ;133: 5;134: 5;135: 5;136: 0;137: 0;138: 0;END ;7.输入程序并命名为NoteTabs.v,保存与工程相同的文件夹中。

8.输入硬件演奏电路顶层设计文件并命名为songer.v,保存与工程相同的文件夹中。

9.锁定引脚后重编译并进行下载。

四.思考题.1.电路上应该满足哪些条件,才能用数字器件直接输出的方波驱动扬声器发声?答:(1)输出的频率在扬声器的工作范围之内(扬声器的工作频率范围一般是能听见的声波);(2)驱动电流能够驱动扬声器。

2.如果演奏其他乐曲,程序应做哪些方面的改动?答:程序应将mif文件改掉以及ToneTaba和NoteTabs做一些响应的小改变。

相关主题