EDA简易电子琴设计报告

合集下载

EDA简易电子琴

EDA简易电子琴

EDA上机实验报告简易电子琴学院:电子工程学院班级:020831简易电子琴1.系统原理框图扬声器在不同频率的信号驱动下将发出不同的声音。

本实验是利用实验板上的8个按键产生不同的音阶信号,按键不同时,不同的音阶信号产生不同的频率信号去驱动扬声器,从而实现电子琴的功能。

根据音乐理论,每个8度音之间可分为12个半音,每个半音之间的频率相差(0599.1212 Hz )。

若C 调第一个音名的频率为261.63Hz ,则各音名与频率以及2MHz 时钟的分频系数的关系如表所示。

表1—1音名与频率以及2MHz 时钟的分频系数的关系器产生按键编码信号;时钟分频器产生不同的分频系数,将输入时钟频率分频至各音名对应的频率值,从而驱动扬声器发出该频率的声音。

键盘输入扬声器2MHz 时钟输入图1—2 简易电子琴的系统框图图1—3为实现简易电子琴的顶层原理图。

其中,KEYBOARD 模块实现对键盘的编码,K[7..0]为键盘输入,SEL[2..0]为3位二进制编码输出,EN 为使能输出信号(高电平有效);M_FREQ 模块实现分频功能,CLK 为时钟输入,当SEL[2..0]编码输入不同,且EN 输入为高电平时,分频器产生不同的频率值,当SPK 输出为1时扬声器响,否则静音。

图1—3实现简易电子琴的顶层原理图2.模块设计①键盘编码器VHDL描述文件keyboard.vhd如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity keyboard isport(k: in std_logic_vector(7 downto 0); --8位键盘输入sel: out std_logic_vector(2 downto 0); --3位键盘编码输出en: out std_logic ---使能输出);end keyboard;architecture arc_keyboard of keyboard isbeginprocess(k)begincase k iswhen"11111110"=>sel<="001"; --按键,产生编码en<='1';when"11111101"=>sel<="010";en<='1';when"11111011"=>sel<="011";en<='1';when"11110111"=>sel<="100";en<='1';when"11101111"=>sel<="101";en<='1';when"11011111"=>sel<="110";en<='1';when"10111111"=>sel<="111";en<='1';when"01111110"=>sel<="000";en<='1';when others=> sel<="000";en<='0';end case;end process;end arc_keyboard;②时钟分频器VHDL描述文件m_freq,vhd如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity m_freq isport(clk,en:in std_logic;sel: in std_logic_vector(2downto 0); --3位键盘编码输入spk: out std_logic --扬声器控制信号输出);end m_freq;architecture arc_m_freq of m_freq issignal count_ld,count:std_logic_vector(12 downto 0);beginprocess(sel)begincase sel iswhen "000" => count_ld <= "0111011101110"; --3822when "001" => count_ld <= "1110111011011"; --7643when "010" => count_ld <= "1101001010101"; --6809when "011" => count_ld <= "1011110110010"; --6066when "100" => count_ld <= "1011001011101"; --5725when "101" => count_ld <= "1001111101101"; --5101when "110" => count_ld <= "1000111000000"; --4544when "111" => count_ld <= "0111111010000"; --4048when others => count_ld <= "0111011101110"; --3822end case;end process;processbeginwait until clk'event and clk='1'; --计数器同步清零if en='0' thencount<=(others=>'0');spk<='1'; --当计数值小于count_ld/2时,spk=’1’,且加1计数elsif count<('0'&count_ld(12 downto 1)) thencount<=count+1;spk<='1';--当计数值大于count_ld/2且小于count_ld时,spk=’0’,且加1计数elsif count<count_ld thencount<=count+1;spk<='0';--当计数值小于count_ld时,计数器清零,spk=’1’else count<=(others=>'0');spk<='1';end if;end process;end arc_m_freq;3.原理图和波形仿真图①键盘编码器的.bsf图:②时钟分频器的.bsf图:③简易电子琴的顶层原理图.bdf:⑤波形仿真图:⑴按键编码为’11111110’时波形图:⑵按键编码为’11111101’时波形图:⑶按键编码为’01111111’时波形图:其它的波形图也和这差不多,只要分别改变k[7]到k[0]的高低电平达到和编码的高低电平相同,然后仿真再看波形图。

EDA电子琴课程设计(HDL)版

EDA电子琴课程设计(HDL)版

EDA与数字系统课程设计报告院、系:信息工程学院专业:电子信息科学与技术学号:200912411姓名:张海超同组人:孙国锐花卫东指导教师:段美霞郑辉二00一一年十二月三十日目录(空两行) 1………………………………………………………………页码2………………………………………………………………页码(要求:给出一级目录,宋体加粗,四号字,1.5倍行距。

)(报告正文部分):(要求:正文部分一律用小四号字,宋体,1.5倍行距。

一级大标题靠左,加粗。

二级大标题靠左,不加粗。

)课程设计的内容如下:1.课程设计目的(1)熟悉Quartus 2软件的使用。

(2)熟悉EDA实验箱的基本使用。

(3)学习HDL基本单元电路的设计应用。

进一步掌握EDA的多层次设计方法。

(4)熟悉频率发生器的的原理。

2.课程设计题目描述和要求设计一个简易的的电子琴,有1,2,3,4,5,6,7这几个音阶,当按对应的按键时,发出声音的同时显示所按的音符。

还有自动演奏的功能,当自动演奏的同时显示对应的高中低音符;3.课程设计报告内容3.1本设计由分频器,手动/自动演奏模块、频率发生器、乐谱3个模块组成。

分频器是产生4Hz频率的;手动/自动演奏模块的作用是实现手动和自动演奏音乐的控制;频率发生器是产生各种音阶对应频率的,得到与1,2,3,4,5,6,7,音符(包含高中低三种)对应的频率。

流程:1 产生4Hz的频率;2 由song产生控制信号song_on,当song改变时song_on取反并一直保持,直到song再次改变,也只有这样song_on才能控制手动和自动;3 如果song_on为低电平时,手动演奏,反之则自动演奏;4 手动演奏时,按照输入的按键in[n](对应1234567)产生对应频率speaker。

并在当时的状态(1234567)赋给high0让输出LED显示;5 自动演奏时,按照乐谱高中低产生对应的频率out,并把out赋值给speaker。

eda课程设计简易电子琴

eda课程设计简易电子琴

eda课程设计简易电子琴一、课程目标知识目标:1. 让学生了解EDA(电子设计自动化)的基本概念,掌握简易电子琴的设计原理;2. 使学生掌握电子琴电路的组成、工作原理和编程方法;3. 帮助学生理解电子琴音调、音量调节的电路实现方式。

技能目标:1. 培养学生运用EDA工具进行电路设计和编程的能力;2. 提高学生动手实践、团队合作和问题解决的能力;3. 让学生学会使用电子琴演奏简单曲目,培养音乐素养。

情感态度价值观目标:1. 激发学生对电子设计的兴趣和热情,培养创新精神和实践能力;2. 培养学生严谨、认真、负责的学习态度,养成良好的学习习惯;3. 引导学生关注科技发展,认识电子技术在生活中的应用,增强社会责任感。

课程性质:本课程为实践性较强的课程,结合理论知识,注重培养学生的动手能力和创新能力。

学生特点:学生处于初中阶段,具有一定的物理、数学基础,对新鲜事物充满好奇心,但可能缺乏实际操作经验。

教学要求:结合学生特点,采用任务驱动法,引导学生主动探究、实践,注重理论与实践相结合,提高学生的综合能力。

在教学过程中,将课程目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. 理论知识:- 电子元件基本原理:电阻、电容、二极管、三极管等;- 电子琴工作原理:振荡器、分频器、放大器、键盘扫描电路等;- EDA软件使用:原理图绘制、PCB设计、仿真测试等。

2. 实践操作:- 简易电子琴电路搭建:指导学生动手搭建电子琴电路;- EDA软件操作:教授学生使用EDA软件进行原理图绘制和PCB设计;- 编程与调试:教授学生编程方法,对电子琴进行调试。

3. 教学大纲:- 第一周:电子元件基本原理学习;- 第二周:电子琴工作原理学习;- 第三周:EDA软件使用教学;- 第四周:简易电子琴电路搭建与调试;- 第五周:总结与展示,学生进行作品展示,分享心得。

4. 教材章节:- 《电子技术基础》中关于电子元件、电路原理的相关章节;- 《电子设计自动化》中关于EDA软件使用的相关章节;- 《电子琴设计与制作》中关于电子琴工作原理和制作过程的相关章节。

EDA简易电子琴设计报告

EDA简易电子琴设计报告

,、题目分析1、分析要求,确定总体方框图本设计基本部分是用VHDL语言设计一个简易的八音符电子琴,在Quartus II 平台下下载到Cyclone系列的EP1C12Q240C芯片中,该电路设计能够实现DO RE Ml、FA等八个音调的电子琴,发挥部分是设计一乐曲自动演奏器,用户自己编制乐曲存入电子琴,电子琴可以完成自动演奏。

电子琴音乐产生原理及硬件设计由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了。

根据系统设计要求,系统设计采用自顶向下的设计方法,系统的整体组装设计原理图如图1所示,它由乐曲自动演奏模块AUTO音调发生模块TONE和数控分频模块FENPIN三部分组成。

图1系统的整体组装设计原理图2、最终完成的技能指标(1)设计一个简易的八音符电子琴,它可通过按键输入来控制音响。

(2)演奏时可以选择是手动演奏(由键盘输入)还是自动演奏已存入的乐曲】、选择方案通过可编程逻辑器件(PLD和VHDL硬件描述引言来实现电子琴的基本部分和发挥部分的设计。

对于基本部分,设计的主体是数控分频器,对输入的频率进行分频,得到各个音阶对应的频率最为输出。

当按下不同的键时发出不同的声音。

对于发挥部分,则在原设计的基础上,增加一个乐曲存储模块,代替了键盘输入,产生节拍控制(index数据存留时间)和音阶选择信号,即在此模块中可存放一一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。

方案一:由单片机来完成设计。

可用单片机控制键盘的输入,以及产生相应的频率信号作为输出。

目前,单片机的功能已比较强大,集成度日益增高且其设计和控制比较容易。

但是由于在传统的单片机设计系统中必须使用许多分立元件组成单片机的外围电路,如锁存器,译码器等都需要单独的电路,因此整个系统显得十分复杂,抗干扰性差,在运行过程中容易死机或进入死循环,可靠性降低,而功耗费用增高。

数字电子EDA课程设计八音电子琴

数字电子EDA课程设计八音电子琴

数字电子EDA课程设计八音电子琴第一篇:数字电子EDA课程设计八音电子琴燕山大学EDA课程设计实验报告院系:信息科学与工程学院姓名:班级:学号:日期:[实验名称] 八音电子琴[实验要求] 1.能发出1.2.3.4.5.6.7.i八个音2.用按键作为键盘3.C调至B调对应频率如下表音调 C(高音)B A G F E D C频率(Hz)261.63x2 493.88 440.00 392.00 349.23 329.63 293.66 261.63 [实验电路设计] 1.命题分析根据命题的要求,要使扬声器发音,需要在其输入信号端连接一个对应频率的方波信号.实验使用的信号源可以提供从几Hz到几兆Hz不等的信号频率,自然可以想到本实验命题的关键是一个具有相应分频比的分频器.考虑到硬件(按钮)在实际工作过程中会因元件的接触产生一些不可避免的抖动脉冲电平,会对实验造成影响,因此需要在按键接入线路中安装防抖动电路.2.设计过程1>分频器为了取得合适的电路复杂度和可接受的误差范围,分频器的时钟信号选取为器件所提供的JPCK—1(3MHz音频信号).然后通过计算,用时钟信号频率除以各发音频率,得到的分频比如下表:分频比(16进制)5DEE 6384 6F84 7D62 8ADE 951C A760 BBDE频率(Hz)高C:261.63x2 B:493.88 A:440.00 G:392.00 F:349.23 E:329.63 D:293.66 C:261.63 利用四片十六进制计数器74LS161就可以连接成适用的分频器.分频器连接完成后会产生一个预定频率的周期脉冲.但是实验要求的方波其占空比应该为1:1,因此在输出脉冲端加装一个T触发器,每次脉冲到达触发器的时候输出便会跳变电平,这就达到了驱动扬声器的条件.但是在应用了T触发器后输出方波的周期比预定的扩大了一倍,也就是说频率减至原来的二分之一.此时应重新选择时钟信号,令其为原来2倍即可.根据实验指导书,最终确定选择的时钟信号为6MHz.2>防抖动电路利用D触发器的电压跟随特性可以用一个频率较低的时钟信号驱动,达到防止按键抖动的目的.电路较简单,见图3.图1.时钟分频电路(downway)图2.CP为375K时上图的B4输出波形由于设计的原因,本电路只能支持单音节输入.当同时键入两个以上的音阶时,分频比较小的(比较高的音阶)优先发声.图3.按键输入防抖动电路3>电路组合组合后的电路模块如图4.共有11个输入端和1个输出端.其中,CP_6M为整个电路的主频,使用电路板上的6MHz信号输出端;CP_1US为防抖动电路中触发器所使用的时钟,要求频率不高,选择电路板提供的CLK3-3(12Hz);KEYCa-B是电子琴的输入按键接口,依次是从低音到高音.Speaker是电路的输出端,接入扬声器,为其产生相应音阶的频率.实际电路如图4.连接完成后,对该电路进行仿真测试,如图5,令其CP_6M为6MHz,CP_1US为一个较低频率脉冲,设臵KEYB(音节B)为有效电平,在speaker上得到的输出频率为493,与实际音节的频率相同.图4.八音电子琴图5.电子琴完成品的仿真波形T触发器2分频电路[硬件测试] [实习心得] 第一感觉,数字电子技术EDA实习很有意思.我们可以有充分的时间去思考怎么做出一个东西,这个东西的用处也许不大甚至几乎没有,但重要的是思考的过程:从它的用途总结出它的特性,从它的特性构思出它的原理,从原理到构建模型,再到模型的实现,利用已有的知识,可用的元件,最终组合出一个具有高度逻辑性的组合电路,这和我们小时候玩搭积木差不多.把积木一块块的搭成一座城堡,中间缺少任何一层甚至任何一块,城堡都可能会倒塌.同理,在我们构建命题所给的元器件时任何一个逻辑错误都可能是致命的,导致最后无法出现正确结果或者干脆不能用.因此,实习,有意思的同时还不能大意.这是一个锻炼逻辑思维和思维严谨性的极好的机会,我和我的同学们在这次工作中受益非浅.大家都积极思思考,查找资料,集思广益来解决现有的问题。

音乐发生器及简单电子琴的eda设计 2

音乐发生器及简单电子琴的eda设计 2

音乐发生器及简单电子琴的eda设计摘要本系统是采用EDA技术设计的一个简易的八音符电子琴和音乐发生器,该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,它可以通过按键输入来控制音响。

系统由乐曲自动演奏模块、乐器演示模块琴/乐功能选择模块、音调发生模块和数控分频模块五个部分组成。

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

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

关键字电子琴;EDA;VHDL;音调发生;QuartusII;1 引言:1.1设计目的1)利用数控分频器设计一个电子琴硬件电路和音乐发生器2)演奏时可以选择是手演奏(键盘输入)或自动演奏已存入的乐曲,并且能自动重复演奏1.2设计的基本内容运用VHDL语言对简易电子琴的各个模块进行设计,并使用EDA 工具对各模块进行仿真验证。

本设计包含如下三个模块:乐曲自动演奏模块,音调发生模块,数控分频模块,最后把各个模块整合后,通过电路的输入输出对应关系连接起来2.1 EDA技术EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。

利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。

现在对EDA的概念或范畴用得很宽。

包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。

目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。

例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。

本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。

2.2 硬件描述语言——VHDL2.2.1 VHDL的简介VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。

EDA实验报告_硬件电子琴电路设计

EDA实验报告_硬件电子琴电路设计

EDA实验报告课程名称:EDA技术实验名称:硬件电子琴电路设计班级:姓名:指导老师:签名:一、实验目的学习利用数控分频器设计硬件电子琴实验。

二、实验仪器计算机一台;Quartus Ⅱ软件;U盘。

三、实验内容与步骤在Quartus Ⅱ完成音阶发生器模块TONE和数控分频器模块Speaker的设计,然后完成硬件电子琴顶层文件的设计,最后检查设计是否正确。

1、数控分频器Speaker(1)完整的VHDL程序描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Speaker ISPORT ( clk1 : IN STD_LOGIC;Tone1 : IN INTEGER RANGE 0 TO 16#7FF#;SpkS : OUT STD_LOGIC );END;ARCHITECTURE one OF Speaker ISSIGNAL PreCLK , FullSpkS : STD_LOGIC;BEGINDivideCLK : PROCESS(clk1)VARIABLE Count4 : INTEGER RANGE 0 TO 15;BEGINPreCLK <= '0'; -- 将CLK进 11分频,PreCLK为C L 11K 6分频IF Count4 > 11 THEN PreCLK <= '1'; Count4 := 0;ELSIF clk1'EVENT AND clk1='1' THEN Count4 := Count4 + 1; END IF;END PROCESS;GenSpkS : PROCESS(PreCLK, Tone1)VARIABLE Count11 : INTEGER RANGE 0 TO 16#7FF#;BEGIN -- 11位可预置计数器IF PreCLK'EVENT AND PreCLK = '1' THENIF Count11=16#7FF# THEN Count11 := Tone1; FullSpkS <= '1'; ELSE Count11:=Count11 + 1; FullSpkS <= '0'; END IF; END IF; END PROCESS;DelaySpkS : PROCESS(FullSpkS) VARIABLE Count2 : STD_LOGIC; BEGINIF FullSpkS'EVENT AND FullSpkS = '1' THEN Count2 := NOT Count2; IF Count2 = '1' THEN SpkS <= '1'; ELSE SpkS <= '0'; END IF; END IF; END PROCESS; END;(2)模块图形符号及逻辑功能描述图1 数控分频器Speaker 模块DENAQPRE CLRA[3..0]B[3..0]OUT[3..0]ADDERA[10..0]B[10..0]OUT[10..0]ADDERA[10..0]B[10..0]OUTEQUALDENAQPRE CLRA[3..0]B[3..0]OUTLESS_THAND ENA QPRE CLRDQPRE ENA CLRDQ PRE ENA CLRSELDATAA DATABOUT0MUX21\DelaySpkS:Count2Add111' h001 --FullSpkSSpkS~reg0\GenSpkS:Count11[10..0]Count11~[10..0]clk1SpkSTone1[10..0]Add04' h1 --Equal011' h7FF --LessThan04' hB --\DivideCLK:Count4[3..0]图2 数控分频器Speaker 硬件电路2、端口TONE 的设计(1)完整的VHDL 程序描述 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY Tone ISPORT ( Index : IN STD_LOGIC_VECTOR(7 DOWNTO 0); CODE : OUT INTEGER RANGE 0 TO 15; HIGH : OUT STD_LOGIC;Tone : OUT INTEGER RANGE 0 TO 16#7FF# );END;ARCHITECTURE one OF Tone ISBEGINSearch : PROCESS(Index)BEGINCASE Index IS -- 译码电路,查表方式,控制音调的预置数 WHEN "" => Tone <= 773; CODE <= 1; HIGH <= '0';WHEN "" => Tone <= 912; CODE <= 2; HIGH <= '0';WHEN "" => Tone <= 1036; CODE <= 3; HIGH <= '0';WHEN "" => Tone <= 1116; CODE <= 4; HIGH <= '0';WHEN "" => Tone <= 1197; CODE <= 5; HIGH <= '0';WHEN "" => Tone <= 1290; CODE <= 6; HIGH <= '0';WHEN "" => Tone <= 1372; CODE <= 7; HIGH <= '0';WHEN "" => Tone <= 1410; CODE <= 1; HIGH <= '1';WHEN OTHERS => Tone <= 2047; CODE <= 0; HIGH <= '0'; END CASE;END PROCESS;END;(2)模块图形符号及逻辑功能描述图3 tone模块图4 tone硬件电路3.顶层文件的设计将音阶发生器模块TONE和数控分频器模块Speaker打包之后,接下来进行顶层文件的设计。

EDA实现电子琴的程序文件

EDA实现电子琴的程序文件

实验十五电子琴设计一、音名与频率的关系:音乐上的十二平均律规定:每两个八度音之间的频率相差一倍。

在这两个八度音之间,分成十二个半音,每两个相邻伴音的频率比为12 2。

另外还规定,音名A的频率为440Hz。

音名B到C、E到F之间为半音,其余为全音。

这样,可计算得从A(简谱的低音6)到a1(简谱的高音6)之间每个音名的频率为:A(6):440Hz a(6):880Hz a1(6):1760HzB(7):493.88Hz b(7):987.76Hzc(1):523.25Hz c1(1):1046.50Hzd(2):587.33Hz d1(2):1174.66Hze(3):659.25Hz e1(3):1318.51Hzf(4):698.46Hz f1(4):1396.92Hzg(5):783.99Hz g1(5):1567.98Hz二、设计要求:设计一个电子琴,要求能演奏音名A到a1之间的全部音阶。

按下一个键,则演奏该音名,并用数码管显示音名,用发光二极管指示高、中、低音。

三、设计提示:本实验由键盘编码,音频输出译码器、分频器组成。

取10MHz信号作为基准。

以基准频率除以上述频率,可得各音名频率的分频系数。

注意,为了减少输出的偶次谐波成分,最后输出应为对称方波。

音频输出译码器实质上是一个多路选择器,根据键盘编码的输出,选择音阶发生器的不同的预置数,分频后输出音频。

分频器可以为加法计数器,以可以为减法计数器,计算预置数时稍有不同,应加以注意。

另外,应根据基准频率和输出频率,来确定计数器的位数。

设计框图如下图所示:电子琴框图四、实验步骤1、启动ISE集成开发环境,创建工程并输入设计源文件。

2、对设计进行时序仿真,分析设计的正确性。

3、锁定引脚,完成设计实现过程。

并在实验箱上连线,利用iMPACT进行程序下载。

4、在实验箱上验证电子琴的功能,观察并记录实验结果.五、实验报告1.music的VHDL 源程序:library ieee;use ieee.std_logic_1164.all;entity music isport(kin: std_logic_vector(0 to 15);spk_out: out std_logic;led_out: out std_logic_vector(6 downto 0);index: out std_logic_vector(2 downto 0);clk: in std_logic);end music;architecture stru of music iscomponent tonetabport(index : in INTEGER range 0 to 15;tone : out INTEGER range 0 to 16#3fff#;code : out INTEGER range 0 to 15;high : out STD_LOGIC_VECTOR(2 DOWNTO 0));end component;component tonegenport(clk : in STD_LOGIC;tone : in integer range 0 to 16#3fff#;spks : out STD_LOGIC);end component;component hex2ledport(hex : in integer range 0 to 15;led : out STD_LOGIC_VECTOR(6 downto 0));end component;component keybordport(kin : in STD_LOGIC_VECTOR(0 to 15);kout : out INTEGER range 0 to 15);end component;signal kout: integer range 0 to 15;signal tone: INTEGER range 0 to 16#3fff#;signal digit: integer range 0 to 15;beginu1: keybord port map (kin=>kin,kout=>kout);u2: tonetab port map (index=>kout,tone=>tone,code=>digit,high=>index); u3: tonegen port map (clk=>clk,tone=>tone,spks=>spk_out);u4: hex2led port map (hex=>digit,led=>led_out);end stru;2. hex2led的VHDL 源程序library IEEE;use IEEE.STD_LOGIC_1164.all;entity hex2led isport(hex : in integer range 0 to 15;led : out STD_LOGIC_VECTOR(6 downto 0));end hex2led;architecture rtl of hex2led issignal data : std_logic_vector(6 downto 0);beginled<=not data;with hex selectdata<= "1111001" when 1, --1"0100100" when 2, --2"0110000" when 3, --3"0011001" when 4, --4"0010010" when 5, --5"0000010" when 6, --6"1111000" when 7, --7"0000000" when 8, --8"0010000" when 9, --9"0001000" when 10, --A"0000011" when 11, --b"1000110" when 12, --C"0100001" when 13, --d"0000110" when 14, --E"0001110" when 15, --F"1000000" when others; --0end rtl;3. keybord 的VHDL 源程序library IEEE;use IEEE.STD_LOGIC_1164.all;entity keybord isport(kin : in STD_LOGIC_VECTOR(0 to 15);kout : out INTEGER range 0 to 15 );end keybord;architecture rtl of keybord issignal data:std_logic_vector(0 to 15); begindata<=kin;process(data)beginif data(0)='0' then kout<=0;elsif data(1)='0' then kout<=1;elsif data(2)='0' then kout<=2;elsif data(3)='0' then kout<=3;elsif data(4)='0' then kout<=4;elsif data(5)='0' then kout<=5;elsif data(6)='0' then kout<=6;elsif data(7)='0' then kout<=7;elsif data(8)='0' then kout<=8;elsif data(9)='0' then kout<=9;elsif data(10)='0' then kout<=10;elsif data(11)='0' then kout<=11;elsif data(12)='0' then kout<=12;elsif data(13)='0' then kout<=13;elsif data(14)='0' then kout<=14;elsif data(15)='0' then kout<=15;else NULL;end if;end process;end rtl;4. tonegen的VHDL源程序library IEEE;use IEEE.STD_LOGIC_1164.all;entity tonegen isport(clk : in STD_LOGIC;tone : in integer range 0 to 16#3fff#;spks : out STD_LOGIC);end tonegen;architecture rtl of tonegen issignal fullspks:std_logic;begingenspks:process(clk,tone)variable count14: integer range 0 to 16#3fff#;--std_logic_vector(0 to 13);beginif clk'event and clk='1' thenif count14=16#3fff# then --"1111" thencount14:=tone;fullspks<='1';elsecount14:=count14+1;fullspks<='0';end if;end if;end process;delayspks:process(fullspks)variable count2:std_logic;beginif fullspks'event and fullspks='1' thencount2:=not count2;end if;spks<=count2;end process;end rtl;5. tonetab 的VHDL源程序library IEEE;use IEEE.STD_LOGIC_1164.all;entity tonetab isport(index : in INTEGER range 0 to 15;tone : out INTEGER range 0 to 16#3fff#;code : out INTEGER range 0 to 15;high : out STD_LOGIC_VECTOR(2 DOWNTO 0) );end tonetab;architecture rtl of tonetab isbeginprocess(index)begincase index iswhen 0 =>tone<=5021;code<=6;high<="100";when 1 =>tone<=6262;code<=7;high<="100";when 2 =>tone<=6829;code<=1;high<="010";when 3 =>tone<=7872;code<=2;high<="010";when 4 =>tone<=8801;code<=3;high<="010";when 5 =>tone<=9226;code<=4;high<="010";when 6 =>tone<=10007;code<=5;high<="010";when 7 =>tone<=10703;code<=6;high<="010";when 8 =>tone<=11323;code<=7;high<="010";when 9 =>tone<=11607;code<=1;high<="001";when 10 =>tone<=12129;code<=2;high<="001";when 11 =>tone<=12593;code<=3;high<="001";when 12 =>tone<=12805;code<=4;high<="001";when 13 =>tone<=13196;code<=5;high<="001";when 14 =>tone<=13544;code<=6;high<="001";when 15 =>tone<=16383;code<=0;high<="001";when OTHERS=>NULL;end case;end process;end rtl;实验记录:1、设计记录表,记录引脚锁定与连线情况。

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

,、题目分析1、分析要求,确定总体方框图本设计基本部分是用VHDL语言设计一个简易的八音符电子琴,在Quartus II 平台下下载到Cyclone系列的EP1C12Q240C芯片中,该电路设计能够实现DO RE Ml、FA等八个音调的电子琴,发挥部分是设计一乐曲自动演奏器,用户自己编制乐曲存入电子琴,电子琴可以完成自动演奏。

电子琴音乐产生原理及硬件设计由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了。

根据系统设计要求,系统设计采用自顶向下的设计方法,系统的整体组装设计原理图如图1所示,它由乐曲自动演奏模块AUTO音调发生模块TONE和数控分频模块FENPIN三部分组成。

图1系统的整体组装设计原理图2、最终完成的技能指标(1)设计一个简易的八音符电子琴,它可通过按键输入来控制音响。

(2)演奏时可以选择是手动演奏(由键盘输入)还是自动演奏已存入的乐曲】、选择方案通过可编程逻辑器件(PLD和VHDL硬件描述引言来实现电子琴的基本部分和发挥部分的设计。

对于基本部分,设计的主体是数控分频器,对输入的频率进行分频,得到各个音阶对应的频率最为输出。

当按下不同的键时发出不同的声音。

对于发挥部分,则在原设计的基础上,增加一个乐曲存储模块,代替了键盘输入,产生节拍控制(index数据存留时间)和音阶选择信号,即在此模块中可存放一一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。

方案一:由单片机来完成设计。

可用单片机控制键盘的输入,以及产生相应的频率信号作为输出。

目前,单片机的功能已比较强大,集成度日益增高且其设计和控制比较容易。

但是由于在传统的单片机设计系统中必须使用许多分立元件组成单片机的外围电路,如锁存器,译码器等都需要单独的电路,因此整个系统显得十分复杂,抗干扰性差,在运行过程中容易死机或进入死循环,可靠性降低,而功耗费用增高。

方案二:利用PLC来完成设计。

目前利用PLC的技术已经比较成熟。

PLC有其优点,其性能优异,体积小,可靠性和精度都比较好,在电子琴的设计中可采用PLC来完成硬件的控制,但是用PLC实现编程相对比较复杂,对于电子琴这种小型设计来说成本过高。

方案三:利用可编程逻辑器件PLD来完成该设计。

利用PLD可以很好的解决上述的问题。

它的成品体积小,适合电子琴这种小型设计。

其性能稳定,控制精度高(Xili nx公司的高密度,高速可预测延时,高性能系列芯片),易于管理和屏蔽,抗干扰能力强,可靠性高。

综上,在本设计中选择第三种方案最优。

三、各模块原理及其程序1、乐曲自动演奏模块乐曲自动演奏模块(AUTO.VHD的作用是产生8位发声控制输入信号/当进行自动演奏时,由存储在此模块中的8位二进制数作为发声控制输入,从而自动演奏乐曲。

为了实现扩展部分的设计,便需要多加上一个音乐存储模块,该模块的作用是产生8位发声控制输入index,auto为0或1时可以选择自动演奏或者键盘输入,如果auto为0,则而由存储在此模块中的8位二进制数来作为发声控制输入,由此便可自动演奏乐曲。

此模块的VHDL语言中包括两个进程,首先是对基准脉冲进行分频得到4Hz 的脉冲,作为第二个进程的时钟信号,它的目的是控制每个音阶之间的停顿时间,此处便是1/4=0.25s,第二个进程是音乐的存储,可根据需要编写不同的乐曲。

这段模块的原理图如图2所示:CLKAUTOINDEX0[7.0]图2乐曲自动演奏模块原理图乐曲自动演奏模块可以由VHDL语言来实现,下面是一段主要代码:BEGINIF AUTO ='0' THENCASE COUNT0 ISWHEN 0=>INDEX0<="00000100"; --3 WHEN 1=>INDEX0<="00000100"; --3 WHEN 2=>INDEX0<="00000100"; --3 WHEN 3=>INDEX0<="00000100"; --3 WHEN 4=>INDEX0<="00010000"; --5 WHEN 5=>INDEX0<="00010000"; --5 WHEN 6=>INDEX0<="00010000"; --5 WHEN 7=>INDEX0<="00100000"; --6 WHEN 8=>INDEX0<="10000000"; --8 WHEN 9=>INDEX0<="10000000"; --8 WHEN 10=>INDEX0<="10000000"; --8 WHEN 1仁>INDEX0<="00000100"; --3 WHEN 12=>INDEX0<="00000010"; --2 WHEN 13=>INDEX0<="00000010"; --2 WHEN 14=>INDEX0<="00000001"; --1 WHEN 15=>INDEX0<="00000001"; --1 WHEN 16=>INDEX0<="00010000"; --5 WHEN 17=>INDEX0<="00010000"; --5 WHEN 18=>INDEX0<="00001000"; --4 WHEN 19=>INDEX0<="00001000"; --4 WHEN 20=>INDEX0<="00001000"; --4 WHEN 2仁>INDEX0<="00000100"; --3 WHEN 22=>INDEX0<="00000010"; --2 WHEN 23=>INDEX0<="00000010"; --2 WHEN 24=>INDEX0<="00010000"; --5 WHEN 25=>INDEX0<="00010000"; --5 WHEN 26=>INDEX0<="00001000"; --4 WHEN 27=>INDEX0<="00001000"; --4 WHEN 28=>INDEX0<="00000100"; --3 WHEN 29=>INDEX0<="00000100"; --3 WHEN 30=>INDEX0<="00000010"; --2 WHEN 31=>INDEX0<="00000010"; --2WHEN OTHERS =>NULL; END CASE; ELSE INDEX0<=INDEX2; END IF;END PROCESS; END BEHAVIORAL;2、音调发生模块音调发生模块(TONE.VD )的作用是产生获得音阶的分频预置值。

当8位发 声控制输入index 中的某一位为高电平时,则对应某一音阶的数值将以端口 tone 输出,作为获得该音阶的分频预置值,该值作为数控分频器的输入,来对 4MHz 的脉冲进行分频,由此得到每个音阶相应的频率,例如输入 index="00000010", 即对应的按键是2,产生的分频系数便是6809;由code 输出对应该音阶简谱的 显示数码;由high 输出指示音阶高8度的显示,低电平有效。

这段模块的原理图如图3所示:图3音调发生模块原理图音调发生模块可以由VHDL 语言来实现,下面是一段主要代码:BEGINCASE INDEX ISWHEN "00000001"=>T0NE0 <=773;CODE<="1001111";HIGH<='1'; WHEN "00000010"=>T0NE0 <=912;CODE<="0010010";HIGH<='1'; WHEN "00000100"=>T0NE0 <=1036;CODE<="0000110";HIGH<='1'; WHEN "00001000"=>T0NE0 <=1116;CODE<="1001100";HIGH<='1'; WHEN "00010000"=>T0NE0 <=1197;CODE<="0100100";HIGH<='1'; WHEN "00100000"=>T0NE0 <=1290;C0DE<="0100000";HIGH<='0'; WHEN "01000000"=>T0NE0 <=1372;C0DE<="0001111";HIGH<='0'; WHEN "10000000"=>T0NE0 <=1410;C0DE<="0000000";HIGH<='0'; WHEN OTHERS =>T0NE0<=2047;C0DE<="0000001";HIGH<='0'; END CASE; END PROCESS;3、数控分频模块在对EDA 的学习中,我们知道数控分频器的功能是在输入端输入不同数据 时,对输入时钟产生不同的分频比,输出不同频率的时钟,以改变输出信号的频 率。

相关文档
最新文档