1、系统的整体组装设计原理图如图1-1所示。图1-1 系统的整体组装设计原理图由于设计分模块组成,每个单独的模块都是一个完整的源程序,分别实现不同性质的功能,但是每个模块又是紧密关联的,前一个模块的输出很可能是后一模块的输入。如AUTO模块的音符信号输出就是TONE模块的音符信号输入。另外,时钟脉冲信号在本课程设计中用的最多,用处也最大,一般情况下时钟信号处上升沿有效,判断和控制各个计数器计数多少。2 简易电子琴的设计过程根据系统设计要求,系统该系统基于计算机中时钟分频器的原理,设计采用自顶向下的设计方法,通过按键输入来控制音响或者自动演奏已存入的歌曲。它由乐曲自动演奏模块、音调发生模块和数控分频
2、模块三部分组成。2.1 乐曲自动演奏模块乐曲自动演奏模块的作用是产生8位发生控制输入信号。当进行自动演奏时,由存储在此模块的8位二进制数作为发声控制输入,从而自动演奏乐曲。该模块的VHDL源程序主要由3个工作进程组成,分别为PULSE0,MUSIC和COM1。PULSE0的作用是根据键盘输入(自动演奏)的值(0或1)来判断计数器COUNT以及脉冲CLK2的输出值。部分源程序如下:PULSE0:PROCESS(CLK,AUTO) -工作进程开始VARIABLE COUNT:INTEGER RANGE 0 TO 8; -定义计数器变量,值从0到8 IF AUTO=1THEN -键盘输入为1COUN
3、T:=0;CLK2INDEX000010000 -5该模块最主要的用途就是将输入二进制数转化为发声控制输入,是产生音符的重要步骤, AUTO模块的源程序符号编辑图如图3-1。图3-1 AUTO模块的符号编辑图2.1.1乐曲演奏模块文本程序:-程序名称:AUTO.VHD-程序功能:采用VHDL语言编程产生8位发声控制输入信号。-电子班 张目(12007243818)-LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY AUTO IS
4、PORT(CLK: IN STD_LOGIC; -系统时钟信号 AUTO: -键盘输入/自动演奏 CLK2: BUFFER STD_LOGIC; -时钟输出INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); -键盘输入信号 INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -音符信号输出 END AUTO;ARCHITECTURE BEHAVIORAL OF AUTO ISSIGNAL COUNT0:INTEGER RANGE 0 TO 31; -定义信号计数器,有32个信号元素 BEGINPROCESS(CLK,AUTO) -P
5、ULSE0工作进程开始 -定义变量计数器,从0到8 BEGIN -计数器值为0,时钟信号2幅值为0 ELSIF(CLK)THEN -输入的时钟信号为其他值 COUNT: -计数器加1即为1IF COUNT=4 THENELSIF COUNT=8 THENEND IF;END PROCESS;MUSIC:PROCESS(CLK2) -MUSIC工作进程开始BEGINIF(CLK2EVENT AND CLK2=)THEN -时钟信号2为1IF(COUNT0=31)THEN -计数器值为31COUNT0WHEN 1=WHEN 2=WHEN 3=WHEN 5=WHEN 6=WHEN 7=0010000
6、0 -6WHEN 8=10000000 -8WHEN 9=WHEN 10=WHEN 11=WHEN 12=00000010 -2WHEN 13=WHEN 14=00000001 -1WHEN 15=WHEN 16=WHEN 17=WHEN 18=00001000 -4WHEN 19=WHEN 20=WHEN 21=WHEN 22=WHEN 23=WHEN 24=WHEN 25=WHEN 26=WHEN 27=WHEN 28=WHEN 29=WHEN 30=WHEN 31=WHEN OTHERS=NULL;END CASE;ELSE INDEX0TONE0=912;CODE0010010HIGH=2047;0000001显然,该模块最主要的作用就是给音符输入预设频率值,因为,电子琴最终实现乐曲演奏就是输出不同频率的正弦波,此模块就是将二进制发声信号转化为对应的频率。32 TONE模块的符号编辑图2.2.1音调发生模块文本程序:TONE.VHD采用VHDL语言编程产生音阶的分频预置值。ENTITY TONE I
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1