数字电路课程设计《梁祝》乐曲 数字时钟 乒乓球游戏机 串并乘法(2)

2019-03-29 17:10

WHEN 96 => ToneIndex <= 8; WHEN 97 => ToneIndex <= 8; WHEN 98 => ToneIndex <= 8; WHEN 99 => ToneIndex <= 9; WHEN 100 => ToneIndex <= 12; WHEN 101 => ToneIndex <= 12; WHEN 102 => ToneIndex <= 12; WHEN 103 => ToneIndex <= 10; WHEN 104 => ToneIndex <= 9; WHEN 105 => ToneIndex <= 9; WHEN 106 => ToneIndex <= 10; WHEN 107 => ToneIndex <= 9; WHEN 108 => ToneIndex <= 8; WHEN 109 => ToneIndex <= 8; WHEN 110 => ToneIndex <= 6; WHEN 111 => ToneIndex <= 5; WHEN 112 => ToneIndex <= 3; WHEN 113 => ToneIndex <= 3; WHEN 114 => ToneIndex <= 3; WHEN 115 => ToneIndex <= 3; WHEN 116 => ToneIndex <= 8; WHEN 117 => ToneIndex <= 8; WHEN 118 => ToneIndex <= 8; WHEN 119 => ToneIndex <= 8; WHEN 120 => ToneIndex <= 6; WHEN 121 => ToneIndex <= 8; WHEN 122 => ToneIndex <= 6; WHEN 123 => ToneIndex <= 5; WHEN 124 => ToneIndex <= 3; WHEN 125 => ToneIndex <= 5; WHEN 126 => ToneIndex <= 6; WHEN 127 => ToneIndex <= 8; WHEN 128 => ToneIndex <= 5; WHEN 129 => ToneIndex <= 5; WHEN 130 => ToneIndex <= 5; WHEN 131 => ToneIndex <= 5; WHEN 132 => ToneIndex <= 5; WHEN 133 => ToneIndex <= 5; WHEN 134 => ToneIndex <= 5; WHEN 135 => ToneIndex <= 5;

WHEN 136 => ToneIndex <= 0; WHEN 137 => ToneIndex <= 0; WHEN 138 => ToneIndex <= 0; WHEN OTHERS => NULL;

-- 简谱休止符à输出-- 频率为零 END CASE; END PROCESS; END;

简谱码对应的分频预置数查表电路(ToneTaba.VHD)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_unsigned.ALL; ENTITY ToneTaba IS

PORT ( Index : IN INTEGER RANGE 0 TO 15; CODE : OUT INTEGER RANGE 0 TO 15; HIGH : OUT STD_LOGIC;

Tone : OUT INTEGER RANGE 0 TO 16#7FF# ); END;

ARCHITECTURE one OF ToneTaba IS BEGIN

Search : PROCESS(Index) BEGIN

CASE Index IS -- 译码电路,查表方式,控制音调的预置数 WHEN 0 => Tone <= 2047; CODE<=0; HIGH<='0'; WHEN 1 => Tone <= 773; CODE<=1; HIGH<='0'; WHEN 2 => Tone <= 912; CODE<=2; HIGH<='0'; WHEN 3 => Tone <= 1036; CODE<=3; HIGH<='0'; WHEN 5 => Tone <= 1197; CODE<=5; HIGH<='0'; WHEN 6 => Tone <= 1290; CODE<=6; HIGH<='0'; WHEN 7 => Tone <= 1372; CODE<=7; HIGH<='0'; WHEN 8 => Tone <= 1410; CODE<=1; HIGH<='1'; WHEN 9 => Tone <= 1480; CODE<=2; HIGH<='1'; WHEN 10 => Tone <= 1542; CODE<=3; HIGH<='1'; WHEN 12 => Tone <= 1622; CODE<=5; HIGH<='1'; WHEN 13 => Tone <= 1668; CODE<=6; HIGH<='1'; WHEN 15 => Tone <= 1728; CODE<=7; HIGH<='1'; WHEN OTHERS => NULL; END CASE; END PROCESS; END;

数控分频与演奏发生器(Speakera.VHD) LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY Speakera IS

PORT ( clk : IN STD_LOGIC;

Tone : IN INTEGER RANGE 0 TO 16#7FF#; SpkS : OUT STD_LOGIC ); END;

ARCHITECTURE one OF Speakera IS SIGNAL PreCLK : STD_LOGIC; SIGNAL FullSpkS : STD_LOGIC; BEGIN

DivideCLK : PROCESS(clk)

VARIABLE Count4 : INTEGER RANGE 0 TO 15; BEGIN

PreCLK <= '0';

-- 将CLK进行16分频,PreCLK为CLK的16分频 IF Count4 > 11 THEN PreCLK <= '1'; Count4 := 0;

ELSIF clk'EVENT AND clk = '1' THEN Count4 := Count4 + 1; END IF; END PROCESS;

GenSpkS : PROCESS(PreCLK, Tone)

VARIABLE Count11 : INTEGER RANGE 0 TO 16#7FF#; BEGIN

-- 11位可预置计数器

IF PreCLK'EVENT AND PreCLK = '1' THEN IF Count11 = 16#7FF# THEN Count11 := Tone;

FullSpkS <= '1'; ELSE

Count11 := Count11 + 1; FullSpkS <= '0'; END IF; END IF; END PROCESS;

DelaySpkS : PROCESS(FullSpkS) VARIABLE Count2 : STD_LOGIC; BEGIN

-- 将输出再进行2分频,将脉冲展宽,以使扬声器有足够功率发音 IF 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;

三:系统以及各个模块的仿真波形

音乐节拍和音调发生器的仿真波形

简谱码对应的分频预置数查表电路仿真波形

音乐节拍和音调发生器仿真波形

数控分频与演奏发生器仿真波形

四:系统调试运行结果说明与分析

实验箱选择模式0。将设计出的演奏电路的程序经过编译(Compiler)后,选择FLEX10K系列中EPF10K10LC84-4作为目标器件(Assign/Device),并进行管脚锁定(Floorplan Editor)。器件编程(Programmer),将编译生成的*.sof文件下载到目标芯片。实验箱自带蜂鸣器(Speaker)奏出“梁祝”的旋律,由此说明实验成功。

五:结论及体会

程序可以完成预定的功能,而且本系统还可以演奏出其他的曲子,只需将其简谱分频预置数写入ToneTaba.VHD,再将该曲子的节拍表输入到NoteTabs.VHD中,重新编译后,下载即可完成。通过这次实验,使我更加熟练的掌握了调制编译的过程,加深了对实验的兴趣。

(二)数字钟

一:系统功能概述

① 一个具有“时”、“分”、“秒”十进制数字显示(小时从00-23)计时器。 ② 具有手动校时、校分的功能。

二:系统组成以及系统各部分的设计

顶层文件(SHUZIZHONG.VHD)

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity shuzizhong is

port(clk,set,change,s1,s2,s3:in std_logic;

second1,second2,minite1,minite2,hour1,hour2:out std_logic_vector(3 downto 0); cout:out std_logic); end entity;

architecture one of shuzizhong is begin

pro1:process(clk,set,s1,s2,s3,change) variable

msecond1,msecond2,mminite1,mminite2,mhour11,mhour12,mhour21,mhour22:std_logic_vector(3 downto 0); begin

if clk'event and clk='1' then

if set='1' then -----启动校验 if s1='1'

then msecond1:=msecond1+1; if msecond1=\

then msecond1:=\

msecond2:=msecond2+1; if msecond2=\ then msecond2:=\ end if; end if;

end if; --------秒校验 if s2='1' then

mminite1:=mminite1+1;

if mminite1=\


数字电路课程设计《梁祝》乐曲 数字时钟 乒乓球游戏机 串并乘法(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:等差数列教案

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

马上注册会员

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