1、简易电子琴课程设计QUARTUS制作可编程逻辑 期末设计题学目:简易电子琴制作 院:信息工程学院年级:2009级完成时间 :2012 年 2 月 27 日1、课程设计目的 .3可编程逻辑期末大作业-简易电子琴设计2、课程设计要求 .32.1、基础部分 .32.2、发挥部分 .33、设计(课程)基本内容 .43.1、EDA 技术/VHD 语言 .44、电子琴设计原理及过程 .54.1、设计规划 .54.2、基础部分原理 .54.3、简易电子琴的设计流程 .55、课程设计的程序模块 .65.1、乐曲演奏模块(PS2SCAN) .65.1.1、模块说明 .65.1.2、乐曲演奏模块文本程序 .75.
2、2、音调发生模块 .115.2.1、模块说明 .115.2.2、音调发生模块文本程序: .125.3、数控分频模块 .135.3.1、模块说明 .135.3.2、数控分频模块文本程序 .14 5.4、音符存储模块 .175.4.1、模块说明 .175.4.2、音符存储模块的源程序 .17 6、顶层模块设计 .196.1、模块说明 .196.2、顶层模块文本程序 .20 6.3、综合设计原理图(完善) .22 7、系统程序仿真和编译 .227.1、程序编译 .227.1.1、编译过程 .228、设计中遇到问题以及设计小结 .25 8.1、 遇到的问题(分析) .258.2、设计小结(总结) .2
3、6 可编程逻辑期末大作业-简易电子琴设计1、课程设计目的1) 利用数控分频器设计一个电子琴硬件电路和音乐发生器,设计达到演奏时可以选择 是手演奏(键盘输入),或自动演奏已存入的乐曲,并且能自动演奏。2) 巩固和运用所学课程,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力,通过对一个简易的14音符电子琴的设计,进一步加深对计算机原理以及数字电路应用技术方面的了解与认识,进一步熟悉数字电路系统设计、制作与调试的方法和步骤。巩固所学课堂知识,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力。为了进一步了解计算机组成原理与系统结构,深入学习EDA技术,用VHDL语言 去控制将
4、会使我们对本专业知识可以更好地掌握。3) 提高学生对eda软件实践操作能力和工程设计能力,对eda技术和fpga应用的相关知识进行了系统的介绍,内容包括eda技术的基本知识,fpga的基本原理,quartus ii的使用方法与使用技巧,主流硬件描述语言vhdl的语法规则介绍及实例说明,常用的控制 或通信功能模块的设计方法实例,以及采用vhdl语言描述的fpga综合实例。2、课程设计要求2.1、基础部分1) 当键盘输入 123456789abcde 是对应响应的频率2) 演奏时在 8 段数码管显示对应音符2.2、发挥部分3) 具有存储功能存储 20 个音符4) 当键盘上某一个键(如 v)时,自动
5、重放存储区音符可编程逻辑期末大作业-简易电子琴设计3、设计(课程)基本内容内容包括eda技术的基本知识,fpga的基本原理,quartus ii的使用方法与使用技巧,主流硬件描述语言vhdl的语法规则介绍及实例说明,常用的控制或通信功能模块的设计方法实例,以及采用vhdl语言描述的fpga综合实例设计。本书由浅入深,从易到难,既 让初学者轻松入门,又让有经验的设计者得到有价值的参考信息。3.1、eda 技术/vhd 语言随着基于cpld的eda技术的发展和应用领域的扩大与深入,eda技术在电子信息、通信、自动控制用计算机等领域的重要性日益突出。EDA技术就是以计算机为工具,设计者在EDA软件平
6、台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性, 减轻了设计者的劳动强度。利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版 图的整个过程的计算机上自动处理完成。此次设计主要是基于vhdl文本输入法设计乐曲演奏电路,运用vhdl语言对简易电子琴的各个模块进行设计,并使用eda 工具对各模块进行仿真验证。该系统基
7、于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,通过按键输入来控制音响或者自动演奏已存入的歌曲。系统由乐曲自动演奏模块、音调发生模块和数控分频模块三个部分组成。系统实现是用硬件描述语言vhdl按模块化方式进行设计,然后进行编程、时序仿真、电路功能验证,奏出美妙的乐曲(当然由于条件限制,暂不进行功能验证,只进行编程和时序仿真)。该设计最重要的一点就是通过按键控制不同的音调发生,每一个音 调对应不同的频率,从而输出对应频率的声音。可编程逻辑期末大作业-简易电子琴设计4、电子琴设计原理及过程4.1、设计规划根据系统设计要求,系统设计采用自顶向下的设计方法,它由乐曲自动演奏模块、音 调发生模
8、块和数控分频模块,存储模块四部分组成4.2、基础部分原理本课程设计目的在于灵活运用 eda 技术编程实现一个简易电子琴的乐曲演奏,它要求在实验箱上构造一个电子琴电路,不同的音阶对应不同频率的正弦波。按下每个代表不 同音阶的按键时,能够发出相对应频率的声音。故系统可分为乐曲自动演奏模块(ps2scan)、音调发生模块(tonetaba)和数控分频模块(speakera)三部分。4.3、简易电子琴的设计流程根据系统设计要求,系统该系统基于计算机中时钟分频器的原理,设计采用自顶向下的设计方法,通过按键输入来控制音响或者自动演奏已存入的歌曲。它由乐曲自动演 奏模块、音调发生模块和数控分频模块三部分组成
9、。用 vhdl 语言设计电路的流程:1.使用文本编辑器输入设计源文件。2.使用编译工具编译源文件:vhdl 的编译语言。3.功能仿真。4.综合。综合的目的是在于将设计的源文件由语言转换为实际的电路。这一部分 最终目的是生成门电路级的网表(netlist)。5.框图布局、布线。这一步的目的是生成用于编程文件。先将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位。然后,在根据网表中提供的各门的连接, 把各个门的输入输出连接起来。6. 编译完成,下载。可编程逻辑期末大作业-简易电子琴设计5、课程设计的程序模块5.1、乐曲演奏模块(ps2scan)5.1.1、模块说明乐曲自动演奏模块的作用是
10、产生 14 位发生控制输入信号。当进行自动演奏时,由存 储在此模块的 8 位二进制数作为发声控制输入,从而自动演奏乐曲。该模块的 vhdl 源程序主要由 3 个 process(clk)工作进程组成, 第一个process(clk)的作用是根据键盘输入(自动演奏)的值(0 或 1)来判断计数器 count 以 及脉冲 clk 的输出值。部分源程序如下:process(clk)begin-工作进程开始if clkevent and clk = 1 then时钟输入信号为 1kbclkreg = kbclk;kbclkfall dispdisp=0010; 该模块最主要的用途就是将输入二进制数转化
11、为发声控制输入,是产生音符的重要 步骤, ps2scan 模块的源程序符号编辑图如图图 5-1-1:ps2scan 模块的符号编辑在此程序中自动模块输出的音符数据,经过翻译后将输出到数控分频模块为其提供分 频系数的初始值,5.1.2、乐曲演奏模块文本程序-程序名称:ps2scan.vhd-程序功能:采用 vhdl 语言编程产生 14 位发声控制输入信号library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity ps2scan isport(clk,kbclk,kbdata:in std_logic; -系统时
12、钟信号/键盘输入演奏信号 /键盘输入信号 disp : out std_logic_vector(3 downto 0); -音符显示信号(时钟输出)auto : out std_logic - -音频信号(键盘输入信号)end entity;architecture rtl of ps2scan issignal kbclkreg, kbclkfall : std_logic;可编程逻辑期末大作业-简易电子琴设计signal datacoming : std_logic:=0;signal cnt : integer range 0 to 9;signal shiftdata,kbcoder
13、eg : std_logic_vector(7 downto 0);- -输入 8 位控制 信号signal delay:std_logic:=0;signal count: integer range 0 to 10000; -定义信号计数器, 10000 个信号元素 beginprocess(clk)begin-工作进程开始if clkevent and clk = 1 thenkbclkreg = kbclk;kbclkfall = kbclkreg and (not kbclk);end if;end process;process(clk)beginif clkevent and c
14、lk = 1 then-键盘输入为 1if kbclkfall = 1 and datacoming = 0 and kbdata = 0 then datacoming = 1;cnt = 0;elsif kbclkfall = 1 and datacoming = 1 thenif cnt = 9 thenif kbdata = 1 then datacoming = 0;end if; cnt = 0;kbcodereg=shiftdata;elseshiftdata = kbdata & shiftdata(7 downto 1);cnt dispdispdispdispdispdispdispdispdispdispdispdispdispdispdispdispdelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelay=0;end case;end if;if clkevent and clk = 1 then count = count + 1;else null;end if;if count=1000 and delay=1 thencount=0;auto=1;else if count
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1