版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、河北科技大学课程设计报告学生姓名:专业班级: 课程名称: 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八 参
2、考文献- 22一、设计目的1)利用数控分频器设计一个电子琴硬件电路和音乐发生器,设计达到演奏时可以选择 是手演奏(键盘输入),或自动演奏已存入的乐曲,并且能自动演奏。2) 巩固和运用所学课程,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力,通过对一个简易的13音符电子琴的设计,进一步加深对计算机原理以及数字电路应用技术方面的了解与认识, 进一步熟悉数字电路系统设计、 制作与调试的方法和步骤。 巩固所学课堂知识,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力。为了进一步了解计算机组成原理与系统结构,深入学习EDA技术,用VHDL语言去控制将会使我们对本专业知识可以更好
3、地掌握。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.设计规划 根据系统设计要求,系统设计采用自顶向下的设计方法,它
4、由演奏模块、音 调发生模块和数控分频模块,存储模块,显示模块五部分组成. 2. 基础部分原理 本课程设计目的在于灵活运用 eda 技术编程实现一个简易电子琴的乐曲演奏,它要求在实验箱上构造一个电子琴电路,不同的音阶对应不同频率的正弦波。按下每个代表不同音阶的按键时,能够发出相对应频率的声音。故系统可分为演奏模块 (auto) 、 音调发生模块(tone)和数控分频模块(fenpin)和显示模块(xianshi)四部. 3.简易电子琴的设计流程 根据系统设计要求,系统该系统基于计算机中时钟分频器的原理, 设计采用自顶向下的设计方法,通过按键输入来控制音响或者自动演奏已存入的歌曲。它由乐曲演奏模块
5、、音调发生模块和数控分频模块三部分组成。用 vhdl 语言设计电路的流程: 1. 使用文本编辑器输入设计源文件。 2. 使用编译工具编译源文件:vhdl 的编译语言。 3. 功能仿真。 4. 综合。综合的目的是在于将设计的源文件由语言转换为实际的电路。这一部分最终目的是生成门电路级的网表(netlist)。 5. 框图布局、布线。这一步的目的是生成用于编程文件。先将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位。然后,在根据网表中提供的各门的连接,把各个门的输入输出连接起来。 6. 编译完成,下载。四、课程设计的程序模块及仿真波形 1.数控分频模块(fenpin) 该模块主要由 3
6、 个工作进程(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_LO
7、GIC; -系统时钟 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 CLK1'EVENT AND CLK1='1' THEN COUNT:=
8、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 PRECLK'EVENT AND PRECLK='1' THENIF COUNT11&l
9、t;TONE1 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 FULLSPKS'EVENT AND FULLSPKS='1' THEN COUNT2:=NOT COUNT
10、2;IF COUNT2='1' THEN SPKS<='1'ELSE SPKS<='0'END IF;END IF;END PROCESS;END BEHAVIORAL;仿真图: 2.音调发生模块(tone) 音调发生模块的作用是产生音阶的分频预置值。当 13位发声控制输入信号中的某一位为高电平时,则对应某一音阶的数值将输出,该数值即为该音阶的分频预置值,分频预置值控制数控分频模块进行分频,由此得到每个音阶对应的频率,根据频率的不同,从而能通过喇叭听到不同的声音,实现音乐的播放。模块程序:LIBRARY IEEE;USE IEEE.S
11、TD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TONE ISPORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0); -音符输入信号 CODE: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -音符显示信号 HIGH: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -高低音显示信号 TONE0: OUT INTEGER RANGE 0 TO 669); -音符的分频系数END TONE;ARCH
12、ITECTURE ART OF TONE ISBEGINSEARCH:PROCESS(INDEX) BEGINCASE INDEX ISWHEN"00000001"=>TONE0<=669;CODE<="01101101"HIGH<="00001000" -分频系数,音符显示01101101,显示低音WHEN"00000010"=>TONE0<=596;CODE<="01111101"HIGH<="00001000"WHEN&q
13、uot;00000011"=>TONE0<=531;CODE<="00000111"HIGH<="00001000"WHEN"00000100"=>TONE0<=501;CODE<="00000110"HIGH<="00000000"WHEN"00000101"=>TONE0<=447;CODE<="01011011"HIGH<="00000000"WHE
14、N"00000110"=>TONE0<=398;CODE<="01001111"HIGH<="00000000"WHEN"00000111"=>TONE0<=376;CODE<="01100110"HIGH<="00000000"WHEN"00001000"=>TONE0<=335;CODE<="01101101"HIGH<="00000000"
15、WHEN"00001001"=>TONE0<=299;CODE<="01111101"HIGH<="00000000"WHEN"00001010"=>TONE0<=266;CODE<="00000111"HIGH<="00000000"WHEN"00001011"=>TONE0<=251;CODE<="00000110"HIGH<="01000000&qu
16、ot;WHEN"00001100"=>TONE0<=224;CODE<="01011011"HIGH<="01000000"WHEN"00001101"=>TONE0<=200;CODE<="01001111"HIGH<="01000000"WHEN"00001110"=>TONE0<=189;CODE<="01100110"HIGH<="01000000
17、"WHEN"00001111"=>TONE0<=168;CODE<="01101101"HIGH<="01000000"WHEN"00010000"=>TONE0<=150;CODE<="01111101"HIGH<="01000000"WHEN"00010001"=>TONE0<=134;CODE<="00000111"HIGH<="01000
18、000"WHEN"00010010"=>TONE0<=126;CODE<="00000110"HIGH<="00000001"WHEN"00010011"=>TONE0<=113;CODE<="01011011"HIGH<="00000001"WHEN"00010100"=>TONE0<=101;CODE<="01001111"HIGH<="00
19、000001"WHEN OTHERS =>TONE0<=0;CODE<="01000000"HIGH<="01000000"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
20、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_LOG
21、IC_VECTOR(1 DOWNTO 0):="00"BEGINPRO1:PROCESS(CLK)BEGIN IF CLK'EVENT AND CLK='1' THEN A<=A+1; END IF;END PROCESS PRO1;PRO2:PROCESS(A)BEGIN CASE A IS WHEN "00" => TIME<="001" DATA<=CODE1; WHEN "01" => TIME<="010" DATA<=
22、HIGH1; WHEN "10" => TIME<="100" DATA<=SIGN; WHEN OTHERS => NULL; END CASE; END PROCESS PRO2;END ARCHITECTURE SIMPLE;仿真图: 4.乐曲演奏模块(auto) 乐曲演奏模块的作用是产生 13 位发生控制输入信号并存储。当进行回放时时,由存储 在数组中的 8 位二进制数作为发声控制输入,从而回放乐曲。同时还加入了扩展内容。模块程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE I
23、EEE.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
24、 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_LOG
25、IC_VECTOR(7 DOWNTO 0); BEGINCOM2:PROCESS(CLK) -手动模式,变高音BEGINIF HAND='1'AND BIANYIN='1'THEN INDEX0<=D+7;SIGN0<= SIGN1; ELSIF HAND='1'AND BIANYIN='0'THEN INDEX0<=D;SIGN0<= SIGN1;ELSIF AUTO='1' THEN SIGN0<="01110011"INDEX0<=SONG;ELSE S
26、IGN0<="00000000"INDEX0<="00000000"END IF;END PROCESS;COM3:PROCESS(WRITE) -闪烁,0.5SVARIABLE COUNT:INTEGER RANGE 0 TO 40;BEGINIF( WRITE'EVENT AND WRITE='1' )THENIF(COUNT=20)THENCOUNT:=COUNT+1;SIGN1<="01110111"ELSIF(COUNT=40)THENCOUNT:=0;SIGN1<="
27、;00000000"ELSE COUNT:=COUNT+1;END IF;END IF;END PROCESS;COM4:PROCESS(WRITE) -存储和扩展VARIABLE ADR:STD_LOGIC_VECTOR(7 DOWNTO 0):="00000000"VARIABLE ADR_IN:INTEGER RANGE 0 TO 49; VARIABLE COUNT:INTEGER RANGE 0 TO 4;BEGIN IF(WRITE'EVENT AND WRITE='1') THEN COUNT:=COUNT+1;IF(NT&l
28、t;50) 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='1'AND BIANSU='1'AND COUNT=4 ) THEN SONG<=SRAM (ADR_IN)+7; NT<=NT+1;ADR:=CONV_STD_LOGIC_
29、VECTOR(CONV_INTEGER (ADR)+1,8);COUNT:=0; ELSIF ( AUTO='1' AND BIANYIN='0'AND BIANSU='1'AND 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='1'AND BIANSU='0' )
30、THEN SONG<=SRAM (ADR_IN)+7; NT<=NT+1;ADR:=CONV_STD_LOGIC_VECTOR(CONV_INTEGER (ADR)+1,8); ELSIF ( AUTO='1' AND BIANYIN='0'AND 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 A
31、DR:="00000000"NT<=0;END IF;END IF; END PROCESS;END BEHAVIORAL;仿真图:五、顶层模块设计 该 dianziqin 模块是整个电子琴设计的核心,也是 vhdl 程序的主程序,前面 4个源程序都是作为子程序分别实现电子琴的某一功能,而 dianziqin 模块则通过调用子程序最终实现乐曲演奏的目的,奏出美妙的乐曲。顶层模块程序:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSI
32、GNED.ALL;ENTITY DIANZIQIN ISPORT(CLOCK: IN STD_LOGIC; -系统时钟信号 BIANSU: IN STD_LOGIC_VECTOR(3 DOWNTO 0); HANDTOAUTO: IN STD_LOGIC; -回放信号 HANDTOAUTO1: IN STD_LOGIC; -手动信号 DATA: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); TIME : BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0); INDEX1: IN STD_LOGIC_VECTOR(7 DOWNTO 0); -键盘输入信号
33、 SPKOUT: OUT STD_LOGIC); -音频信号END;ARCHITECTURE ART OF DIANZIQIN ISCOMPONENT XIANSHIPORT(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
34、DOWNTO 0);END COMPONENT; COMPONENT AUTO -引用 AUTO元件PORT(CLK: IN STD_LOGIC; -系统时钟信号 BIANSU: IN STD_LOGIC_VECTOR(3 DOWNTO 0); AUTO: IN STD_LOGIC; -回放 HAND: 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);
35、-功能信号输出END COMPONENT;COMPONENT TONE -引用TONE元件PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0); CODE: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); HIGH: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); TONE0: OUT INTEGER RANGE 0 TO 669);END COMPONENT;COMPONENT FENPIN -引用FENPIN元件PORT(CLK1: IN STD_LOGIC; TONE1: IN INTEGER RANGE 0 TO
36、 669; SPKS: OUT STD_LOGIC);END COMPONENT;SIGNAL TONE2:INTEGER RANGE 0 TO 669; -定义主程序音调频率信号SIGNAL INDX:STD_LOGIC_VECTOR(7 DOWNTO 0); -定义8位的音符信号SIGNAL DATA1:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL DATA2:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL DATA3:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINU0:XIANSHI PORT MAP(CLK=>CLOCK,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=>HANDTOAUT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年体外及体内反搏装置项目合作计划书
- 肿瘤患者的自我管理
- 护理教育中的职业素养培养
- CRT患者活动与康复护理指导
- 护理人文关怀的妇产科护理
- 急产护理:分娩过程管理要点
- 秋季防晒知识要点
- 员工培训执行力课件
- 烧伤创面护理技术详解
- 吸氧课件开场白
- 医院布草洗涤服务方案(技术方案)
- 游戏:看表情符号猜成语PPT
- 手术室医疗废物的管理
- 普通机床主传动系统的设计课程设计说明书
- 班组工程进度款申请表
- 四年级阅读训练概括文章主要内容(完美)
- JJG 1033-2007电磁流量计
- GB/T 629-1997化学试剂氢氧化钠
- GB/T 37234-2018文件鉴定通用规范
- GB/T 2895-2008塑料聚酯树脂部分酸值和总酸值的测定
- 水利工程监理规划78648
评论
0/150
提交评论