FPGA的电子琴设计.docx

上传人:b****3 文档编号:3892471 上传时间:2022-11-26 格式:DOCX 页数:12 大小:44.25KB
下载 相关 举报
FPGA的电子琴设计.docx_第1页
第1页 / 共12页
FPGA的电子琴设计.docx_第2页
第2页 / 共12页
FPGA的电子琴设计.docx_第3页
第3页 / 共12页
FPGA的电子琴设计.docx_第4页
第4页 / 共12页
FPGA的电子琴设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

FPGA的电子琴设计.docx

《FPGA的电子琴设计.docx》由会员分享,可在线阅读,更多相关《FPGA的电子琴设计.docx(12页珍藏版)》请在冰豆网上搜索。

FPGA的电子琴设计.docx

FPGA的电子琴设计

研究生课程论文

课程名称FPGA及片上系统SOPC应用

授课学期2013学年至2014学年

第一学期

学院电子工程学院

专业电子与通信

学号

姓名

任课教师

专题基于FPGA的电子琴设计

交稿日期2014年01月09日

成绩

阅读教师签名

日期

广西师范大学研究生学院

1设计目的

本次设计的目的就是在掌握计算机组成原理理论相关的基础上,了解EDA技术,掌握verilog硬件描述语言的设计方法和思想,通过学习的verilog语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识,例如本课程设计就是基于所学的计算机原理中的时钟分频器和定时器的基础之上的,通过本课程设计,达到巩固和综合运用计算机原理中的知识,理论联系实际,巩固所学理论知识,并且提高自己通过所学理论分析、解决计算机相关的实际问题的能力。

1.1课题分析

随着电子技术的高速发展,由于FPGA/CPLD具有高速、高可靠性、串并行工作方式等突出优点,所以在电子设计中受到广泛的应用,并且它代表着未来EDA设计的方向。

FPGA/CPLD的设计采用了高级语言,例如VHDL语言,AHDL语言。

从而进一步打破了软硬件之间的界限,加速了产品的开发过程,缩短了设计周期。

所以采用FPGA/CPLD取代传统的标准集成电路、接口电路已经成为电子技术发展的必然趋势。

EDA(电子设计自动化)代表了当今电子设计技术的最新发展方向,它的基本特征是:

设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片集成电路(FPGA/CPLD)实现。

电子琴是数字电路中的一个典型应用。

在实际的硬件设计中用到的器件非常多,连线比较复杂,同时会产生比较大的延时,从而造成测量误差较大,可靠性不好。

以EDA工具作为开发手段,运用VHDL硬件描述语言将使整个系统大大简化,提高了电子琴整体的性能和可靠性。

1.2Verilog语言

VerilogHDL是目前应用最为广泛的硬件描述语言.VerilogHDL可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。

VerilogHDL适合算法级,寄存器级,逻辑级,门级和版图级等各个层次的设计和描述.VerilogHDL进行设计最大的优点是其工艺无关性.这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路.VerilogHDL是一种硬件描述语言(hardwaredescriptionlanguage),为了制作数字电路而用来描述ASICs和FPGA的设计之用。

Verilog的设计者想要以C编程语言为基础设计一种语言,可以使工程师比较容易学习。

Verilog是由en:

GatewayDesignAutomation公司于大约1984年开始发展。

GatewayDesignAutomation公司后来被CadenceDesignSystems于1990年所购并。

现在Cadence对于Gateway公司的Verilog和Verilog-XL模拟器拥有全部的财产权。

1.3FPGA的基本特点

FPGA的基本特点:

采用FPGA设计ASIC电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片;FPGA可做其它全定制或半定制ASIC电路的中试样片;FPGA内部有丰富的触发器和I/O引脚;FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一;FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。

可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。

用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。

掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。

FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。

当需要修改FPGA功能时,只需换一片EPROM即可。

这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。

因此,FPGA的使用非常灵活。

如FPGA配置模式:

它有多种配置模式:

并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。

如何实现快速的时序收敛、降低功耗和成本、优化时钟管理并降低FPGA与PCB并行设计的复杂性等问题,一直是采用FPGA的系统设计工程师需要考虑的关键问题。

如今,随着FPGA向更高密度、更大容量、更低功耗和集成更多IP的方向发展,系统设计工程师在从这些优异性能获益的同时,不得不面对由于FPGA前所未有的性能和能力水平而带来的新的设计挑战。

2.FPGA课程设计原理及方案选择

2.1电子琴设计原理 

简易电子琴的设计通过软硬件结合实现,硬件系统包括主控制器芯片、LED、蜂鸣器等,软件资源包括编写VerilogHDL程序的仿真Modelsim和应用软件QuartusII。

电子琴有自动播放功能。

2.2乐曲演奏的原理

乐曲演奏的原理:

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

它利用了FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。

2.2.1音调的控制

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

音乐的十二平均率规定:

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

在两个八度音之间,又可分为十二个半音,每半个音的频率比为

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

由此可以计算出简谱中从低音1至高音1之间的每个音名对应的频率如表2-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

表2-1低音名对应的分频系数

所有不同频率均从同一基准频率分频得到。

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

若基准频率过高,虽然误差变小,但分频数变大,实际的设计综合考虑这两方面的因素,在尽量减小频率误差的前提下取合适的基准频率。

在本设计中选取6MHZ作为基准频率。

从下表中可以看出最大分频系数为9102,采用14位二进制计数器分频可满足要求。

此外还应给出预置数,对应不同的预置数,只需加载不同的预置数即可。

采用加载预置数实现分频的方法比采用反馈复零法节省资源,实现起来更加容易。

各音名对应的分频系数如表2-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

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

2.2.2音长的控制

音符的持续时间须根据音乐的速度及每个音符的节拍数来确定。

如果设定全音符的持续时间为1S的话,假设产生4分音符,则产生四分频即可实现四分音符的时长,并提供4HZ分频器。

如图为乐曲演奏的原理图,其中,乐谱产生电路用来控制音乐的音调和时长。

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

控制音长是通过控制计数器预置数的停留时间来实现的,预置数的停留时间越长,则该音符的演奏时间越长,如2分音符,在记谱时将该音符记录两次即可。

6MHZ

4HZ

2.3总体方案

本次设计课程的目的是让我们在学习verilogHDL的基础上更加深入的了解硬件设计语言的功能、作用及其特征,并且将我们的动手能力与创新能力结合起来。

音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。

因此,要控制音符的音长,就必须知道乐曲的速度和每个音符所对应的节拍数。

如果将全音符的持续时间设为1s的话,那么一拍应该持续的时间为0.25秒,则只需要提供一个4HZ的时钟频率即可产生四分音符的时长。

至于音长的控制,在自动演奏播放乐曲时按4HZ的时钟频率依次读取简谱,每个音符持续时间为0.25秒。

如果乐谱中某个音符为三拍音长,那又该如何控制呢?

其实只要在3个连续地址存放该音符,这时就会发三个0.25秒的音长,即持续了三拍的时间,通过这样一个简单的操作就可以控制音长了。

3.系统设计

3.1分频设计

使用加法计数器。

在计数器值小于分频比值时,保持分频的时钟信号不变,当计数器加到分频比值时,令分频时钟信号发生跳变,同时将零设为此时的计数器值,这样分频时钟信号就会再次发生跳变。

3.2软件仿真

3.4硬件的组成

在CycloneI器件系列非常成功的基础上,Altera公司的CycloneII系列扩大了FPGA的密度,最多可以达到68416个逻辑单元,并且还提供了622个可用的输入/输出引脚和1.1M比特的嵌入式寄存器。

CycloneII设备系列拥有以下的特点:

4608到68416LEs的高密度的结构;嵌入式乘法器;先进的I/O口支持;灵活的时钟管理电路;设备的配置。

CycloneII器件的制造基于300mm晶圆,采用台积电90nm、低K值电介质工艺,这种工艺技术采用了低绝缘体过程,确保了快速性、有效性和低成本。

CycloneII器件通过使硅片的面积最小化,所以可以在单芯片上支持复杂的数字系统,而且在成本上还可以和ASIC进行竞争。

Altera最新一代低价位的FPGA——cycloneIIFPGA系列,和同类90nmFPGA器件相比,它提高了百分之六十的性能和降低了一半的功耗。

它的低成本和优化特征使CycloneII系列为各种各样的汽车、消费、通讯、视频处理、测试以及测量、和其他最终市场提供了理想的解决方案。

4.结论

本设计利用硬件描述语言Verilog实现了电子琴的自动演奏,综合,仿真,下载,调试,测试情况良好,能够准确实现音阶的发音功能,把写好的Verilog程序进行引脚分配,综合,适配,编程下载。

经过不断的反复调试,修改,最终完成本项方案设计。

在设计过程,由于对音乐知识不够了解,所以没有实现电子琴那么完美的音乐。

在本系统设计调试过程中,软件和硬件都出现了一些小错误。

 

附录:

1.简谱

 

2.程序

modulesong(sys_clk,speaker,);

//inputclk_6mhz,clk_4hz;

inputsys_clk;

outputspeaker;

//output[3:

0]high,med,low;

regspeaker;

reg[3:

0]high,med,low;

reg[3:

0]count;

reg[23:

0]count2;

reg[7:

0]counter;

reg[13:

0]divider,origin;

//reg[23:

0]clk_cnt;

/*always@(posedgesys_clkornegedgerst_n)

if(!

rst_n)

clk_cnt<=24'd0;

else

clk_cnt<=clk_cnt+1'b1;

wireclk_6mhz=clk_cnt[2];

wireclk_4hz=clk_cnt[23];*/

regclk_6mhz,clk_4hz;

always@(posedgesys_clk)

begin

if(count<=7)

begin

count<=count+1;

clk_6mhz<=0;

end

else

begin

count<=0;

clk_6mhz<=1;

end

end

always@(posedgesys_clk)

begin

if(count2<=12499999)

begin

count2<=count2+1;

clk_4hz<=0;

end

else

begin

count2<=0;

clk_4hz<=1;

end

end

wirecarry;

assigncarry=(divider==16383);

always@(posedgeclk_6mhz)

beginif(carry)divider<=origin;

else

divider<=divider+1;

end

always@(posedgecarry)

beginspeaker=~speaker;end

always@(posedgeclk_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;

endcase

end

always@(posedgeclk_4hz)

begin

if(counter==63)

counter<=0;

else

counter<=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;

//由于篇幅原因省略部分乐谱

endcase

end

endmodule

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1