EDA电子琴设计_第1页
EDA电子琴设计_第2页
EDA电子琴设计_第3页
EDA电子琴设计_第4页
EDA电子琴设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河北科技大学课程设计报告学生姓名:专业班级: 课程名称: EDA课程设计 学年学期: 指导教师: 2 0 1 2 年 6 月课程设计成绩评定表学生姓名学 号成绩专业班级起止时间设计题目 可编曲的电子琴指导教师评语指导教师: 年 月 日目录一 设计目的4二 设计要求4基础部分4发挥部分5三 设计原理及过程51.设计规划52.基础部分原理53.简易电子琴的设计流程5四 课程设计的程序模块及仿真波形61.数控分频模块(fenpin)62.音调发生模块(tone)93.数码显示模块(xianshi)114.乐曲演奏模块(auto)13五 顶层模块设计18六 引脚图- 22七 分工、收获与体会22八 参考文献- 22一、设计目的1)利用数控分频器设计一个电子琴硬件电路和音乐发生器,设计达到演奏时可以选择 是手演奏(键盘输入),或自动演奏已存入的乐曲,并且能自动演奏。2) 巩固和运用所学课程,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力,通过对一个简易的13音符电子琴的设计,进一步加深对计算机原理以及数字电路应用技术方面的了解与认识, 进一步熟悉数字电路系统设计、 制作与调试的方法和步骤。 巩固所学课堂知识,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力。为了进一步了解计算机组成原理与系统结构,深入学习EDA技术,用VHDL语言去控制将会使我们对本专业知识可以更好地掌握。3) 提高学生对eda软件实践操作能力和工程设计能力。二、设计要求 基础部分1)电子琴设计两种模式,演奏模式和回放模式,演奏模式下按开始键即可按13个音符键演奏,自动记录前10秒的演奏。回放模式下自动播放演奏记录。播放完后回到演奏模式。2)演奏或播放时,数码管显示音符(无按键时显示-);记录采样为20Hz;12个音符为 用_5 _6 _7 1 2 3 4 5 6 7 -1 -2 -3表示;模式状态用数码管最高位显示:演奏模式显示A,开始演奏键后A闪烁;回放模式显示P。 发挥部分变速播放、变音高播放等。三、设计原理及过程 1.设计规划 根据系统设计要求,系统设计采用自顶向下的设计方法,它由演奏模块、音 调发生模块和数控分频模块,存储模块,显示模块五部分组成. 2. 基础部分原理 本课程设计目的在于灵活运用 eda 技术编程实现一个简易电子琴的乐曲演奏,它要求在实验箱上构造一个电子琴电路,不同的音阶对应不同频率的正弦波。按下每个代表不同音阶的按键时,能够发出相对应频率的声音。故系统可分为演奏模块 (auto) 、 音调发生模块(tone)和数控分频模块(fenpin)和显示模块(xianshi)四部. 3.简易电子琴的设计流程 根据系统设计要求,系统该系统基于计算机中时钟分频器的原理, 设计采用自顶向下的设计方法,通过按键输入来控制音响或者自动演奏已存入的歌曲。它由乐曲演奏模块、音调发生模块和数控分频模块三部分组成。用 vhdl 语言设计电路的流程: 1. 使用文本编辑器输入设计源文件。 2. 使用编译工具编译源文件:vhdl 的编译语言。 3. 功能仿真。 4. 综合。综合的目的是在于将设计的源文件由语言转换为实际的电路。这一部分最终目的是生成门电路级的网表(netlist)。 5. 框图布局、布线。这一步的目的是生成用于编程文件。先将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位。然后,在根据网表中提供的各门的连接,把各个门的输入输出连接起来。 6. 编译完成,下载。四、课程设计的程序模块及仿真波形 1.数控分频模块(fenpin) 该模块主要由 3 个工作进程(pulse1,genspks,delayspks)组成。首先,根据系统时钟信号的输入得到时基脉冲以及计数器的值,而时钟信号在 auto 模块中便已给出, 两者之间的设置关系类似于 auto 模块中第一个工作进程的设置。第二个 process 是此模块的核心,即由时基脉冲值转化为音符的频率。 模块程序: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FENPIN ISPORT ( CLK1 : IN STD_LOGIC; -系统时钟 TONE1 : IN INTEGER RANGE 0 TO 669; -音符分频系数 SPKS : OUT STD_LOGIC); -驱动扬声器的音频信号END FENPIN;ARCHITECTURE BEHAVIORAL OF FENPIN ISSIGNAL PRECLK,FULLSPKS:STD_LOGIC;BEGINPULSE1:PROCESS(CLK1) -此进程对系统时钟进行4分频VARIABLE COUNT:INTEGER RANGE 0 TO 8;BEGINIF CLK1EVENT AND CLK1=1 THEN COUNT:=COUNT+1;IF COUNT=2 THEN PRECLK=1; ELSIF COUNT=4 THEN PRECLK=0;COUNT:=0;END IF;END IF;END PROCESS PULSE1;GENSPKS:PROCESS(PRECLK,TONE1)-此进程按照TONE1输入的分频系数再次分频,得到所需要的音符频率VARIABLE COUNT11:INTEGER RANGE 0 TO 669 :=1;BEGINIF PRECLKEVENT AND PRECLK=1 THENIF COUNT11TONE1 THEN COUNT11:=COUNT11+1;FULLSPKS=1;ELSIF COUNT11=TONE1 THEN COUNT11:=1;FULLSPKS=0;END IF;END IF;END PROCESS;DELAYSPS:PROCESS(FULLSPKS) -此进程对FULLSPKS进行2分频VARIABLE COUNT2 :STD_LOGIC:=0;BEGINIF FULLSPKSEVENT AND FULLSPKS=1 THEN COUNT2:=NOT COUNT2;IF COUNT2=1 THEN SPKS=1;ELSE SPKSTONE0=669;CODE=;HIGHTONE0=596;CODE=;HIGHTONE0=531;CODE=;HIGHTONE0=501;CODE=;HIGHTONE0=447;CODE=;HIGHTONE0=398;CODE=;HIGHTONE0=376;CODE=;HIGHTONE0=335;CODE=;HIGHTONE0=299;CODE=;HIGHTONE0=266;CODE=;HIGHTONE0=251;CODE=;HIGHTONE0=224;CODE=;HIGHTONE0=200;CODE=;HIGHTONE0=189;CODE=;HIGHTONE0=168;CODE=;HIGHTONE0=150;CODE=;HIGHTONE0=134;CODE=;HIGHTONE0=126;CODE=;HIGHTONE0=113;CODE=;HIGHTONE0=101;CODE=;HIGHTONE0=0;CODE=;HIGH=;END CASE;END PROCESS;END ART;仿真图: 3.数码显示模块(xianshi) 由于要显示0F之外的字母,必须采用动态扫描显示,与实验三内容相似,分两个进程,不同的数据对应不同的状态和位码。模块程序: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY XIANSHI ISPORT(CLK : IN STD_LOGIC; CODE1: IN STD_LOGIC_VECTOR(7 DOWNTO 0); HIGH1: IN STD_LOGIC_VECTOR(7 DOWNTO 0); SIGN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); DATA: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); TIME : BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0); END ENTITY XIANSHI;ARCHITECTURE SIMPLE OF XIANSHI ISSIGNAL A : STD_LOGIC_VECTOR(1 DOWNTO 0):=00;BEGINPRO1:PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN A TIME=001; DATA TIME=010; DATA TIME=100; DATA NULL; END CASE; END PROCESS PRO2;END ARCHITECTURE SIMPLE;仿真图: 4.乐曲演奏模块(auto) 乐曲演奏模块的作用是产生 13 位发生控制输入信号并存储。当进行回放时时,由存储 在数组中的 8 位二进制数作为发声控制输入,从而回放乐曲。同时还加入了扩展内容。模块程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY AUTO ISPORT( CLK: IN STD_LOGIC; -系统时钟信号 AUTO: IN STD_LOGIC; -回放 BIANYIN: IN STD_LOGIC; BIANSU: IN STD_LOGIC; HAND: IN STD_LOGIC; -键盘输入 WRITE: IN STD_LOGIC; INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -音符信号输出 D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); SIGN0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -功能信号输出END AUTO;ARCHITECTURE BEHAVIORAL OF AUTO ISSUBTYPE WORD IS STD_LOGIC_VECTOR(7 DOWNTO 0); TYPE MEMORY IS ARRAY (0 TO 49) OF WORD; SIGNAL SRAM:MEMORY;SIGNAL SIGN1:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL NT:INTEGER RANGE 0 TO 50 :=0; SIGNAL SONG: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINCOM2:PROCESS(CLK) -手动模式,变高音BEGINIF HAND=1AND BIANYIN=1THEN INDEX0=D+7;SIGN0= SIGN1; ELSIF HAND=1AND BIANYIN=0THEN INDEX0=D;SIGN0= SIGN1;ELSIF AUTO=1 THEN SIGN0=;INDEX0=SONG;ELSE SIGN0=;INDEX0=;END IF;END PROCESS;COM3:PROCESS(WRITE) -闪烁,0.5SVARIABLE COUNT:INTEGER RANGE 0 TO 40;BEGINIF( WRITEEVENT AND WRITE=1 )THENIF(COUNT=20)THENCOUNT:=COUNT+1;SIGN1=;ELSIF(COUNT=40)THENCOUNT:=0;SIGN1=;ELSE COUNT:=COUNT+1;END IF;END IF;END PROCESS;COM4:PROCESS(WRITE) -存储和扩展VARIABLE ADR:STD_LOGIC_VECTOR(7 DOWNTO 0):=;VARIABLE ADR_IN:INTEGER RANGE 0 TO 49; VARIABLE COUNT:INTEGER RANGE 0 TO 4;BEGIN IF(WRITEEVENT AND WRITE=1) THEN COUNT:=COUNT+1;IF(NT50) THEN ADR_IN:=CONV_INTEGER (ADR); IF ( HAND=1) THEN SRAM (ADR_IN)=D; NT=NT+1; ADR:=CONV_STD_LOGIC_VECTOR(CONV_INTEGER (ADR)+1,8); ELSIF ( AUTO=1 AND BIANYIN=1AND BIANSU=1AND COUNT=4 ) THEN SONG=SRAM (ADR_IN)+7; NT=NT+1;ADR:=CONV_STD_LOGIC_VECTOR(CONV_INTEGER (ADR)+1,8);COUNT:=0; ELSIF ( AUTO=1 AND BIANYIN=0AND BIANSU=1AND COUNT=4 ) THEN SONG=SRAM (ADR_IN); NT=NT+1;ADR:=CONV_STD_LOGIC_VECTOR(CONV_INTEGER (ADR)+1,8);COUNT:=0; ELSIF ( AUTO=1 AND BIANYIN=1AND BIANSU=0 ) THEN SONG=SRAM (ADR_IN)+7; NT=NT+1;ADR:=CONV_STD_LOGIC_VECTOR(CONV_INTEGER (ADR)+1,8); ELSIF ( AUTO=1 AND BIANYIN=0AND BIANSU=0 ) THEN SONG=SRAM (ADR_IN); NT=NT+1;ADR:=CONV_STD_LOGIC_VECTOR(CONV_INTEGER (ADR)+1,8); END IF;ELSIF ( AUTO=1) THEN ADR:=;NTCLOCK,CODE1=DATA2,HIGH1=DATA1,SIGN=DATA3,DATA=DATA,TIME=TIME);U1:AUTO PORT MAP(CLK=CLOCK,BIANSU=BIANSU,D=INDEX1,INDEX0=INDX,AUTO=HANDTOAUTO,HAND=HANDTOAUTO1,SIGN0=DATA3); -调用自动演奏模块U2:TONE PORT MAP(INDEX=INDX,TONE0=TONE2,CODE=DATA2,HIGH=DATA1); -调用音调发U3:FENPIN PORT MAP(CLK1=CLOCK,TONE1=TONE2,SPKS=SPKOUT);END;仿真图:六、引脚图七、收获与体会 分工:宋润青:AUTO模块,王朝广:DIANZIQIN模块,张八旺:TONE模块,赵亚恒:FENPIN模块,王振中:XIANSHI模块,一起写的报告。 这次EDA课程设计历时一个星期,在这一个星期里可以说是苦多于甜,但是可以学到很多东西。期间不仅巩固了以前学习的知识,而且还学到了很多书本上没有学过的知识。而且通过这次课设,进一步加深了我们对EDA的了解,让我们对它有了更加浓厚的兴趣。特别是当每一个子模块调试成功时,心里特别的开心。 当然,期间出的问题还是相当多的,在编写顶层文件的程序时,就遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在我们细心的检查下,以及于老师的指导

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论