HDL电子琴设计报告.docx

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

HDL电子琴设计报告.docx

《HDL电子琴设计报告.docx》由会员分享,可在线阅读,更多相关《HDL电子琴设计报告.docx(37页珍藏版)》请在冰点文库上搜索。

HDL电子琴设计报告.docx

HDL电子琴设计报告

河海大学计算机及信息工程学院(常州)

课程设计报告

 

题目

专业、学号

授课班号

学生姓名

指导教师

完成时间

课程设计(报告)任务书

(理工科类)

Ⅰ、课程设计(报告)题目:

电子琴

Ⅱ、课程设计(论文)工作内容

一、课程设计目标

1、培养综合运用知识和独立开展实践创新的能力;

2、提高了我们独立发现问题、分析问题、解决问题的能力;

3、更加地了解和掌握VerilogHDL的基本知识和基本的编写程序,也更加深入地了解这门课程。

4、在理论学习的基础上,通过完成一个涉及时序逻辑、组合逻辑、声光输出的,具有实用性、趣味性的小系统设计。

5、的理论知识与实际应用结合起来,为今后能够独立进行某些数字应用系统的开发设计工作打下一定的基础。

二、研究方法及手段应用

1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;

2、使用VerilogHDL语言编写程序;

3、使用Modesim6.0和QuartusII软件进行仿真。

4、在硬件上完成实验效果的调试和演示。

三、课程设计预期效果

1、熟练掌握VerilogHDL语言;

2、实现多功能电子琴,用FPGA实验箱查看效果;

3、由键盘key1-key7输入中音的七个音符的发音DO,RE,MI,FA,SO,LA,SI来控制其对应的音响;

4、将用户自己编制乐曲存入电子琴,电子琴可以完成自动演奏的功能。

通过按下第八个键key8,则自动演奏曲子《两只老虎》;按下第九个键key9,则演奏《梁祝》;当第八和第九键都按下时,蜂鸣器自动播放曲子《天空之城》。

5、数码管实时显示音调值。

学生姓名:

专业年级:

摘要

随着EDA技术的进展,基于可编程的数字电子系统设计的完整方案越来越受到人们的重视。

与利用微处理器(CPU或MCU)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。

本课程设计主要是在Modesim6.0利用VerilogHDL语言完成软件编写,在QuartusⅡ软件平台上编译下载到FPGA实验箱,采用FPGA器件驱动小扬声器构成一个乐曲演奏电路。

该电子琴的设计大体由三个模块构成,分别为控制模块,乐曲存储及循环播放模块,顶层模块。

本设计可以实现手动电子琴和自动播放音乐功能。

【关键词】:

EDA、VerilogHDL、FPGA、QuartusⅡ、电子琴

ABSTRACT

WiththeprogressofEDAtechnology,basedonprogrammabledigitalelectronicsystemdesigncompletesolutionsmoreandmoreattention.Andtheuseofamicroprocessor(CPUorMCU)toachievethemusicplaycomparedtothepurehardwarelogiccircuittoplaycompletesongsmuchmorecomplex,withoutthehelpofpowerfulEDAtoolsandhardwaredescriptionlanguage,themerenumberoftraditionallogictechnology,eventhesimplestcircuitperformanceisdifficulttoachieve.ThiscourseisdesignedprimarilytouseVerilogHDLlanguageinModesim6.0completesoftwaredevelopment,softwareplatformintheQuartusⅡdownloadedtotheFPGAcompiletestcases,theuseofFPGAdevicesdriveasmallspeakertoplaymusictoformacircuit.Thedesignofthekeyboardingeneralconsistsofthreemodules,namely,controlmodule,musicstorageandplaybackmodulecycle,thetopmodule.Thedesignofmanualandautomatickeyboardtoplaymusic.

 

【Keywords】:

EDA、VerilogHDL、FPGA、QuartusⅡ、Electronickeyboard

 

第一章系统设计

第一节设计目标

一、基本功能

设计一电子琴,由键盘输入中音的七个音符的发音(DO,RE,MI,FA,SO,LA,SI)来控制蜂鸣器发出对应的音响。

二、提高部分

用数码管显示出所发出来的音调值,比如说:

若发出‘DO’,这个音调则显示1。

设计一歌曲自动演奏器,由用户自己编制乐曲存入电子琴,电子琴可以完成自动演奏的功能。

第二节设计语言

一、VerilogHDL语言介绍

VerilogHDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。

被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。

数字系统能够按层次描述,并可在相同描述中显式地进行时序建模[2]。

作为一种通用化的硬件描述语言,VerilogHDL语言具有下述描述能力:

设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。

所有这些都使用同一种建模语言。

此外,VerilogHDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行[3]。

VerilogHDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。

因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。

语言从C编程语言中继承了多种操作符和结构。

VerilogHDL提供了扩展的建模能力,其中许多扩展最初很难理解。

但是,VerilogHDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。

当然,完整的硬件描述语句足以对从最复杂的芯片到完整的电子系统进行描述。

VerilogHDL语言已经成为一种标准的硬件描述语言。

它具有以下特点:

(1)作为一种多用途的硬件描述语言,它具有很好的易学性和易用性。

(2)VerilogHDL语言允许在同一个模块中进行不同抽象层次的描述。

(3)大多数逻辑综合工具都支持VerilogHDL,使得它成为设计人员的一个很好的选择。

(4)所有的制造厂商都提供了VerilogHDL的工艺库,用以支持仿真。

(5)VerilogHDL的程序语言接口拥有强大的功能,允许用户用C语言对内部数据结构进行描述[3]。

正是以上优点,使得VerilogHDL语言广泛流行。

第三节设计原理

一、乐曲演奏原理

组成乐曲的每个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和持续的时间,就可以使扬声器发出连续的乐曲声。

1、音调的控制

频率的高低决定了音调的高低。

音乐的十二平均率规定:

每两个8度音(如简谱中的中音1与高音1)之间的频率相差一倍。

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

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

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

表1.3.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

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

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

若基准频率过低,则由于分频比太小,四舍五入取整后的误差较大;若基准频率过高,虽然误差变小,但分频数将变大。

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

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

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

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

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

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

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

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

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

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

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

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

音名

分频比

预置数

音名

分频比

预置数

低音3

9102

7281

中音2

5111

11272

低音5

7653

8730

中音3

4552

11831

低音6

6818

9565

中音5

3827

12556

低音7

6073

10310

中音6

3409

12974

中音1

5736

10647

高音1

2867

13516

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

2、音长的控制

音符的持续时间必须根据乐曲的速度及每个音符的节拍数来确定,如果将全音符的持续时间设为1s的话,则只需要再提供一个4Hz的时钟频率即可产生4分音符的时长。

如图1.3.1所示是乐曲演奏电路的原理框图,其中,乐谱产生电路用来控制音乐的音调和音长。

控制音调通过设置计数器的预置数来实现,预置不同的数值可以使计数器产生不同频率的信号,从而产生不同的音调。

控制音长是通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该音符演奏的时间越长。

每个音符的演奏时间都是0.25s的整数倍,对于节拍较长的音符,如2分音符,在记谱时将该音名连续记录两次即可。

6MHZ扬声器

4HZ

数码管

图1.3.1乐曲演奏电路原理图

为了使演奏能循环进行,需另外设置一个时长计数器,当乐曲演奏完成时,保证能自动从头开始演奏。

第四节设计方案比较

一、方案比较

方案一:

采用单个的逻辑器件组合实现。

这样虽然比较直观,逻辑器件分工鲜明,思路也比清晰,一目了然,但是由于元器件种类、个数繁多,而过于复杂的硬件电路也容易引起系统的精度不高、体积过大等不利因素。

例如八个不同的音符是由八个不同的频率来控制发出的,而采用方案一就可以运用不同的分频器来对信号进行不同程度的分频。

所用仪器之多显而易见。

方案二:

采用VerilogHDL语言编程来实现电子琴的各项功能。

系统主要由输入控制电路、顶层模块和乐曲存储及循环播放模块模块组成。

二、方案选择

和方案一相比较,方案二就显得比较笼统,只是把整个系统分为了若干个模块,而不牵涉到具体的硬件电路。

但是我们必须看到用硬件描述语言VerilogHDL的优势,它不仅具有良好的电路行为描述和系统描述的能力而且通俗易懂。

   

因此,经过对以上两种方案的分析、比较和总结,选用方案二来进行电子琴的设计。

第五节总体设计方案

利用EDA软件中的VerilogHDL硬件描述语言编程进行控制,然后烧程序至FPGA实验箱实现.系统原理图如图1.5.1所示。

控制输入模块

(手动输入音符功能)

()

 

顶层模块

(调用功能)

 

乐曲存储及循环播放模块

(自动循环播放)

 

图1.5.1系统总体设计方框图

其中,输入控制模块主要是为用户设计的,起到一个输入控制的作用。

通过该模块以通过按键输入音符或乐曲。

乐曲存储及循环播放模块主要是储存事先编写好的乐谱,并通过循环播放部分产生不同的频率驱动扬声器输出。

顶层模块主要实现调用功能,通过调用输入控制模块和乐曲存储及循环播放模块选择手动播放,或者自动播放曲目1、曲目2或曲目3。

三大模块相互联系实现电子琴的基本功能和发挥功能。

 

第二章单元模块设计

第一节电子琴输入控制模块

一、基本原理

 电子输入控制模块是这个电子琴的核心部分。

程序控制一个分频模块的分频系数,它内部集成了1个分频器,一个输出端口至外部扩音器。

接受、处理外部输入命令(来自使能端、功能控制键、乐曲存入、写出控制键的命令)的部分。

其中分频器可以根据分频系数分出七个不同的频率从而发出相应七个音符的声音,并可通过数码管观察是哪个音符输出。

这里定义了一秒为一个节拍。

二、原理框图及分频系数的产生

其基本的原理图如下图2.1.1。

图2.1.1输入控制模块的基本原理

输入控制模块的目的是对基准脉冲分频,得到1,2,3,4,5,6,7七个音符对应频率。

该模块的VerilogHDL描述中包含了三个进程。

首先对50MHz的基准脉冲进行分频得到6MHz的脉冲,然后按照tone1输入的分频系数对6MHz的脉冲再次分频,得到的便是所需要的频率,最终根据状态预置情况选择音符输出。

其中,每个音符相应的分频系数可根据每个音符的频率计算得到。

第二节乐曲存储及循环播放模块

该模块主要实现音调存储、发生及循环播放的功能。

音调发生器的作用是产生获得音阶的分频预置值。

当12位(高音、中音、低音分别4位)发声输入控制中的某一位或某两位或某三位为高电平时,则对应某一音阶的数值将以端口{high,mid,low}输出,作为获得该音阶的分频预置值,该值作为数控分频器的输入,来对4Hz的脉冲进行分频,由此得到每个音阶相应的频率,例如输入{high,mid,low}=12'b000000100000,即对应的音符是中音RE,产生的分频系数便是10216;根据已知的乐谱,利用此分频系数产生方法可实现乐谱存储;在存储乐谱时,使用一计数器state,当蜂鸣器输出最后一个音调即计数达到最大值时,将计数器清零(state<=0),计数器将从0开始重新计数,从而实现循环播放。

其中,具体原理框图如图2.2.1所示。

图2.2.1乐曲存储及循环播放模块原理图

第三节顶层模块

该模块是电子琴系统设计的核心模块。

通过该模块实现对上两节子模块的调用模块主要包括两个进程:

进程一是对50MHz基准脉冲分频产生6MHz。

进程二是对曲目方式进行控制选择,在该部分采用了一个两位状态标识寄存器mm,即对应实验箱上的开关key8和key9,当只key8拨至低电平“0”时,调用循环演奏曲目1模块,输出曲目1;当只dip9拨至低电平“0”时,调用循环演奏曲目2模块,输出曲目2;当key8和key8同时拨至低电平“0”时,调用循环演奏曲目3模块,输出曲目3;当key8和key9同时处于高电平“1”时,调用手动演奏模块,可通过按键key1~key7实现手动演奏曲目。

其中,顶层模块原理图如图2.3.1所示。

图2.3.1顶层模块原理图

 

第三章软件设计

本设计由EDA软件系统QuartusⅡ来完成。

采用自顶向下[2]的设计方法。

图3.1.1为其软件流程图。

图3.1.1系统软件流程图

软件设计采用结构化程序设计方法,功能模块各自独立,实际上在设计中将按键输入和乐曲存储分别放在了四个模块中(其中自动循环播放的三个曲目原理相同),软件设计的核心部分是数控分频器,按键输入和乐曲储存都是提供给它相应的分频比。

对输入的基准时钟进行多次分频,最终输出的就是想得到的音阶的频率。

VerilogHDL描述语言见附录。

 

第四章实验结果与讨论

第一节调试步骤

本设计是采用FPGA器件驱动小扬声器构成一个乐曲演奏电路,图4.1.1是一个典型的FPGA/CPLD设计流程:

图4.1.1系统调试图

本设计要求在QuartusII的EDA软件平台上,运用VerilogHDL语言进行编程,实现相应的功能。

调试时采用分模块调试,首先对子模块调试,再对顶层模块调试,总体分为如下三大步骤:

1、电子琴输入控制模块调试;

2、乐曲存储及循环播放模块调试:

(1)曲目1存储及循环播放模块调试;

(2)曲目2存储及循环播放模块调试;

(3)曲目3存储及循环播放模块调试;

3、顶层模块调试。

第二节调试现象、出现的问题及分析

问题一:

在进行电子琴输入控制模块调试时,经编译正确后,成功下载[2]到实验箱上,当按下DO,RE,ME,FA,SO,LA,SI对应的键时,蜂鸣器发不出任何音调,检查程序无误后,猜想是问题出在实验箱。

检查各音符对应引脚后,发现按键是与开关共用同一引脚的,且拨动开关,蜂鸣器发出音调,于是将所有开关均拨至高电平,再按下按键,蜂鸣器可以发出相应音调。

问题二:

在进行乐曲存储及循环播放模块调试时,程序下载到实验箱后,曲目能够自动播放,但是蜂鸣器发出音调得音调很刺耳,发现时硬件的蜂鸣器不是很好,所以换了个好的蜂鸣器就好了。

问题三:

在调试数码管电路时,发现数码管乱码,经过观察,是因为数码管编码和引脚分配不对,所以改了编码后就好了。

问题四:

子模块与顶层模块实例引用中的输入输出不匹配。

在反复确认顶层模块无误后,因为只有曲目1不能播放,所以猜想问题出在曲目1子模块,检查发现,曲目1子模块中输入设置了复位端口信号,但在顶层模块调用时并没有连接该端口信号,所以曲目1子模块调用没有产生,在去除曲目1子模块中的复位信号后,重新编译、下载,能够播放曲目1子模块。

如此调试,发现问题并解决问题后,能够实现基本功能以及发挥功能。

 

第五章总结

本设计利用硬件描述语言VerilogHDL实现了电子琴的自动演奏和键盘输入发音的简易功能,经过编程,综合,仿真,下载,芯片烧制,最终做出成品,通过对系统的测试结果和数据的分析计算,测试结果符合预期结果,测试情况良好,能够基本实现音阶的发音功能,可切换到自动演奏存储好的乐曲,可根据需要更改程序而实现不同的乐曲存储。

课程设计是培养我们综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

随着科学技术发展的日新月异,EDA技术已经成为当今计算机应用中空前活跃的领域,在生活中可以说是无处不在。

因此作为二十一世纪的大学生来说掌握EDA技术是十分重要的。

第一次接触课程设计,从开始的一窍不通,到后来慢慢了解,经历了很长的时间。

回顾起此次HDL课程设计,我感慨良多,的确,从审题到编程,从理论到实践,在这三个星期的日子里,我受益匪浅。

不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能解决实际中的问题,从而提高自己的实际动手能力和独立思考的能力。

这毕竟是第一次做课程设计,难免会遇到各种各样的问题,同时在设计的过程中我也发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

但通过这次课程设计之后,进一步加深了对HDL的了解,让我对它有了更加浓厚的兴趣。

将一个复杂的工程分成若干个基本模块进行分步设计和测试,最后将这些模块连接起来是本实验基本的设计思想。

虽然在测试时遇到了一些困难但最终都实现的很好。

但是感觉还有可以扩展的地方,比如说播放乐曲时最好也能显示出音调,最好再加上复位、暂停、快进等功能。

 

致谢

在课程设计的过程中,由于对知识的不理解,因此也遇到了很多的困难,虽然设计存在一些不足之处,但通过同学和老师的帮助,问题得到了一步一步的解决,也让我在课程设计的过程中学到了很多很多知识,让我了解到HDL编程是一个很精深的过程,只有不断的调试,不断的实践,不断的付出努力才可以得到预期的结果。

此课程设计得到了很多同学和老师的支持,在此深表感谢!

参考文献

[1]潘松,黄继业.EDA技术使用教程.北京:

科学出版社,2002

[2]王伟.VerilogHDL程序设计与应用.北京:

人民邮电出版社,2005

[3]刘秋云,王佳.VerilogHDL设计实践与指导.北京:

机械工业出版社,2005

[4]王金民.数字系统设计与VerilogHDL(第二版).北京:

电子工业出版社,2005

[5]李国洪,沈明山,胡辉.可编程器件EDA技术与实践[M].北京:

机械工业出版社,2004年,7月.

[6]付家才.EDA工程实践技术[M].北京:

工业出版社,2005年,1月.

附录

电子琴程序:

一、顶层模块

moduleyiranliang(inclk,outclk,key1,key2,key3,key4,key5,key6,key7,key8,key9,shumaguan);

inputinclk;

inputkey1,key2,key3,key4,key5,key6,key7,key8,key9;

outputoutclk;

output[11:

0]shumaguan;

regoutclk,clk_6M;

reg[11:

0]shumaguan;

reg[3:

0]c;

wireout1,out2,out3,out4;

wire[8:

0]key;

reg[1:

0]mm;

wire[3:

0]num;

assignkey={key1,key2,key3,key4,key5,key6,key7,key8,key9};//由按键拼键为变量key

//调用子调块

digital_pianom1(.inclk(inclk),.key1(key1),.key2(key2),.key3(key3),.key4(key4),

.key5(key5),.key6(key6),.key7(key7),.beep2(out2),.num(num));

bellm2(.inclk(inclk),.beep1(out1));

bell2m3(.inclk(inclk),.beep3(o

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

当前位置:首页 > 法律文书 > 调解书

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

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