中 国 民 航 大 学
EDA技术课程设计
题目: 简易电子琴
学院: 电子信息工程学院
专业: 通信工程
班级: 121041C
一.摘 要
本课程设计主要采用EDA技术设计一个简易的八音符电子琴,它可通过按键输入来控制音响从而演奏出已存入的乐曲。在课程设计中,系统开发平台为Windows XP,程序设计采用VHDL语言,程序运行平台为MAX+plusⅡ。然后编写程序实现电子琴的各项功能,使不同的音阶对应不同频率的正弦波,按下不同的键时发出对应频率的声音。程序通过调试运行,时序仿真,电路功能验证,顺利地实现了设计目标。
二.关键词 电子琴;EDA;VHDL;音阶;频率
三.引 言
随着信息科学的进步,现代电子产品的性能越来越高,复杂度越来越大,更新步伐也越来越快,电子技术的发展进入了划时代的阶段。其中电子技术的核心便是电子设计自动化EDA(Electronic Design Automatic)技术。EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术的最新成果而开发出的电子CAD通用软件包,它根据硬件描述语言HDL完成的设计文件,自动完成逻辑编译、化简、分割、综合、优化、布局布线及仿真,直至完成对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。本课程设计就是采用EDA技术描述语言VHDL编程实现简易电子琴的各项功能,是EDA技术应用于实际的一个很好的例子。
目 录
一、 摘要........................................................................................... 2
二、 关键词....................................................................................... 2
三、引言............................................................................................. 2
四、 设计条件及实施方式
1.可选仪器及设备.........................................................4
2.实施方式....................................................................4
五、 设计任务及要求........................................................................ 4
六、 课程设计目的............................................................................ 5
七、 课程设计原理
1.电子琴发声原理..........................................................5
2.电子琴的控制流程......................................................6
3.电子琴各个模块的符号编辑图.....................................7
4.电子琴电路原理图......................................................8
八、 实验内容及步骤..................................................................... 11
九、课程设计中所遇到的问题及解决方案....................................12
十、课程设计中的体会................................................................13
EDA 技 术 设 计
报 告 书
(简易电子琴)
四.设计条件及实施方式:
1、可选仪器及设备:计算机一台、QuartusⅡ软件、EDA试验箱一台、U盘
2、实施方式:
①用原理图设计方式完成设计
②使用功能仿真单独仿真验证各模块的功能。
③产生顶层模块,完成顶层设计。
④选择目标器件,编译顶层设计,在编译报告中查看时序分析结果和器件资源使用情况。
⑤在分配编辑器中完成引脚分配。
⑥下载到芯片并验证设计
⑦将调试好的程序作为论文的一部分提交答辩
五.设计任务及要求:
基本功能:
设计一个八音符电子琴,通过弹击按键演奏音乐。
扩展功能:
1、能够完成3首以上的切换;
2、音乐能够配合led灯的变换;
3、音乐配合led灯变换与数码管的显示。
评分标准:基本功能:45分 扩展功能1: 10分
扩展功能2: 10分 扩展功能3: 5分
六.课程设计目的:
运用VHDL语言对简易电子琴的各个模块进行设计,并使用EDA 工具对各模块进行仿真验证。本设计包含如下三个模块:乐曲自动演奏模块,音调发生模块,数控分频模块,最后把各个模块整合后,通过电路的输入输出对应关系连接起来。
七、课程设计原理:
1、本课程设计目的在于灵活运用EDA技术编程实现一个简易电子琴的乐曲演奏,它要求在实验箱上构造一个电子琴电路,不同的音阶对应不同频率的正弦波。按下每个代表不同音阶的按键时,能够发出对应频率的声音。故系统可分为乐曲自动演奏模块(AUTO)、音调发生模块(TONE)和数控分频模块(FENPIN)三部分。电路原理图如图1。
2、简易电子琴发声原理介绍:某个琴键按下去的那一个时间段控制电路给扬声器输出固定的频率。而音阶频率的获得是不同音名频率信号从一个基准频率分频而来,因此设计的时候需要用到分频器电路(如图2)。基准频率的获得则用到了lpm_constant模块(如图3)。
当我们对某一个特定的频率分频进行分析时发现,如果要一一进行设计这些分频器回事一个让人头疼的枯燥工作。为了简化这个工作可以通过设计一个“带有一个与置数的计数器”赖建华整个设计过程。图4显示的就是这个计数器,并包括了最后的二分频。将这个计数器”打包“成模块后以备调用,并命名为MUSICAL_NOTE。这个模块包括三个输入端,一个输出端。其中p[15..0]为初始值输入端,此数应为4位BCD数,48M端接芯片的28管脚,KEY_IN端接相应的“琴键”,输出端接扬声器。
3、简易电子琴控制流程图:
系统的整体组装设计原理图 :
八.实验内容及步骤:
1、新建电子琴项目music.qdf并保存。新建原理图文件music.bdf,并将其设为top level文件。Quartus内部有很多强大的宏模块可以供我们调用,这样可以使得设计大卫简化。
2、根据上述课程设计原理中介绍的原理图以及封装模块原理图在Quartus软件中进行电路原理图的设计。
3、根据频率与音调的关系设定基准频率,然后通过分频器控制高、中、低三个音调,夸两个八音度,即设计为八音符电子琴电路。
4、歌曲的编译,通过声乐知识将乐谱转化为mif文件,如图5。
5、当原理图连接完成后进行编译仿真并下载到试验箱。
6、根据下载结果检测功能是否完成、是否正确并加以改进。
九.课程设计中所遇到的问题及解决方案:
1、设计三首歌曲切换时遇到了切换。其中宏模块lpm_rom仅可存入一首歌,不可实现三首歌的循环播放。也就意味着未完成扩展功能一需要三个宏模块,但存入三个宏模块之后又得考虑怎样来选歌。我们想用数据选择器去实现三首歌的循环播放,开始我们选择了74153双四选一数据选择器,但遇到了单线与总线不匹配的问题,经老师提醒我们选用lpm_mux的三选一的模块,进一步研究发现若是其默认地址线从0开始,为使歌序与歌曲对应需用四选一模块lpm_mux并使一端置空,则可使功能完成。不过此处有涉及到如何选歌的问题,既然是三首歌切换(要显示1、2、3),那就得用到计数器,通过74160与74161的级联获取简单的1到3的计数器功能。
3、LED灯配合音乐的显示,我们选择了由四片7458级联的比较器,在这之下,我们没办法将频率锁定在一个范围内,所以LED灯配合音乐的显示不太明显。此功能虽然实现,却又不足之处,希望在以后的实验中加以改进,因为此方法并不能使LED灯与音调一一对应。
4、数码管显示问题虽然分值最小可却最难实现,一开始我们理论上沿着LED灯闪烁的设计的思路是没问题的,但实践中数码管却不显示若LED灯配合音乐的显示。若能让频率锁定在一个频率范围内,则数码管显示问题迎刃而解。数码管的1至7数字显示应该对应不同范围的频率。
十.课程设计中的体会:
一开始老师让我们去查资料的时候,我们在图书馆找了许多许多相关资料,但是还是一头雾水,因为电子琴设计的功能介绍最为简单,以致手足无措。好在课本上有电子琴的基本功能电路让我们找到了一些思路再加上学姐的帮助我们能够基本完成任务。
最后想谈的是有关EDA技术方面的一些感想,很多问题的出现都是我们曾经所没有在意的细节,比如粗线与细线不能匹配。有时候即使错了也不知道怎么错了,这个不足也需要我们注意。就像粗线与细线不能相接是因为粗线连的是总线,而细线连的是单一地址线。以及后来的三选一模块的地址线初始值默认为0等等都值得我们深入研究。
总而言之,通过本次的课程设计我们不仅是弄懂了题目本身的电路,对EDA技术也有了更深一层的了解,另一方面我们对理论在实践中的应用也有了更深的体会,还收获了问题难解的困惑以及功能完成时的欢乐。
第二篇:电子琴课设报告
微机原理与汇编语言课程设计
院 系: 计算机学院二系
班 级: 计08-3班
姓 名:
指导教师:
20## 年 6 月 29 日
微机原理与汇编语言课程设计任务书
一、题目:电子琴
二、设计的目的
1. 掌握利用PC机扬声器发出不同频率声音的方法;
2. 学习利用系统功能调用从键盘上读取字符的方法;
3. 掌握定时器/计数器8253的工作原理;
三、设计要求
编写程序,程序运行时使PC 机成为一架可演奏的“钢琴”。当按下数字键1-8时,依次发出1,2,3,4,5,6,7,I八个音调,Ctrl-c 则退出演奏状态。独立完成课程设计。
四、设计内容及步骤
1.PC 机扬声器电路
电路图如图1所示:
图1 PC 机扬声器控制电路
通过给8253定时器装入不同的计数值,可以使其输出不同频率的波形。当与门打开后,经过放大器的放大作用,便可驱动扬声器发出不同频率的音调。为使该音调的声音持续一段时间,要插入一段延时程序,之后再将扬声器关闭(关闭与门)。
2.建立音频表
要使计算机成为可弹奏的简易电子琴,需要使用系统调用的01H 功能以接收键入字符,并且要建立一张音频表。
五、课程设计工作量
每人的程序量应在100行有效程序行以上,不得抄袭,否则给不及格成绩。
六、课程设计工作计划
2009年6月15日1-2节 指导教师讲课,学生准备文献资料;
2009年6月15日~2009年6月19日 每人完成自己程序并能独立演示;
2009年6月19日下午 验收,学生撰写课程设计报告。
指导教师签字:
教研室主任签章:
微机原理与汇编语言课程设计指导教师评语与成绩
指导教师评语: 课程设计表现成绩: 课程设计验收成绩: 课程设计报告成绩: 课程设计 总成绩: 指导教师签字: 20##年 月 日 |
一、概述
1.课题描述
随着社会发展,计算机硬件技术越来越多的应用到生活中的各个领域,人们对软硬件技术结合开发出来的产品的要求越来越迫切,需求日益增加,如今用软硬件结合设计电子产品已经成为了一大时尚。本设计编写的一个用PC机模拟电子琴的程序,利用PC机中的8253和键盘的按键模拟电子琴8个音节的发声。编程使计算机的数字键1、2、3、4、5、6、7、8作为电子琴按键,按下即发出相应的音阶。
开发工具:汇编语言 MASM FOR WINDOWS
2.程序设计目的
课程设计是培养学生运用有关课程的基础理论和技能解决实际问题,进一步提高学生本专业必要的基本技能、方法和创新能力的重要环节之一。通过课程设计使学生受到设计方法的初步训练,能用文字、图形和现代设计方法简要、系统、正确地表达设计成果。
《微机接口课程设计》主要是训练学生综合运用学过的微机原理的软件和硬件知识,独立完成一个实际的微机应用设计系统,并在实验室实现。此次课设是对个人的程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,为学习后继的基础课和专业课打下坚实的基础。课设所用的是汇编语言,它是一种机器语言,是计算机能提供的最快最有效的语言,也是能够利用计算机所有硬件性能并能直接控制硬件的语言。
实验不仅培养了实际动手能力,也进一步学习了汇编语言的结构和使用方法,提高了汇编语言的水平。
二、总体方案设计
1.电子琴程序
由于是用键盘的数字键1-8,要先读取键盘的输入,判断输入是否在1-8之间,不在就退到主菜单,若是就根据键值查表找出相应的频率,计算初值,调用发音子程序即可,此时的音长固定。初值的计算方法是用输入的clk频率除以音符的频率。
程序流程图如图1所示。
图1 电子琴程序流程图
2.单音调子程序SOUND
单音调子程序的调用前需要进行以下几个方面工作:
(1)确定相应的音调所对应的频率,查表可以得到,再由频率得到对应的8253计数初值。
(2)确定音长,即一个音符所持续的时间。在单音调子程序中实现发出一个音符的声音,持续所需的时间,流程图如图2所示:
图2 单音调子程序流程图
三、详细设计
1.扬声器
在PC/XT机中,扬声器接口电路由8255A-5、8253-5、驱动器和低通滤波器等构成,其中8253-5是音频信号源,8255A-5作控制器,驱动器用来增大8253-5输出的TTL电平信号的驱动能力,低通滤波器将脉冲信号转换成接近滤波的音频信号,去驱动扬声器发声。
8253-5的计数器2的CLK2端所加的时钟脉冲频率为1.19318MHZ。可根据这个频率和所要产生的声音频率,计算出定时常数,经编程让计数器2输出指定频率的波形。8255A-5的PB0接8253-5的GATE2,作为计数器的门控信号,允许或禁止8253-5计数。8255A-5的PB1接与门U87的一个输入端,用来对计数器2的OUT2端输出的波形作进一步的控制,当PB1=1时,8253-5从OUT2输出的波形才能通过与门U87送到驱动器75477的A端,送到扬声器插座使之发声。当PB1=0时,OUT2输出的波形不能通过与门,扬声器不会发声。当PB1PB0=11时扬声器能连续发声。
2.界面设计
主界面为一架电子琴,并采用漂亮的字体作为提示语。利用int 10h实现,利用宏定义画线和矩形。
DRAWSQRE MACRO START_X,START_Y,END_X,END_Y,COLOR
LOCAL ROW_UP,ROW_DOWN,RANK_LEFT,RANK_RIGHT
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
MOV AH,0CH
MOV AL,COLOR
MOV BH,0
MOV CX,START_X
MOV DX,START_Y
ROW_UP: ;画上边
INT 10H
INC CX
CMP CX,END_X
JNE ROW_UP
RANK_RIGHT: ;画右边
INT 10H
INC DX
CMP DX,END_Y
JNE RANK_RIGHT
MOV CX, START_X ;下边起始点
MOV SI,END_X
INC SI
ROW_DOWN: ;画下边
INT 10H
INC CX
CMP CX,SI
JNE ROW_DOWN
MOV DX,START_Y ;右边起始点
MOV CX,START_X
RANK_LEFT: ;画右边
INT 10H
INC DX
CMP DX, END_Y
JNE RANK_LEFT
POP SI
POP DX
POP CX
POP BX
POP AX
ENDM
四、调试与运行结果说明
1.主界面
图7 主界面
2.退出界面
图8 退出界面
五、课程设计总结
通过这一周的硬件课程设计,我对微机原理及应用这门课有了更深的认识,系统的掌握了微机原理及接口的应用知识。
这次课程设计我做的是用PC机模拟电子琴发声。在老师确定题目后,我便去图书馆查阅了大量的关于定时器8253的书籍,并找相应的发声程序参阅。然后确定好自己的方案,对自己的设计有了一个大概的思路。通过编程,我学会了如何独立的写出程序,提高了自己的分析解决问题的能力,并且使自己所学的知识与实践相结合,应用到实践当中。课程设计中涉及到在设计当中遇到了很多的问题,但通过查找资料,克服了这些问题,提高了自己在实际当中解决问题的能力。
虽然此次课程设计的过程是艰辛的,但结果还是令我比较欣慰的。在此特别感谢孙老师对我的的指导。对于本次课程设计,自己从中取得了许多知识,提高了自己解决问题的能力,应该耐心的去解决程序中的问题和不足。遇到问题时,应该对自己有信心,但也要知道自己的不足,认真去查阅资料和学习不懂的知识,时刻提醒自己不能自暴自弃,我也切实体会到了作为科技人员的标准。另外培养了同学之间团结精神和共同解决问题以及攻克难题耐力和意志。
六、谢启
本次设计得到了孙海老师和同学的大力支持和帮助,其中老师对此次设计的题目的主要难度以及一些要求和目的给出了详细的解释。同学对设计中遇到的汇编语言方面的知识给予了很大的帮助。本人与同学在设计过程中对整个设计思想和算法进行了探讨。
感谢老师这学期对我的谆谆教导和对微机原理课程的认真讲解、对课程设计的细心指导。您的认真负责让我感觉到了一个电脑工作者所要具备的素质,您的讲课风格让我对微机原理这门课产生了浓厚兴趣,并会更努力的去学习它!
在此,对您的帮助和支持表示由衷的感谢。
七、附录
;宏定义
DRAW MACRO START_X,START_Y,END_X,END_Y,COLOR
LOCAL DRAW_NEXT
;local:避免宏重复调用时,标号的重复
;功能:画填充的矩形
;使用条件:START_X<END_X,START_Y<END_Y
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,0CH ;写像素点
MOV AL,COLOR ;设置颜色
MOV BH,0 ;选用页号0
MOV CX,START_X ;列起始点
MOV DX,START_Y ;行起始点
DRAW_NEXT:
INT 10H ;画点
INC CX ;画横线
CMP CX,END_X ;比较行是否画完
JNE DRAW_NEXT ;画另一行
MOV CX, START_X ;另一行的起始点
INC DX
CMP DX,END_Y ;比较列是否画完
JNE DRAW_NEXT ;未完继续画
POP DX
POP CX
POP BX
POP AX
ENDM
DRAWSQRE MACRO START_X,START_Y,END_X,END_Y,COLOR
LOCAL ROW_UP,ROW_DOWN,RANK_LEFT,RANK_RIGHT
;功能:画不填充的矩形
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
MOV AH,0CH
MOV AL,COLOR
MOV BH,0
MOV CX,START_X
MOV DX,START_Y
ROW_UP: ;画上边
INT 10H
INC CX
CMP CX,END_X
JNE ROW_UP
RANK_RIGHT: ;画右边
INT 10H
INC DX
CMP DX,END_Y
JNE RANK_RIGHT
MOV CX, START_X ;下边起始点
MOV SI,END_X
INC SI
ROW_DOWN: ;画下边
INT 10H
INC CX
CMP CX,SI
JNE ROW_DOWN
MOV DX,START_Y ;右边起始点
MOV CX,START_X
RANK_LEFT: ;画右边
INT 10H
INC DX
CMP DX, END_Y
JNE RANK_LEFT
POP SI
POP DX
POP CX
POP BX
POP AX
ENDM
DATAS SEGMENT
;此处输入数据段代码
DATA1 DB 49h,56h,62h,66h,74h,83h,94h,99h ;音频表
NUM DB ? ;NUM为8253计数器初值的序号
;白色琴键坐标
ST_LX DW 50,61,72,83,94,105,116
ST_MX DW 127,138,149,160,171,182,193
ST_HX DW 204,215,226,237,248,259,270
ST_Y DW 50
ED_LX DW 60,71,82,93,104,115,126
ED_MX DW 137,148,159,170,181,192,203
ED_HX DW 214,225,236,247,258,269,280
ED_Y DW 90
;黑色琴键坐标
BT_X DW 57,68,90,101,112
DW 134,145,167,178,189
DW 211,222,244,254,265
BT_Y DW 50
BD_X DW 64,75,97,108,119
DW 141,152,174,185,196
DW 218,229,251,262,273
BD_Y DW 70
;定义在屏幕绘制字
START_COL DB ? ;存储起始行
TEXT DB 16 ;起始行
DB 2 ;起始列
DB 31H ;字体颜色
DB 'This Is My Curriculum Design',0FFH
DB 'Thank You For Your Support',0FFH
DB '1.PRESS 1~8 TO PLAY',0FFH
DB '2.PRESS CTRL+C TO EXIT',0FFH,0FFH ;显示字
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC NEAR
START:
;此处输入代码段代码
CALL INIT ;调用初始化程序
MOV BX,OFFSET DATA1 ;获取音频表
SKY:
MOV AH,07H ;无回显过滤的字符输入 AL=8位数据
INT 21H
CMP AL,3 ;如果按CTRL+C,退出
JE EXIT1
CMP AL,31H ;若AL小于1,循环,否则继续执行程序,31H是ASKII码'1'
JL SKY
CMP AL,38H ;若AL大于8,循环,否则继续执行程序,38H是ASKII码'8'
JG SKY
SUB AL,31H
MOV AH,00H
MOV DI,[BX+SI]
MOV SI,AX
MOV NUM,AL ;将所获取的键值赋给8253计数器
MOV AL,[BX][SI] ;寄存器基址加变址寻址方式
PUSH BX
CALL INIT1
CALL WAITF
IN AL,61H
AND AL,0FCH
OUT 61H,AL ; 关闭扬声器
JMP SKY
MAIN ENDP
;8253初始化子程序
INIT1 PROC NEAR ;选择方式三通道二
MOV DL,0AH ;控制扬声器声音
MUL DL
MOV DI,AX
MOV AL,0B6H
OUT 43H,AL
MOV DX,0012H
MOV AX,34DEH
DIV DI
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
IN AL,61H ;声音开始
MOV AH,AL
OR AL,03H
OUT 61H,AL
RET
INIT1 ENDP
;延时子程序
WAITF PROC NEAR
PUSH AX ;保护寄存器
WAITF1:
IN AL,61H ;读取PB端口值
AND AL,10H ;低四位清零
CMP AL,AH
JE WAITF1
MOV AH,AL
LOOP WAITF1
POP AX
RET
WAITF ENDP
INIT PROC NEAR
;初始化屏幕:画琴键
MOV AX,DATAS
MOV DS,AX
MOV AH,0 ;设置屏幕
MOV AL,0DH
INT 10H ;BIOS 对屏幕及显示器所提供的服务程序
MOV AH,0BH
MOV BH,0
MOV BL,09H ;背景色
INT 10H
CALL SHOW_TEXT
DRAW 45,30,285,94,05H
DRAWSQRE 45,30,285,94,0DH
DRAWSQRE 49,48,280,49,00H
LEA SI,ST_LX ;画21个白色键
LEA DI,ED_LX
MOV CX,21
INIT_DRAW:
DRAW [SI],ST_Y,[DI],ED_Y,0FH
DRAW [SI],90,[DI],93,07H ;阴影
ADD SI,2