西电.docx
- 文档编号:4911971
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:43
- 大小:94.24KB
西电.docx
《西电.docx》由会员分享,可在线阅读,更多相关《西电.docx(43页珍藏版)》请在冰豆网上搜索。
西电
西安邮电大学
FPGA课程设计报告
题目:
简易电子琴设计及FPGA功能验证
院系:
电子工程学院
专业班级:
微电子0901
学生姓名:
袁东明(04094026)
导师姓名:
黄海生
起止时间:
2012-6-18至2012-6-29
2012年6月29日
目录
1.任务..2
2.目的2
3.使用环境2
4.FPGA课程设计详细内容2
4.1技术规范2
4.1.1总体描述2
4.1.2结构框图2
4.1.3引脚描述3
4.1.3应用范围................................................................................................5
4.2设计方案5
4.2.1顶层方案设计5
4.2.2顶层模块程序7
4.3功能验证方案及源程序7
4.3.1按键输入控制模块方案设计及源程序.................................................7
4.3.2控制模块方案设计及源程序.................................................................8
4.3.3LCD驱动模块方案设计及源程序.......................................................11
4.4电路设计及功能仿真报告19
4.5综合及布局布线报告和引脚分布报告21
4.6硬件测试结果报告21
5.课程设计的心得体会22
6.参考资料22
1.任务:
a、设计一个简单电子琴。
(内置2~4首简单音调曲)
b、用FPGA开发板的按键可选择演奏内置曲调,用数码管显示当前演奏的哪个演奏曲目或停止。
c、要求电子琴具有自主选择,自动播放所选曲目或停止曲目。
2.目的:
a、在掌握计算机组成原理理论相关的基础上,了解EDA技术,掌握VerilogHDL硬件描述语言的设计方法和思想,通过学习的VerilogHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识;
b、深入学习VerilogHDL、FPGA,了解其编程环境;
c、学会运用Modelsim和QuartusII等编程仿真软件;
d、将硬件语言编程与硬件实物功能演示相结合,加深理解VerilogHDL、FPGA的学习;
3.使用环境(软件/硬件环境,设备等)
软硬件环境:
软件:
QuartusII7.2,Modelsim6.1;
硬件环境:
DEII开发板;
设备:
PC一台,USB下载线,FPGA开发板及电源。
在EDA软件平台上,根据硬件描述语言Verilog完成的设计文件,自动的完成逻辑编译、化简、分割、综合及优化、布局布线、仿真、目标芯片的适配编译、逻辑映射和编程下载等工作。
VerilogHDL语言,用Modelsim进行前仿真,以及代码的生成,验证程序验证,也可进行综合。
用QuartusII进行后仿真。
4.FPGA课程设计详细内容
4.1技术规范
4.1.1原理
简易电子琴的设计通过软硬件结合实现,硬件系统包括主控制器芯片、LED、蜂鸣器等,软件资源包括编写VerilogHDL程序的应用软件Modelsim和仿真软件QuartusII。
电子琴有自动播放功能。
播放功能中有三首曲子。
程序共有六个模块,分别为主模块、数码管显示模块、分频模块、计数器模块、存储器模块、音频输出模块。
硬件实现是用一个数码管显示当前播放的曲目,另外四个按键key1、key2用来选择曲目。
通过主模块调用各模块实现电子琴的功能。
乐曲演奏的原理:
乐曲演奏的原理:
组成乐曲的每个音符的频率值(音调)以及持续时间(音长)是乐曲能持续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号的频率的高低和持续的时间,就可以使扬声器发出持续的乐曲声。
●音调的控制
频率的高低决定了音调的高低。
音乐的十二平均率规定:
每两个八度音(如简谱中的中音1与高音1)之间的频率相差一倍。
在两个八度音之间,又可分为十二个半音,每半个音的频率比为
。
另外,音名A(简谱中的低音6)的频率为440HZ,音名B到C之间,E到F之间为半音,其余为全音。
由此可以计算出简谱中从低音1至高音1之间的每个音名对应的频率如图所示:
音名
频率(HZ)
音名
频率(HZ)
音名
频率(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
所有不同频率均从同一基准频率分频得到。
将分频数四舍五入进行取整,并尽量减小误差。
在本设计中选取5MHZ作为基准频率。
从下表中可以看出最大分频系数为11468,采用14位二进制计数器分频可满足要求。
此外还应给出预置数,对应不同的预置数,只需加载不同的预置数即可。
采用加载预置数实现分频的方法比采用反馈复零法节省资源,实现起来更加容易。
音名
分频比
预置数
音名
分频比
预置数
音名
分频比
预置数
低音1
9557
6826
中音1
4777
11606
高音1
2389
13994
低音2
8512
7871
中音2
4257
12126
高音2
2128
14255
低音3
7585
8798
中音3
3792
12591
高音3
1896
14487
低音4
7159
9224
中音4
3579
12804
高音4
1790
14593
低音5
6378
10005
中音5
3189
13194
高音5
1594
14789
低音6
5682
10701
中音6
2841
13524
高音6
1420
14963
低音7
5062
11321
中音7
2531
13852
高音7
1266
15117
●音长的控制
音符的持续时间须根据音乐的速度及每个音符的节拍数来确定。
如果设定全音符的持续时间为1S的话,假设产生4分音符,则产生四分频即可实现四分音符的时长,并提供4HZ分频器。
如图为乐曲演奏的原理图,其中,乐谱产生电路用来控制音乐的音调和时长。
控制音调通过设置计数器的预置数来实现,预置不同的数值会可以使计数器产生不同频率的信号,从而产生不同的音调。
控制音长是通过控制计数器预置数的停留时间来实现的,预置数的停留时间越长,则该音符的演奏时间越长,如2分音符,在记谱时将该音符记录两次即可。
4.1.2总体方案
本次设计课程的目的是让我们在学习verilogHDL的基础上更加深入的了解硬件设计语言的功能、作用及其特征,并且将我们的动手能力与创新能力结合起来。
本次试验的总体框图为:
设计框图说明
4.1.3引脚描述
信号名
输入/输出
目标/源
功能描述
CLK
Input
Pin
主时钟频率,5MHZ,占空比为1:
1
DIR
Input
Pin
使能端,控制时钟产生,以及读写同步
OUT
Output
Pin
输出乐曲信号(方波形式)
SCREEN
Output
Pin
数码管显示信号
4.1.4顶层划分
顶层模块说明:
1.D触发器:
实现信号读取,产生内部使能端,控制分频器;
2.分频器:
实现与基准时钟同步操作,读取存储器数据进行分频操作,实现音调与音长的改变与输出;
3.节拍发生器:
根据使能端,产生对应的频率产生对应音符时长;
4.存储器:
实现将预置数传送给分频器,实现曲目的不停音调和音长;
5.2分频器:
将产生的信号再次进行2分频;
注:
音名显示控制
音名显示电路用来显示演奏乐曲时对应的音乐曲曲目名。
可以用三个数码管,
加以显示,本设计中使用HIGH[3:
0],MED[3;0],LOW[3;0]等信号加以显示,为了能使其循环显示,需要一时长计数器,等音乐演奏完成后,保证自动从头开始演奏。
4.1.5子模块描述
<1>按键接收器D触发器
1、功能描述
运用D触发器和数据锁存器实现数据线输出的使能端。
2、管脚描述
信号名称
输入/输出
源
目标
功能描述
DIR
输入
Pin
按键输入信号
DR
输出
Pin
使能端
3、实现说明:
●在按键信号产生后,进行信号的锁存和产生使能信号。
4、验证方案
●正常的信号锁存,和信号转换;
●是否实现正确使能输出;
<2>节拍发生器分频器
1、功能描述
根据信号的输入,对应产生对应曲目的节拍频率时钟用来读取存储器音调音长数据,产生不同的预置数
2、管脚描述
信号名称
输入/输出
源
目标
功能描述
DIR
输入
PIN
按键输入
CLK
输入
PIN
基准时钟频率
CK
输出
PIN
1位节拍频率时钟
3、实现说明
在CLK的上升沿,将锁存后的DIR信号输入到内部,并根据对应时钟节拍分频,产生对应节拍频率。
4、测试
略;
<3>分频器
1、功能描述
将基准时钟按照预置数的信息进行分频,且与时钟同步,并当使能端低电平时,停止输出,也可实现循环播放。
2、管脚描述
信号名称
输入/输出
源
目标
功能描述
DIR
输入
PIN
使能端
CK
输入
PIN
基准频率
VOICE
输入
PIN
预置数
SPEAK
输出
PIN
乐曲输出
;
3、实现说明
通过计数器、存储器、D触发器,实现分频。
当计数从预置数到初始值时Speaker翻转一次,即为分频。
4、测试
用modelsim仿真,观察波形是否为所需方波;
<4>存储器
1、功能描述
按照使能端的数据,选择对应的预置数据进行读操作,并且于时钟同步。
2、管脚描述
信号名称
输入/输出
源
目标
功能描述
DR
输入
PIN
使能端
CLK
输入
PIN
基准频率
VOICE
输出
PIN
读取的预置数
SCREEN
输出
PIN
数码管信号输出
;
3、实现说明
通过选择,在时钟的上升沿进行数据的读取,并将读出的数据同时传至数码管,与分频器。
4、测试
用modelsim仿真,观察预置数的值是否为对应曲目;
4.1.6验证方案:
正常情况下,输入一个DIR的值,查看波形输出是否正常。
改变DIR的值,再次查看波形输出是否正常,并且其频率是否满足上述的公式计算出的值。
4.1.7应用范围:
简易电子琴可以应用于简单的设计中,亦可应用于娱乐方面。
4.2设计方案
4.2.1顶层方案设计
顶层主要是对各个子模块进行调用与连接,顶层主要调用以下模块:
(1)按键驱动模块
该模块用于选择所要播放曲目。
(2)控制模块:
该模块用于处理比较所选择的功能。
(3)数码管显示模块:
该模块用于显示用户是否登陆成功,即LCD驱动。
4.2.2顶层模块程序
//信号定义与说明
//CLK_4HZ:
用于控制音长(节拍)的时钟频率
//clk_6MHZ:
用于产生各种音阶频率的基准频率
//speak:
用于激励扬声器的输出信号,本例中为方波信号
//high,med,low:
分别用于显示高音,中音和低音音符,各驱动一个数码管来显示
modulemusic(clk,key1,key0,speak,high,low,decodeout);//顶层模块:
inputclk,key1,key0;
outputspeak,high,low;
output[6:
0]decodeout;
wire[1:
0]dir;
wireclk,key1,key0;
wireclk_5MHZ,clk_4hz;
wirespeak;
wireck,dr;
wire[11:
0]voice;
wire[6:
0]decodeout;
wirehigh,low;
assignhigh=1;
assignlow=0;
assigndir={key1,key0};
clock5mhzmhz(.clk(clk),.dir(dir),.clk_5MHZ(clk_5MHZ));
clock4hzhz(.clk_5MHZ(clk_5MHZ),.dir(dir),.ck(ck),.clk_4HZ(clk_4HZ));
Dd1(.dir(dir),.dr(dr));
DDRddr1(.dir(dir),.ck(ck),.voice(voice));
mainm(.dr(dr),.clk_5MHZ(clk_5MHZ),.clk_4HZ(clk_4HZ),.voice(voice),.speak(speak));
decodedec(.dir(dir),.decodeout(decodeout));
endmodule
//信号定义与说明
//CLK_4HZ:
用于控制音长(节拍)的时钟频率
//clk_6MHZ:
用于产生各种音阶频率的基准频率
//speak:
用于激励扬声器的输出信号,本例中为方波信号
//high,med,low:
分别用于显示高音,中音和低音音符,各驱动一个数码管来显示
moduleDDR(dir,ck,voice);
input[1:
0]dir;
inputck;
output[11:
0]voice;
wire[1:
0]dir;
wireck;
wire[11:
0]voice;
reg[7:
0]counter;
reg[3:
0]high,med,low;
assignvoice={high,med,low};
always@(posedgeck)
if(dir==2'b00)
counter<=0;
elseif(dir==2'b01)//《梁祝》乐曲演奏电路
begin
if(counter==63)counter<=0;
elsecounter<=counter+1;
case(counter)
0:
{high,med,low}<='b000000000011;
1:
{high,med,low}<='b000000000011;
2:
{high,med,low}<='b000000000011;
3:
{high,med,low}<='b000000000011;
4:
{high,med,low}<='b000000000101;
5:
{high,med,low}<='b000000000101;
6:
{high,med,low}<='b000000000101;
7:
{high,med,low}<='b000000000110;
8:
{high,med,low}<='b000000010000;
9:
{high,med,low}<='b000000010000;
10:
{high,med,low}<='b000000010000;
11:
{high,med,low}<='b000000100000;
12:
{high,med,low}<='b000000000110;
13:
{high,med,low}<='b000000010000;
14:
{high,med,low}<='b000000000101;
15:
{high,med,low}<='b000000000101;
16:
{high,med,low}<='b000001010000;
17:
{high,med,low}<='b000001010000;
18:
{high,med,low}<='b000001010000;
19:
{high,med,low}<='b000100000000;
20:
{high,med,low}<='b000001100000;
21:
{high,med,low}<='b000001010000;
22:
{high,med,low}<='b000000110000;
23:
{high,med,low}<='b000001010000;
24:
{high,med,low}<='b000000100000;
25:
{high,med,low}<='b000000100000;
26:
{high,med,low}<='b000000100000;
27:
{high,med,low}<='b000000100000;
28:
{high,med,low}<='b000000100000;
29:
{high,med,low}<='b000000100000;
30:
{high,med,low}<='b000000100000;
31:
{high,med,low}<='b000000100000;
32:
{high,med,low}<='b000000100000;
33:
{high,med,low}<='b000000100000;
34:
{high,med,low}<='b000000100000;
35:
{high,med,low}<='b000000110000;
36:
{high,med,low}<='b000000000111;
37:
{high,med,low}<='b000000000111;
38:
{high,med,low}<='b000000000110;
39:
{high,med,low}<='b000000000110;
40:
{high,med,low}<='b000000000101;
41:
{high,med,low}<='b000000000101;
42:
{high,med,low}<='b000000000101;
43:
{high,med,low}<='b000000000110;
44:
{high,med,low}<='b000000010000;
45:
{high,med,low}<='b000000010000;
46:
{high,med,low}<='b000000100000;
47:
{high,med,low}<='b000000100000;
48:
{high,med,low}<='b000000000011;
49:
{high,med,low}<='b000000000011;
50:
{high,med,low}<='b000000010000;
51:
{high,med,low}<='b000000010000;
52:
{high,med,low}<='b000000000110;
53:
{high,med,low}<='b000000000101;
54:
{high,med,low}<='b000000000110;
55:
{high,med,low}<='b000000010000;
56:
{high,med,low}<='b000000000101;
57:
{high,med,low}<='b000000000101;
58:
{high,med,low}<='b000000000101;
59:
{high,med,low}<='b000000000101;
60:
{high,med,low}<='b000000000101;
61:
{high,med,low}<='b000000000101;
62:
{high,med,low}<='b000000000101;
63:
{high,med,low}<='b000000000101;
default:
{high,med,low}<='b000000000000;
endcase
end
elseif(dir==2'b10)//《天空之城》乐曲演奏电路
begin
if(counter==195)counter<=0;
elsecounter<=counter+1;
case(counter)
0:
{high,med,low}='b000001100000;//中6
1:
{high,med,low}='b000010000000;//中7
2:
{high,med,low}='b000100000000;//高1
3:
{high,med,low}='b000100000000;//高1
4:
{high,med,low}='b000100000000;//高1
5:
{high,med,low}='b000010000000;//中7
6:
{high,med,low}='b000100000000;//高1
7:
{high,med,low}='b000100000000;//高1
8:
{high,med,low}='b001100000000;//高3
9:
{high,med,low}='b001100000000;//高3
10:
{high,med,low}='b000010000000;//中7
11:
{high,med,low}='b000010000000;//中7
12:
{high,med,low}='b000010000000;//中7
13:
{high,med,low}='b000010000000;//中7
14:
{high,med,low}='b000010000000;//中7
15:
{high,med,low}='b000010000000;//中7
16:
{high,med,low}='b000000110000;//中3
17:
{high,med,low}='b000000110000;//中3
18:
{high,med,low}='b000001100000;//中6
19:
{high,med,low}='b000001100000;//中6
20:
{high,med,low}='b000001100000;//中6
21:
{high,med,low}='b000001010000;//中5
2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西电.docx
![提示](https://static.bdocx.com/images/bang_tan.gif)