Verilog-hdl—简易电子琴设计

合集下载

FPGA设计简易电子琴

FPGA设计简易电子琴

简易电子琴电路设计一、设计要求:(1) 设计一个简易电子琴。

(2) 利用实验箱的脉冲源产生1,2,3,……共7 个或14 个音阶信号。

(3) 用指示灯显示节拍。

(4) 能产生颤音效果。

二、原理说明:简易电子琴实现自动播放和手动弹奏两种模式,由一个开头选择。

自动播放功能可以预置多首乐曲,可以通过手动选择,本设计预置了两首乐曲《梁祝》和《两只老虎》。

手动弹奏设置了7个按键做琴键,分别对应7个音阶。

系统由8个模块组成,图1是顶层设计文件,其内部有7个功能模块:Speakera.v(例2) 和ToneTaba.v (例3),NoteTabs.v (例4),div_27.v,div-50.v,Keyboard.v,Dir.v。

模块ToneTaba音阶发生器,当4位发声控制输入Index中某一位为高电平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code输出对应该音阶简谱的LED显示,音阶越高,LED亮的数目越多。

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

模块NoteTabs用于产生节拍控制(Index数据存留时间)和音阶选择信号,即在NoteTabs模块放置两个乐曲曲谱真值表,通过song来选择播放的音乐,00代表复位,01选乐曲《梁祝》,10选《两只老虎》,由一个计数器的计数值来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。

模块div-27和div_50是分频模块,通过计数的方式进行分频。

div_27是由板上27M时钟分频产生4Hz的频率用于节拍控制,div_50是板上50M时钟产生12.5MHz用于Sperkera模块。

Verilog 电子琴程序

Verilog 电子琴程序

如题,,,再附加上程序的控制说明.......是用GW48教学实验箱仿真的如果对你有帮助,请大家顶上...程序直接贴上了控制说明:1、电子琴:程序设计采用八个输入端口,分别与实验箱上的按键8~1引脚相连接,采用一个输出端口,与扬声器的引脚连接,时钟频率采用6MHz和4Hz。

按键7~1分别用于中音的七个音符的发音(DO,RE,MI,FA,SO,LA,SI),按键8用于控制乐曲的播放。

程序的编写采用状态机的编写方法,对按键的状态进行判断,对应相应的音符或乐曲。

2、电子钟:程序的设计模块有:时钟初始化模块、时钟工作模块、时钟设置模块、闹钟设置模块、闰年的月份天数判断模块、数码管显示模块、闹钟铃声模块及其它的设置模块。

程序使用8个输入分别与8个按键连接,用按键8对应时钟工作状态(work_state),当work_state 为0时,时钟正常工作,当work_state为1时,进入时钟设置状态。

按键7对应输入端口display_set控制时钟显示状态(display_state),每按2次(用于产生上升沿触发)则数码管的输出不同。

Display_state与work_state相结合使用,以区分设置的参数。

按键6~4对应输入个脚in_set,该参数共有三位,用以表示三个状态:state_yorh (设置年或小时)、state_morm (设置月份或分钟)、state_dors(设置日期或秒钟)。

按键3~2对应数值设置端口up各down。

Up用于产生上升沿触发,当down为0时,则每一个上升沿产生时,相应的参数加1,当down为1时,则每一个上升沿产生时,相应的参数减1。

按键1与输入端口clock_on相连,用于闹钟的开与关,当clock_on为1时开闹钟,否则关闹钟。

扬声器与输出端口speaker 相连,用于输出闹钟铃声。

附录:源程序一、电子琴:module piano(in,clk_6MHz,clk_4Hz,song,speaker);input in,clk_6MHz,clk_4Hz,song;output speaker;reg speaker;reg[7:0] state;reg song_on;wire[6:0] in;reg[3:0] high,med,low;reg[13:0] divider,origin;reg[7:0] counter;reg out;wire carry;reg[20:0] i;parameter zero=8'b0000_0000,one=8'b0000_0001,two=8'b0000_0010,three=8'b0000_0100,four=8'b0000_1000,five=8'b0001_0000,six=8'b0010_0000,seven=8'b0100_0000;initialbeginsong_on<=0;endalways @(posedge song)beginsong_on<=~song_on;endalways @(posedge clk_6MHz)beginif(song_on)speaker<=out;elsebegincase(in)zero:beginspeaker<=0;i<=0;endone:begin //doif(i>=11451)beginspeaker=!speaker;i<=0;endelsei<=i+1;endtwo:begin //reif(i>=10204)beginspeaker=!speaker;i<=0;endelsei<=i+1;endthree:begin //miif(i>=9091)beginspeaker=!speaker;i<=0;endelsei<=i+1;endfour:begin // fa if(i>=8596)beginspeaker=!speaker;i<=0;endelsei<=i+1;endfive:begin //soif(i>=7653)beginspeaker=!speaker;i<=0;endelsei<=i+1;endsix:begin //loif(i>=6818)beginspeaker=!speaker;i<=0;endelsei<=i+1;endseven:begin //siif(i>=6073)beginspeaker=!speaker;i<=0;endelsei<=i+1;enddefault:beginspeaker<=0;i<=0;endendcaseendendassign carry=(divider==16383);always @(posedge clk_6MHz)beginif(carry)divider<=origin;elsedivider<=divider+1;endalways @(posedge carry)beginout<=~out; //2 分频产生方波信号endalways @(posedge clk_4Hz)begincase({high,med,low}) //分频比预置'b000000000011: origin<=7281;'b000000000101: origin<=8730;'b000000000110: origin<=9565;'b000000000111: origin<=10310;'b000000010000: origin<=10647;'b000000100000: origin<=11272;'b000000110000: origin<=11831;'b000001010000: origin<=12556;'b000001100000: origin<=12974;'b000100000000: origin<=13516;'b000000000000: origin<=16383;endcaseendalways @(posedge clk_4Hz)beginif(counter==63)counter<=0; //计时,以实现循环演奏elsecounter<=counter+1;case(counter) //记谱0: {high,med,low}<='b000000000011; //低音“3”1: {high,med,low}<='b000000000011; //持续4 个时钟节拍2: {high,med,low}<='b000000000011;3: {high,med,low}<='b000000000011;4: {high,med,low}<='b000000000101; //低音“5”5: {high,med,low}<='b000000000101; //发3 个时钟节拍6: {high,med,low}<='b000000000101;7: {high,med,low}<='b000000000110; //低音“6”8: {high,med,low}<='b000000010000; //中音“1”9: {high,med,low}<='b000000010000; //发3 个时钟节拍10: {high,med,low}<='b000000010000;11: {high,med,low}<='b000000100000; //中音“2”12: {high,med,low}<='b000000000110; //低音“6”13: {high,med,low}<='b000000010000;14: {high,med,low}<='b000000000101;15: {high,med,low}<='b000000000101;16: {high,med,low}<='b000001010000; //中音“5”17: {high,med,low}<='b000001010000; //发3 个时钟节拍18: {high,med,low}<='b000001010000;19: {high,med,low}<='b000100000000; //高音“1”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; //中音“2”25: {high,med,low}<='b000000100000; //持续11 个时钟节拍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; //中音“3”36: {high,med,low}<='b000000000111; //低音“7”37: {high,med,low}<='b000000000111;38: {high,med,low}<='b000000000110; //低音“6”39: {high,med,low}<='b000000000110;40: {high,med,low}<='b000000000101; //低音“5”41: {high,med,low}<='b000000000101;42: {high,med,low}<='b000000000101;43: {high,med,low}<='b000000000110; //低音“6”44: {high,med,low}<='b000000010000; //中音“1”45: {high,med,low}<='b000000010000;46: {high,med,low}<='b000000100000; //中音“2”47: {high,med,low}<='b000000100000;48: {high,med,low}<='b000000000011; //低音“3”49: {high,med,low}<='b000000000011;50: {high,med,low}<='b000000010000; //中音“1”51: {high,med,low}<='b000000010000;52: {high,med,low}<='b000000000110;53: {high,med,low}<='b000000000101; //低音“5”54: {high,med,low}<='b000000000110;55: {high,med,low}<='b000000010000; //中音“1”56: {high,med,low}<='b000000000101; //低音“5”57: {high,med,low}<='b000000000101; //持续8 个时钟节拍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;endcaseendendmodule。

基于Verilog HDL的简易电子琴控制电路设计与实现

基于Verilog HDL的简易电子琴控制电路设计与实现

基于Verilog HDL的简易电子琴控制电路设计与实现
张皓祎;郑冰;卢炽杏;郑惠之;胡锦程
【期刊名称】《电子制作》
【年(卷),期】2024(32)2
【摘要】介绍了一种基于硬件描述语言(Verilog HDL)的简易电子琴控制电路设计,在系统可编程门阵列(FPGA)芯片上实现,可实现自动演奏预存乐曲、弹奏及音符码制显示等常用功能。

该设计采用自顶向下的模块化设计,基于硬件描述语言(Verilog HDL)编程实现。

根据产生各个音符的频率不同,通过将系统的基准频率通过分频器进行分频,得到曲谱中所有音符的频率,再由驱动电路驱动蜂鸣器发声,便可实现乐曲的弹奏或播放功能,用八段数码管显示弹奏或播放音符对应的数字。

该方法设计简单、修改方便、设计周期短。

通过FPGA验证了所设计的控制电路,并完成了简易电子琴的调试及制作。

【总页数】4页(P94-97)
【作者】张皓祎;郑冰;卢炽杏;郑惠之;胡锦程
【作者单位】航天工程大学信息学院
【正文语种】中文
【中图分类】TP3
【相关文献】
1.基于Verilog HDL的逻辑分析仪电路设计
2.基于Verilog HDL的CMOS图像敏感器驱动电路设计
3.基于Verilog HDL的LED显示屏扫描控制模块的实现
4.基于FPGA的简易电子琴控制电路设计
5.基于Verilog HDL的洗衣机控制电路设计
因版权原因,仅展示原文概要,查看原文内容请购买。

verilogHDL的电子琴设计

verilogHDL的电子琴设计

河海大学计算机与信息学院(常州)课程设计报告题目电子琴设计专业/学号电科/**********授课班号278605学生姓名马东林指导教师单鸣雷完成时间2014/01/07河海大学本科课程设计报告课程设计(报告)任务书(理工科类)Ⅰ、课程设计(报告)题目:电子琴设计Ⅱ、课程设计(论文)工作内容用FPGA器件驱动蜂鸣器演奏“茉莉花”片段。

一首乐曲包含三个要素:乐曲声音频率,发音时间的长短,停顿的时间。

按照图1乐谱,设计相应电路控制speaker信号的方波频率,某一频率持续时间长短,各频率间间隔大小,就可以推动蜂鸣器演奏乐曲。

图1 茉莉花简谱一、课程设计目标1、培养综合运用知识和独立开展实践创新的能力;2、培养学生独立编写verilog hdl 程序的能力,加深对课本知识的理解。

二、研究方法及手段应用1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;2、两人一组合作分工完成程序的编写和调试。

三、课程设计预期效果1、完成实验环境搭建;2、完成程序的编写和调试;3、能在实验平台上顺利演示效果用蜂鸣器播放一首音乐,并可以按键弹奏;4、锻炼学生的独立分析程序,解决问题的能力以及掌握verilog hdl 的实际应用。

学生姓名:马东林专业年级:电科/2011摘 要乐曲演奏广泛用于自动答录装置、手机铃声、集团电话及智能仪器仪表设备。

实现方法有许多种,在众多的实现方法中,以纯硬件完成乐曲演奏,随着FPGA 集成度的提高,价格下降,EDA 设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。

FPGA 预装了很多已构造好的参数化库单元LPM 器件,通过引入支持LPM 的EDA 软件工具,设计者可以设计出结构独立而且硅片的使用效率非常高的产品。

本设计由现场可编程门矩阵(FPGA )作为控制芯片,通过VreilogHDL 硬件描述语言设计,运用自顶而下的设计思想,按功能逐层分割实现层次化的设计。

总体设计方案为先用分频电路产生不同频率方波;再利用利用数控分频器实现speaker 输出信号频率的选择,某一频率持续时间长短,各频率间间隔大小,其中方波的频率决定了音调的高低。

verilog-hdl—电子琴课程设计

verilog-hdl—电子琴课程设计

v e r i l o g-h d l—电子琴课程设计(总22页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--湖北文理学院课程设计报告题目 Verilog hdl课程设计专业 1211自动化学生姓名一天虹影指导教师单鸣雷完成时间 2015—1—9课程设计(报告)任务书(理工科类)课程设计(报告)题目:电子琴的设计课程设计(论文)工作内容一、课程设计目标1、培养综合运用知识和独立开展实践创新的能力;2、深入学习Verilog HDL,了解其编程环境;3、学会运用Modelsim和Quartus II等编程仿真软件;4、将硬件语言编程与硬件实物功能演示相结合,加深理解Verilog HDL的学习;二、研究方法及手段应用1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;2、遇到问题小组成员及时讨论得出解决方法;3、遇到本组内解决不了的问题,及时和其他小组交流或询问老师;4、程序仿真,仿真无问题后进行模块调试,根据实验箱上的硬件实现是否符合要求来检验程序正确与否。

三、课程设计预期效果1、完成实验环境搭建;2、具有手动弹奏和自动播放功能;3、以按键(或开关)作为琴键,至少可以通过蜂鸣器输出7个音阶;4、自动播放曲目至少两首;摘要简易电子琴的设计通过通过软硬件结合实现,硬件系统包括主控器芯片、9个按键、LED、蜂鸣器等,软件资源包括编写Verilog HDL程序的应用软件Modelsim和仿真软件Quartus II。

电子琴有按键代替琴键的弹奏功能和自动播放功能。

按键有七个音,自动播放功能中有三首曲子,分别是《两只老虎》、《天空之城》和《康定情歌》。

程序共有五个模块,分别为主模块、琴键模块、曲1模块、曲2模块、曲3模块。

硬件实现是用三个LED灯组合亮暗分别表示七个按键按下情况,另外两个按键用来选择曲目。

实验箱原始时钟为50MHz,分频后变成不同的频率输出,通过蜂鸣器输出不同频率的声音。

Verilog hdl—简易电子琴设计

Verilog hdl—简易电子琴设计

文理学院简易电子琴设计专业:自动化学号:2012118064:一天虹影实验目的使用VerilogHDL语言进行前端设计,并使用Quaruts软件在GW48-PK2实验上实现仿真,实现硬件电子琴。

电子琴要求有8个音阶,使用外部时钟信号3MHz,能同步显示音阶。

1、 设计一个简易电子琴。

要求能演奏的音域为D 调的do 到E 调do 。

2、 用GW48-PK2中的8个按键作为琴键。

3、 GW48-PK2中有蜂鸣器。

4、 可以使用GW48-PK2上的12MHz 作为输入时钟信号设计思路通过可编程逻辑器件(PLD )和VHDL 硬件描述语言来实现电子琴的基本要求。

设计的主体是数控分频器,对输入的频率按照与每个音阶对应的分频系数进行分频,得到各个音阶对应的频率分别在蜂鸣器和数码管上以声音和频率数值的形式作为输出。

设计组成与原理下图为系统的工作原理框图。

分频置 数按 键分 频器12MHZ蜂 鸣 器数码管显示1.音名与频率的关系音乐的12平均率规定:每2个八度音(如简谱中的中音1与高音1)之间的频率相差1倍。

在2个八度音之间,又可分为12个半音。

灵位,音符A(简谱中的低音6)的频率为440HZ,音符B到C之间、E到F之间为半音,其余为全音。

由此可以计算出简谱中所有的音符的频率,在这我们只需计算出中音1到高音1的频率即可。

如下所示:表一简谱音名与频率的对应关系由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。

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

实际的设计应综合考虑两方面的因素,在尽量减少频率误差的前提下取合适的时钟频率。

本实验要求用12MHZ的时钟脉冲信号,所以不必考虑这方面的因素。

实际上,只要各个音符间的相对频率关系不变,弹奏出来的音调听起来是不会走调的。

2.分频系数与初始值(预置数)本例设计的音乐电子琴选取12MHZ的系统时钟频率。

基于FPGA的简易电子琴设计

基于FPGA的简易电子琴设计

课程设计任务书开题报告皖西学院本科毕业论文(设计)中期检查表简易电子琴的设计学生姓名:王春指导老师:郑大腾摘要本系统是采用EDA技术设计的一个简易的八音符电子琴,该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,它可以通过按键输入来控制音响。

多功能电子琴的设计是在原有普通电子琴的基础上进行扩充的一个设计。

该电子琴的设计大体可以由三个模块构成,分别是电子琴发声模块、存储器模块和选择控制模块。

用超高速硬件描述语言VHDL编程可以实现各个模块的功能。

不仅能实现弹琴和演奏的功能,它还能实现“复读”的功能,就是可以存储任意一段音乐,并且可以即时的播放出来。

系统实现是用硬件描述语言VHDL 按照模块化方式进行设计,然后进行编程、时序仿真、总体整合。

本系统的功能比较齐全,有一定的现实使用的价值。

本文中介绍了电子琴系统的整体的设计,并基于超高速硬件描述语言VHDL在相关的芯片上编程实现的。

关键字电子琴;EDA;VHDL;音调发生;现场可编程逻辑器件FPGA;超高速硬件描述语言VHDL;电子琴系统;AbstractThis system is designed using EDA technology a simple eight-note keyboard, the system clock divider based on the principle of the computer, using top-down design methodology to implement, it can be controlled through the key input audio. Multi-function keyboard is designed to be an ordinary keyboard in the original expansion on the basis of a design. The design of the keyboard in general consists of three modules, namely the keyboard soundmodules, memory modules and select the control module. Ultra high-speed hardware description language VHDL programming function of each module. Not only can realize the function of playing and playing, it can achieve "repeat" function, which can store any piece of music, and real-time play out. System implementation is to use hardware description language VHDL modular way by design, then programming, timing simulation, integration. The system features a relatively complete, there is a certain value. This paper introduces the overall design of the keyboard system, and based on high speed hardware description language VHDL in Xilinx's Spartan Ⅱ series 2sc200PQ208-5 chip programming.KeywordKeyboard; EDA; VHDL; tone occurred;field programmable logic device FPGA;ultra high-speed hardware description language VHDL; organ systems;目录1 引言..................................................................1.1设计的目的...........................................................1.2设计的基本内容.......................................................2 FPGA、EDA、VHDL简介....................................................2.1FPGA工作原理 ........................................................2.1.2 FPGA的基本特点....................................................2.2EDA技术...............................................................2.3硬件描述语言——VHDL ...................................................2.3.1 VHDL的简介.......................................................2.3.2 VHDL语言的特点...................................................2.3.3VHDL语言上机操作条件.............................................2.3.4 VHDL的设计流程...................................................3 音乐知识介绍............................................................4 简易电子琴设计..........................................................4.1系统设计的总思路.....................................................4.2程序设计的流程图.....................................................4.3简易电子琴的工作流程图...............................................4.4简易电子琴中各模块的设计.............................................4.4.1 乐曲自动演奏模块...................................................4.4.2 音调发生模块.......................................................4.4.3 数控分频模块.......................................................4.4.4 顶层设计...........................................................5 系统仿真.................................................................6 结束语..................................................................致谢..................................................................... 参考文献................................................................. 附录.....................................................................1 引言我们生活在一个信息高速发达的时代,各种各样电子产品层出不穷。

实验七 硬件电子琴电路设计

实验七 硬件电子琴电路设计

电子设计自动化实验报告实验七硬件电子琴电路设计一、实验目的1.熟悉QuartusⅡ软件应用环境,了解实验流程。

2.编写简单的Verilog代码,并在QuartusⅡ中进行调试和验证,并在EDA6000中下载代码和验证。

3.掌握硬件电子琴电路的设计方法,根据键入发出不同的音阶。

二、实验原理一个音的音阶是由频率决定,基本音阶的频率如下表:如果要发出“1”的音,只需产生440Hz(周期为1136.4us*2)的频率即可。

模块speaker实现此功能,speaker是一个带预置的减法计数器,用于产生制定周期的脉冲,speaker的基准时钟是10MHz(100ns),当tone为11364时,每1136.4us*2,产生一个脉冲。

模块tone根据用户的键入,输出相应的周期数供speaker产生脉冲。

当用户按下K0时,输出tone11364,按下K1时输出tone 10124..三、实验内容1、用Verilog HDL语言实现编写实现硬件电子琴电路的程序。

2、编程下载并在实验箱上进行验证四、实验步骤与结果1、新建Verilog工程项目,编写代码并保存至与模块名对应的项目文件夹。

2、编译程序,编译无误后,在【tools】里面选择RTL视图,观察寄存器传输级结构。

3、将实验箱和PC合理连接起来。

打开EDA6000软件,设置好芯片类型为ACEX1K (EP1K30TC144-3),载入模式16。

4、根据EDA6000界面内管脚对应芯片的实际管脚在QUARTUSⅡ里面设定管脚号并检查无误。

5、将程序下载至FPGA试验箱内,并在EDA6000软件界面内进行验证测试。

程序源代码:module dzq(pcode,phigh,pspeaker,clk,key_in);input clk;input [7:0]key_in;output phigh,pspeaker;output [2:0]pcode;reg phigh,pspeaker,lock;integer q1,Q;reg [2:0]pcode;always @ (posedge clk )beginif(Q==0)begin Q<=q1; lock<=1;endelse begin Q<=Q-1; lock<=0;endendalways @(clk or key_in)begincase (key_in)8'b00000001: begin phigh=0;pcode=3'b001;q1<=11364; end8'b00000010: begin phigh=0;pcode=3'b010;q1<=10124;end8'b00000100: begin phigh=0;pcode=3'b011;q1<=9019; end8'b00001000: begin phigh=0;pcode=3'b100;q1<=8513; end8'b00010000: begin phigh=0;pcode=3'b101;q1<=7584; end8'b00100000: begin phigh=0;pcode=3'b110;q1<=6757; end8'b01000000: begin phigh=0;pcode=3'b111;q1<=6020; end8'b10000000: begin phigh=1;pcode=3'b001;q1<=5682; enddefault : begin phigh=0;pcode=3'b000;q1<=0; endendcaseendalways @(posedge lock)pspeaker<=~pspeaker;endmodule编译:选择processing---start compilation命令,开始编译。

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

湖北文理学院简易电子琴设计专业:自动化学号:64姓名:一天虹影实验目的使用VerilogHDL语言进行前端设计,并使用Quaruts软件在GW48-PK2实验上实现仿真,实现硬件电子琴。

电子琴要求有8个音阶,使用外部时钟信号3MHz,能同步显示音阶。

设计要求1、设计一个简易电子琴。

要求能演奏的音域为D调的do到E调do。

2、用GW48-PK2中的8个按键作为琴键。

3、 GW48-PK2中有蜂鸣器。

4、可以使用GW48-PK2上的12MHz作为输入时钟信号设计思路通过可编程逻辑器件(PLD)和VHDL硬件描述语言来实现电子琴的基本要求。

设计的主体是数控分频器,对输入的频率按照与每个音阶对应的分频系数进行分频,得到各个音阶对应的频率分别在蜂鸣器和数码管上以声音和频率数值的形式作为输出。

设计组成与原理下图为系统的工作原理框图。

模块设计1. 音名与频率的关系音乐的12平均率规定:每2个八度音(如简谱中的中音1与高音1)之间的频率相差1倍。

在2个八度音之间,又可分为12个半音。

灵位,音符A (简谱中的低音6)的频率为440HZ ,音符B 到C 之间、E到F之间为半音,其余为全音。

由此可以计算出简谱中所有的音符的频率,在这我们只需计算出中音1到高音1的频率即可。

如下所示: 表一 简谱音名与频率的对应关系由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。

若分频器时钟频率过低,则由分频置 数按 键分 频器12MHZ蜂 鸣 器数码管显示于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但分频数将变大。

实际的设计应综合考虑两方面的因素,在尽量减少频率误差的前提下取合适的时钟频率。

本实验要求用12MHZ的时钟脉冲信号,所以不必考虑这方面的因素。

实际上,只要各个音符间的相对频率关系不变,弹奏出来的音调听起来是不会走调的。

2.分频系数与初始值(预置数)本例设计的音乐电子琴选取12MHZ的系统时钟频率。

在数控分频器模块中,由于数控分频器输出的波形是脉宽极窄的脉冲波,为了更好地驱动扬声器发生,减少输出的偶次谐波分量,在到达扬声器之前需要均衡占空比,从而生成各音符对应频率的对称方波输出。

这个过程实际上进行了一次二分频,频率变为原来的二分之一,即6MHZ。

因此,分频系数的计算可以按照下面的方法进行。

以中音1为例,对应的频率值为,它的分频系数应该为:Divider=6MHz/=6*106 /=11466至于其他音符,同样由上式求出对应的分频系数,这样利用程序可以轻松地得到相应的乐声。

各音名对应的分频系数如下表:表二各音名对应的分频系数由于最大的分频系数为11466,故采用14位二进制计数器已能满足分频要求。

将分频系数设为0,其初始值为16383(214 -1 )即可,此时扬声器不会发声。

对于不同的分频系数,加载不同的初始值即可。

本实验参考王金明:《Verilog HDL程序设计教程》,采用差值法进行分频。

把差值作为初始值,为不同音阶的发声的来源。

各音名对应的初始值如下表:表三各音名对应的初始值3.数控分频器数控分频器是对基准频率进行分频,得到与各个音阶对应的频率输出。

数控分频模块是由一个初始值可变的14位加法计数器构成,该计数器的模为214=16384,当计数器记满时,产生一个进位信号,该信号就是用作发音的频率信号。

其分为预分频和脉冲展宽两部分。

a)预分频assign preclk=(divider==16383)1:0;always@(posedge clk)beginif(preclk)divider=origin;elsedivider=divider+1;endb) 脉冲展宽(二分频)always@(posedge preclk)beginspeaker=~speaker;目的是将预分频产生的占空比很小的波形进行拓宽,使得波形有足够长的高电平来驱动扬声器。

实验仿真(一)测试使用的仪器与软件仪器康芯GW48系列EDA设备-----GW48-PK2实验电路图和适用范围:本实验适用模式3,其结构图如下CLOCK9CLOCK5CLOCK2CLOCK0实验电路结构图NO.3译码器译码器译码器译码器译码器译码器译码器译码器D9D16D15D14D13D12D11D10D8D7D6D5D4D3D2D1PIO8PIO9PIO10PIO11PIO12PIO13PIO14PIO15S P E A K E R扬声器12345678目标芯片FPGA/CPLD PIO0PIO1PIO2PIO3PIO4PIO5PIO6PIO7键1键2键3键4键5键6键7键8PIO15-PIO8PIO47-PIO44PIO43-PIO40PIO39-PIO36PIO35-PIO32PIO31-PIO28PIO27-PIO24PIO23-PIO20PIO19-PIO16公司的Cyclone 系列的EP2C5T144C8芯片 2.康芯教学实验箱软件Quartus IIQuartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程以下为使用Quartus II软件得到的RTL级视图(二) 测试方法注:选择模式3,此模式下按键为琴键式,适合本实验演奏。

1.打开QuartusⅡ软件,file-NewProjectWizard-选择程序e_piano2.设置芯片为CycloneⅡ系列的EP2C5T144C83.定义管脚如下clk PIN_128index[2]PIN_3code[0]PIN_39index[3]PIN_4 code[1]PIN_40index[4]PIN_5 code[2]PIN_41index[5]PIN_6 code[3]PIN_42index[6]PIN_7d PIN_47index[7]PIN_10 index[0]PIN_1spk PIN_129 index[1]PIN_2下图为管脚定义界面4.定义完成后再次编译,再执行Programmer,选中,开始下载。

下图为编译下载界面5.下载完成后控制按键,观察音调准确,声音清晰,数码管能够正常显示音调。

实验总结根据老师的要求,我们先一起通过所学知识讨论了设计原理,不懂的问了下其他同学,最后定制出了大致计划。

在具体设计过程中,我们根据步骤逐次检验,查阅了有关资料,主要包括王金明:《Verilog HDL程序设计教程》以及潘松,黄继业,潘明的《EDA技术实用教程》在初次编写分频模块时候,使用的是比较基本的计数器分频法,编写程序后在modelsim软件中进行了仿真,发现无法观察到分频情况。

经过分析,原因是由于分频比过大,因此在波形图中很难观察到。

而且由于预分频的占空比很小,更难以观察到高电平。

在原因找到后,为了考察程序的性能,我们将输入频率减小。

同时适当缩小分频比,这样就得到了模块仿真中的分频波形。

通过此次实验,我们不仅学会了Quartus II软件的使用方法,还对集成电路设计有了更深的认识,对专业知识得到了加强。

同时认识到了自己的不足,比如有些知识已经模糊,所以有待于复习,所谓“温故而知新”,我们要学习的东西还很多。

这次的学习将对自己以后的研究生学习和将来的工作有很大的帮助,也是一次实践的锻炼!参考文献1.王金明:《Verilog HDL程序设计教程》2.潘松,黄继业,潘明《EDA技术实用教程》3.其他网上资料附录:程序源代码//信号定义与说明://clk:用于产生各种音阶频率的基准频率;//key:电子琴音符输入端口;//speaker:用于激励扬声器的输出信号,本例中为方波信号;//med,high:分别用于显示中音,高音音符,各驱动一个数码显示管和LED来显示;//origin:为数控分频模块提供音符频率的初始值;module dianziqin(clk,key,speaker,med,high);input clk; //12MHZinput [7:0] key;output speaker;output high; //高音显示output [3:0] med; //中音显示reg [13:0] divider; //分频系数和初始值reg [13:0] origin;reg speaker;reg high;reg [3:0] med;wire preclk;assign preclk=(divider==16383)1:0; //14位,对时钟频率进行预分频 always@(posedge clk)beginif(preclk)divider=origin;elsedivider=divider+1;endalways@(posedge preclk)beginspeaker=~speaker;//进行2分频,拓宽波形,产生方波信号endparameter do=8'b00000001,re=8'b00000010,mi=8'b00000100,fa=8'b00001000,so=8'b00010000,la=8'b00100000,xi=8'b01000000,do_=8'b; //状态编码,采用独热码编码方式 always@(key) //分频比预置case(key)do: beginorigin=4917;med=1;high=0;endre: beginorigin=6167;med=2;high=0;endmi: beginorigin=7282; med=3;high=0;endfa: beginorigin=7793; med=4;high=0;endso: beginorigin=8730; med=5;high=0;endla: beginorigin=9565; med=6;high=0;endxi: beginorigin=10309; med=7;high=0;enddo_: beginorigin=10650;med=1;high=1;enddefault:begin origin=16383;high=0;endendcaseendmodule。

相关文档
最新文档