简易电子琴的设计(3)

2019-04-14 16:45

孟磊 简易电子琴的设计 第6页 共21页

图3.2 简易电子琴的工作流程图

3.3简易电子琴中各模块的设计

为了更清楚的了解电子琴的工作过程,我们利用EDA工具(本课程设计Max+plus)对各个模块实施时序仿真(Timing Simulation),由自顶向下的设计方式,最后将三个模块进行整合,做出简易电子琴整个系统的时序仿真图。

3.3.1 乐曲自动演奏模块

乐曲自动演奏模块的作用是产生8位发声控制输入信号。当进行自动演奏时,由存储在此模块中的8位二进制作为发声控制输入,从而自动演奏乐曲。这段模块的原理图如图3.3所示:

CLK AUTO INDEX0[7.0] INDEX2[7.0] 3.3 乐曲自动演奏模块原理图

乐曲自动演奏模块可以由VHDL语言来实现,下面是一段主要代码:

BEGIN

IF AUTO='0'THEN CASE COUNT IS

WHEN 0=>INDEX0<=\ WHEN 1=>INDEX0<=\ WHEN 2=>INDEX0<=\ WHEN 3=>INDEX0<=\ . . .

WHEN 29=>INDEX0<=\ WHEN 30=>INDEX0<=\ WHEN 31=>INDEX0<=\

6

孟磊 简易电子琴的设计 第7页 共21页

END CASE;

ELSE INDEX0<=INDEX2; END IF; END PROCESS;

3.3.2 音调发生模块

音调发生模块的作用是产生音阶的分频预置值。当8位发声控制输入信号中的某一位为高电平时,则对应某一音阶的数值将输出,该数值即为该音阶的分频预置值,分频预置值控制数控分频模块进行分频,由此可得到每个音阶对应的频率。 图3.5是音调发生模块的原理图:

TONE[10.0] INDEX[7.0] HIGH CODE[6.0]

图 3.5 音调发生模块原理图

音调发生模块可以由VHDL语言来实现,下面是一段主要代码:

BEGIN CASE INDEX IS

WHEN\WHEN\WHEN\WHEN\WHEN\WHEN\WHEN\WHEN\WHEN OTHERS=>TONE<=2047;CODE<=\ END CASE;

7

孟磊 简易电子琴的设计 第8页 共21页

END PROCESS;

3.3.3 数控分频模块

在对计算机组成原理的学习中,我们知道数控分频器的功能是在输入端输入不同数据时,对输入时钟产生不同的分频比,输出不同频率的时钟,以改变输出信号的频率。本设计中数控分频模块是利用并行预置数的减法计数器对时基脉冲进行分频,得到与1、2、3、4、5、6、7七个音符相对应的频率。 数控分频模块原理图如图3.7所示:

CLK1 SPKS TONE1[10.0]

图3.7 数控分频模块原理图 其主要VHDL代码如下所示:

BEGIN PROCESS(CLK1)

VARIABLE COUNT:INTEGER RANGE 0 TO 8; BEGIN

IF(CLK'EVENT AND CLK1='1')THEN COUTNT:=COUNT +1; IF COUNT=2 THEN PRECLK<='1'; ELSE COUNT=4 THEN PRECLK<='0';COUTN:=0; END IF; END IF; END PROCESS;

PROCESS(PRECLK,TONE1)

VARIABLE COUNT11:INTEGER RANGE 0 TO 2047; BEGIN

8

孟磊 简易电子琴的设计 第9页 共21页

IF(PRECLK'EVENT AND PRECLK='1')THEN IF COUNT11

COUNT11:=COUNT11 +1;FULLSPKS<='1'; ELSE

COUNT11:=0;FULLSPKS<='0'; END IF; END IF; END PROCESS;

3.3.4 顶层设计

把以上设计的各个模块进行整合,最后我们得到了系统的整个工作原理图,如图3.10:

3.10 简易电子琴的工作原理图

9

孟磊 简易电子琴的设计 第10页 共21页

完成整个系统顶层设计的主要VHDL代码如下:

ARCHITECTURE ART OF DIANZIQIN IS COMPONENT AUTO PORT(CLK: IN STD_LOGIC; AUTO: IN STD_LOGIC;

INDEX2:IN STD_LOGIC_VECTOR(7 DOWNTO 0); INDEX0:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT; COMPONENT TONE

PORT ( INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0); CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); HIGH: OUT STD_LOGIC;

TONE0:OUT INTEGER RANGE 0 TO 2047); END COMPONENT; COMPONENT FENPIN PORT(CLK1: IN STD_LOGIC;

TONE1: IN INTEGER RANGE 0 TO 2047; SPKS: OUT STD_LOGIC); END COMPONET;

4 系统仿真

乐曲自动演奏模块由VHDL语言实现后,其仿真图如图3.4所示。

10


简易电子琴的设计(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:行政法期末考试试题及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: