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

  • 格式:doc
  • 大小:150.00 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FPGA实验报告

题目:硬件电子琴电路设计

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

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

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

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

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

图1 硬件电子琴电路结构

三.实验步骤.

1.在QUARTUSII软件下创建一工程,工程名为songer,芯片名为EP2C35F672C6;

2.输入数控分频器程序并命名为,保存与工程相同的文件夹中。

其功能仿真波形和时序仿真波形分别如下:

3.输入音阶发生器程序并命名为,保存与工程相同的文件夹中。

Module

ToneTaba

(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 begin

case(Index)

4'b0000 :begin Tone<=11'b;

Code<=4'b0000;High<=1'b0;end//2047 4'b0001 :begin Tone<=11'b001;

Code<=4'b0001;High<=1'b0;end//773 4'b0010 :begin Tone<=11'b000;

Code<=4'b0010;High<=1'b0;end//912

其功能仿真波形和时序仿真波形分别如下:

4.输入27分频程序并命名为,保存与工程相同的文件夹中。

5.module 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; end

else count<=count+1; end

endmodule

module div_50(Clk1,Q1);

input Clk1;

output Q1;

reg Q1;

reg[32:0] count;

always@(posedge Clk1)

begin if(count==1)

begin

count<=0;Q1=~Q1;end

else

count<=count+1;end

endmodule

其功能仿真波形和时序仿真波形分别如下:

6.建立梁祝乐曲演奏数据的MIF 文件。

WIDTH = 4 ; 入程序并命名为,保存与工程相同的文件夹中。

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

module NoteTabs(reset,Clk,ToneIndex);

input Clk,reset; output[3:0] ToneIndex; reg[7:0] Counter; always@(posedge Clk or negedge reset)

begin

if(!reset) Counter <= 8'b00000000; else if(Counter>=138) Counter<=8'b00000000; else Counter<=Counter+8'b1;end Music u5( .address(Counter), .clock(Clk), .q(ToneIndex) ); endmodule module songer(Clk1,Clk2,Code1, High1,Spkout,reset); input Clk1,Clk2,reset; output[3:0] Code1; output High1,Spkout; wire[10:0] Tone; wire[3:0] ToneIndex; wire Q1,Q2; NoteTabs u0( .Clk(Q2),

.reset(reset),

.ToneIndex(ToneIndex) ); ToneTaba u1( .Index(ToneIndex),

.Code(Code1), .High(High1), .Tone(Tone) ); Speakera u2( .Clk(Q1), .Tone(Tone), .SpkS(Spkout) ); div_50 u3( .Clk1(Clk1),

.Q1(Q1) ); div_27 u4( .Clk2(Clk2),

.Q2(Q2) ); endmodule