基于VHDL的贪吃蛇游戏设计MK5_第1页
基于VHDL的贪吃蛇游戏设计MK5_第2页
基于VHDL的贪吃蛇游戏设计MK5_第3页
基于VHDL的贪吃蛇游戏设计MK5_第4页
基于VHDL的贪吃蛇游戏设计MK5_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于VHDL的贪吃蛇游戏设计PAGEPAGEXXXVIII基于VHDL的贪吃蛇游戏设计摘要贪吃蛇游戏是一条蛇在封闭围墙里运动,围墙里随机出现一个食物。通过按四个光标键控制蛇的上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,接着又随机出现食物,等待蛇来吃。如果蛇在移动中撞到墙或身体交叉蛇头撞到自己的身体则游戏结束。本设计是基于VHDL语言的贪吃蛇游戏。贪吃蛇游戏是一个经典小游戏,多年来经过不断发展形成了各种不同的版本,风靡世界各地,也通用于各种不同平台。即使各种大型游戏不断涌现,贪吃蛇依然充满魅力。贪吃蛇游戏操作简单,引人入胜,经久不衰。作为编程课题既有足够的挑战难度,又有一定的趣味性。通过游戏程序的设计,提高编程兴趣与编程思路,巩固VHDL语言中所学的知识,加深理解,实现理论与实际相结合。关键词:贪吃蛇;VHDL;AbstractSnakegameisasnakeintheclosedwallmovement,randomafoodinthewall.Byfourcursorkeystocontrolthesnakeupanddownorsofourdirection,headofthesnakedownthefood,thefoodiseaten,longsnakebodysection,thentherandomfood,waitingforthesnaketoeat.Ifthesnakehitawalloronthemovecrossthesnakehityourbodyisgameover.ThisdesignisbasedontheVHDLlanguagesnakegame.Snakegameisaclassicgame,overtheyears,throughcontinuousdevelopmenthasformedavarietyofdifferentversions,andispopularallovertheworld,isalsocommoninavarietyofdifferentplatforms.Evenbiggamesofvariouskindsarespringingupconstantly,thesnakeisstillfullofcharm.Snakegameissimple,fascinating,enduring.Asaprogrammingtaskisbothenoughtochallengethedifficulty,andhavefun.Throughthegameprogramdesignandimproveinterestinprogrammingandprogrammingideas,consolidatetheknowledgelearnedintheVHDLlanguage,deepenunderstanding,integratingtheorywithpractice.目录摘要 IAbstract II第一章引言 1HYPERLINK\l"_Toc230356559"1.1本文研究的意义 11.2国内外研究现状 11.3本文的研究内容及组织结构 31.3.1本文的研究内容 31.3.2本文的组织结构 3第二章基于VHDL的贪吃蛇游戏总体设计 32.1基于VHDL的贪吃蛇游戏设计功能要求 32.2基于VHDL的贪吃蛇游戏设计框图 10本章小结 10第三章基于VHDL的贪吃蛇游戏硬件设计 0356579\h133.1微处理器模块 133.2电源模块 143.3键盘模块 14HYPERLINK\l"_Toc230356583"3.4显示模块 15第四章基于VHDL的贪吃蛇游戏软件设计 354.1基于VHDL的贪吃蛇游戏软件程序设计 354.2时钟模块设计 364.3计时模块设计 364.4控制模块设计 36第五章基于VHDL的贪吃蛇游戏测试结果与分析 355.1基于VHDL的贪吃蛇游戏各部分模块测试结果与分析 355.1.1键盘模块 365.1.2显示模块 PAGEREF_Toc230356598\h365.2基于VHDL的贪吃蛇游戏软件测试结果与分析 36第6章全文总结 356.1研究成果 356.2进一步研究建议 36结论 39致谢…………….39参考文献 40附录:PLC部分程序清单 41第一章引言1.1本文研究的意义贪吃蛇游戏玩法虽然简单,其意义却绝不简单。贪吃蛇的历史比我们想象得要久远得多,最早的贪吃蛇游戏原型诞生于1976年。不过这最早的一版是一款街机游戏。这个游戏名为Blockade,是个双人游戏,发行商为

Gremlin。游戏的玩法比较特殊,蛇不会向前移动,而只会尾巴不动、头越来越长。其实它的设定也不是蛇,而是两个小人一边向前走一边在身后筑墙……规则是谁先撞墙谁输。这个游戏是相当成功的,所以很快产生了许多效仿者。其中就包括大名鼎鼎的Atari公司,Atari公司在1978年开发了一款名为surround的游戏,基本上是blockade的Atari

2600平台移植和改进版。已知最早的个人电脑版本,是TRS-80型电脑上的Worm程序,作者Peter

Trefonas。TRS-80型,是由坦迪公司(Tandy

Corporation)出品,TRS-80型1977年上市,1981年停产,最早的大规模生产个人电脑之一。它的本体售价约600美元,拥有一枚1.77M主频的CPU,4k-48k的内存,全键盘,TRS-DOS操作系统,浮点BASIC语言。TRS-80可外接磁带、软盘或者硬盘存储(那时的软盘容量85k到180k不等;硬盘容量5兆,价格1500美元)。随机附送一台黑白电视机改装的显示器,但因为只有1k显存,所以只能显示64*16的字母/符号矩阵,不能单独显示真正的像素点。不过利用符号模拟的方法,可以达成128*48的虚拟分辨率。到了1991年,MS-DOS

5.0

随机附送了一个名为Nibbles的贪吃蛇类游戏,是用QBasic写的。这个游戏是作为QB的范例程序而附送的,考虑到那时候MS-DOS的普遍性,几乎所有的电脑应该都有这个。它使用标准的80*25字符显示模式来模拟80*50的网格。贪吃蛇游戏的巅峰是1997年,当时年轻的诺基亚设计工程师、用户界面设计师TaneliArmanto受命为即将发售的诺基亚6110手机开发一款全新的随机游戏。这个任务其实对Taneli来说有些不同寻常。他在写的回忆录中说:“这其实是一个甜蜜的误会。我的兴趣爱好是传统的桌面游戏,而并不是电子游戏。所以当诺基亚6110产品项目组找我为手机开发一款小游戏时候,我不禁怀疑他们是不是弄错了。不过当时我也非常高兴能接受这个挑战。”Taneli最后拿出了贪吃蛇(Snake)。初版贪吃蛇以其简洁、耐玩而著称。整个系统比最早的Blockade更加简洁,没有对战,没有对射。画面也同样简洁,任何一块灰阶屏幕都可以显示它。它的规则也同样简单,在一块20×11的长方形区域驰骋,满分最高可达2008分(总分=屏幕上的所有点x级别’1-9′+100分奖励)。挑战极大,Taneli本人的记录不过1125分。贪吃蛇一经推出就广受欢迎。芬兰甚至自1999年开始举办年度贪吃蛇大赛。从诺基亚6110开始至今,一共有大约4亿部诺基亚手机搭载着贪吃蛇游戏推向市场。这让贪吃蛇成为游戏史上传播最广的作品之一。贪吃蛇被很多人认为是手机游戏的第一步。1.2国内外研究现状贪吃蛇进化史贪吃蛇系列在过去这些年里有过很多次进化:·SnakeII–画面有所改进,此外贪吃蛇撞上屏幕边缘以后会从屏幕的另一面出现。这本来是个Bug,但由于广受欢迎,在后续的版本中得到了保留。

·SnakeXenzia–用于现在的单色屏、普及型彩屏手机。

·SnakeEX–彩屏手机版本,画质提升到超任的水平。这一代贪吃蛇开始支持蓝牙、红外对战。

·SnakeEX2–预装在部分S40手机上。

·Snakes–3D版,为诺基亚N-Gage开发。同样支持蓝牙对战。画质进一步提升。后被预装在诺基亚N70、N73等N系列手机上。游戏可以运行在其它S60智能手机上。·SnakeIII-另一个3D版,贪吃蛇的形象变得更像现实中的蛇。预装在诺基亚5230、6300等手机上,支持蓝牙对战·SnakesSubsonic–这是Snakes的续集,在第二代N-Gage平台推出。有不少人认为初版贪吃蛇才是最经典的贪吃蛇,Taneli自己也更偏爱初版贪吃蛇。尽管他现在的工作已经不需要编程,但他还是自学了Python编程语言,用来练手的项目就是复刻初版贪吃蛇。现在甚至可以在Taneli的个人网站上下载到复刻的初版贪吃蛇,画面和规则忠于初版设定,适用于所有S60V3机型。Taneli现在还在考虑是不是让贪吃蛇支持触摸功能以适应流行的触屏手机。1.3本文的研究内容及组织结构1.3.1本文的研究内容本游戏设计是一款以FPGA实验板为控制端,显示器为终端的贪吃蛇游戏是基于DE2实验板,用QuartusII自带的nios核做一个32位的CPU,载入程序后就可以通过DE2板上的4个按键和显示器来玩贪吃蛇的游戏了。同时在实验板的LCD上显示玩家所得的分数。由于使用的是VGA格式传送图象信号,所以显示器要求支持VGA格式。1.3.2本文的组织结构论文共分六章,对于基于VHDL的贪吃蛇游戏总体设计以及测试结果进行详细阐述。各章内容安排如下:第一章是本文的引言,主要阐述课题的研究意义和国内外研究的现状,提出了本文研究的主要内容。第二章介绍了基于VHDL的贪吃蛇的构成,给出了基于VHDL的贪吃蛇的结构框图。第三章介绍了基于VHDL的贪吃蛇游戏硬件电路的设计,包括微处理器模块、电源模块、键盘模块以及液晶显示模块,详细的介绍了这4个模块的工作原理。第四章根据游戏所提出的功能要求,完成基于VHDL的贪吃蛇游戏的软件设计。第五章将基于VHDL的贪吃蛇游戏进行测试,从设计的4个模块到整个游戏软件的测试,从而验证该游戏的可行性。第六章作为全文的总结,阐述本文所完成的成果,并对游戏未来的改进进行展望。第二章基于VHDL的贪吃蛇游戏总体设计总体设计2.1基于VHDL的贪吃蛇游戏设计功能要求(1)蛇撞“墙”、边或者游戏时间到,则游戏结束。(2)食物出现的地方是随机的,在某个地点出现的时间是蛇走15步的时间,如果15步之内没有被吃掉,它就会在其它地方随机出现;

(3)用数码管显示得分情况和游戏的剩余时间(时间满为0~59共60秒),每吃掉一个食物就加一分。

2.2基于VHDL的贪吃蛇游戏设计框图方向控制模块方向控制模块时钟模块时钟模块初始设置模块贪吃蛇程序控制模块初始设置模块贪吃蛇程序控制模块计时,计分模块计时,计分模块贪吃蛇程序控制模块贪吃蛇程序控制模块显示模块显示模块基于VHDL的贪吃蛇游戏通过主控制器模块控制和协调各部分模块工作,电源模块为其提供所需的稳定电源。按键模块用于控制游戏的开始与结束以及控制贪吃蛇的移动方向。贪吃蛇游戏的所有状态都可以在显示模块中显示。图2.1为基于VHDL的贪吃蛇游戏结构框图。第三章基于VHDL的贪吃蛇游戏硬件设计3.1微处理器模块在本文设计的游戏中,无论是输出信号,还是游戏控制处理都需要依靠为微处理器来完成,所以微处理器的选择对于本设计还是很重要的。3.2电源模块3.3按键模块通过按键↑,↓,←,→四个方向键来控制蛇的移动方向3.4显示模块扫描显示时每来一个时钟就对整个8*8点阵全部扫描一次,由于点阵上的点亮的条件是行为高电平‘1’,列为低电平‘0’时,则对应的点就被点亮3.5元器件和管脚已用元器件:系统时钟CLK50MHZ蜂鸣器BEEP拨码开关BTN1,BTN2,BTN3,BTN4数码管控制选通CAT0—CAT6点阵行显示ROW[0]—ROW[7]点阵列显示COL[0]—COL[7]数码管显示AA,AB,AC,AD,AE,AF,AG第四章基于VHDL的贪吃蛇游戏软件设计4.1基于VHDL的贪吃蛇游戏软件程序设计LIBRARY

IEEE;

USE

IEEE.STD_LOGIC_1164.ALL;

USE

IEEE.STD_LOGIC_ARITH.ALL;

USE

IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY

tanchishe

IS

PORT(

CLK:IN

STD_LOGIC;

RESET:IN

STD_LOGIC;

MUSIC:OUT

STD_LOGIC

ROW:OUT

STD_LOGIC_VECTOR(7

DOWNTO

0);

COL:OUT

STD_LOGIC_VECTOR(7

DOWNTO

0);

LIGHT:OUT

STD_LOGIC_VECTOR(6

DOWNTO

0);

LIGHT_EN:OUT

STD_LOGIC_VECTOR(5

DOWNTO

0);

DIRECTION:IN

STD_LOGIC_VECTOR(3

DOWNTO

0);

);

END

tanchishe;

ARCHITECTURE

MLD

OF

tanchishe

IS

SIGNAL

CLK1,CLK_6K,CLK_1M,CLK_10:STD_LOGIC;

--1hz,6khz,1mhz,10hz时钟信号

SIGNAL

RESTART:STD_LOGIC;

--控制蛇死亡状态变量

SIGNAL

MUSIC_EN:STD_LOGIC;

--音乐使能端

SIGNAL

PAT,PAT1,PAT2,load:STD_LOGIC;

SIGNAL

NUM:INTEGER

RANGE

0

TO

12;

--显示分频参数

SIGNAL

T_HIGH:INTEGER

RANGE

0

TO

5;

--倒计时高位

SIGNAL

T_LOW:INTEGER

RANGE

0

TO

9;

--倒计时低位

SIGNAL

T_MOUTH:INTEGER

RANGE

0

TO

10;

--食物放置倒计时

SIGNAL

SCORE,STATE:INTEGER

RANGE

0

TO10;

--比分

SIGNAL

TURN:INTEGER

RANGE

0

TO

3;

--方向控制

SIGNAL

COUNT:INTEGER

RANGE

0

TO

50000000;

--1hz分频参数

SIGNAL

COUNT1:INTEGER

RANGE

0

TO

8333;

--6khz分频参数

SIGNAL

COUNT_1M:INTEGER

RANGE

0

TO

50;

--1mhz分频参数

SIGNAL

COUNT_10:INTEGER

RANGE

0

TO

5000000;

--10hz分频参数

SIGNAL

COUNTMU:

INTEGER

RANGE

0

TO

1300;

--代表不同音调的频率计数值

SIGNAL

p_1:INTEGER

RANGE

0

TO

1300;

SIGNAL

COUNTER:INTEGER

RANGE

0

TO

52;

--播放的音符

TYPE

DIAN

IS

ARRAY(INTEGER

RANGE

<>)

OF

INTEGER

RANGE

0

TO

7;

SIGNAL

SX,SY:DIAN(6

DOWNTO

0);

--蛇坐标

CONSTANT

WX:DIAN(3

DOWNTO

0):=(5,5,5,5);

--墙的横坐标

CONSTANT

WY:DIAN(3

DOWNTO

0):=(5,4,3,2);

--墙的纵坐标

TYPE

FIGURE

IS

ARRAY(INTEGER

RANGE

<>)

OF

INTEGER

RANGE

0

TO

9;

SIGNAL

SHOW:FIGURE(9

DOWNTO

0);

SIGNAL

TX,TY,TXT,TYT:INTEGER

RANGE

0

TO

7;

--食物坐标

CONSTANT

MID_1:INTEGER:=954;CONSTANT

MID_2:INTEGER:=850;

--分别代表中音各个音符

CONSTANT

MID_3:INTEGER:=757;CONSTANT

MID_6:INTEGER:=568;

CONSTANT

MID_5:INTEGER:=638;CONSTANT

MID_4:INTEGER:=715;

CONSTANT

STOP:

INTEGER:=0;

--节拍

BEGIN

p1:PROCESS(CLK)

--分频部分

BEGIN

IF

CLK'EVENT

AND

CLK='1'

THEN

COUNT<=COUNT+1;

COUNT1<=COUNT1+1;

COUNT_1M<=COUNT_1M+1;

COUNT_10<=COUNT_10+1;

IF

COUNT<=24999999THEN

--1HZ分频

CLK1<='1';

ELSIF

COUNT>24999999

AND

COUNT<=49999999

THEN

CLK1<='0';

ELSIF

COUNT=50000000THEN

COUNT<=0;

END

IF;

IF

COUNT1<=4166

THEN

--6KHZ分频

CLK_6K<='1';

ELSIF

COUNT1>4166

AND

COUNT1<=8332

THEN

CLK_6K<='0';

ELSIF

COUNT1=5000

THEN

COUNT1<=0;

END

IF;

IF

COUNT_1M<=24

THEN

--1MHZ分频

CLK_1M<='1';

ELSIF

COUNT_1M>24

AND

COUNT_1M<=49

THEN

CLK_1M<='0';

ELSIF

COUNT_1M=50

THEN

COUNT_1M<=0;

END

IF;

IF

COUNT_10<=2499999

THEN

--10HZ分频

CLK_10<='1';

ELSIF

COUNT_10>2499999

AND

COUNT_10<=4999999

THEN

CLK_10<='0';

ELSIF

COUNT_10=5000000

THEN

COUNT_10<=0;

END

IF;

END

IF;

END

PROCESS;

p2:PROCESS(CLK,RESET)

--控制部分

BEGIN

IF

RESET='1'

THEN

--复位后,蛇转到死亡状态,初始化鼠坐标,音乐使能为0

RESTART<='1';

TX<=4;TY<=0;

MUSIC_EN<='0';

ELSIF

CLK'EVENT

AND

CLK='1'

THEN

IF

SCORE>=3

THEN

--当比分为3时,音乐使能为1

MUSIC_EN<='1';

ELSIF

T_LOW=9

AND

T_HIGH=5

THEN

--当倒计时为59秒时,蛇转到运行状态

RESTART<='0';

ELSIF

T_HIGH=0

AND

T_LOW=0

THEN

--倒计时时间到,蛇转到死亡状态

RESTART<='1';

ELSIF

SX(0)=WX(0)

AND

(SY(0)=WY(0)

OR

SY(0)=WY(1)

OR

SY(0)=WY(2)

OR

SY(0)=WY(3))THEN

RESTART<='1';

--蛇撞墙后,转到死亡状态

END

IF;

IF

RESTART='1'

OR

T_MOUTH=0

OR

(SX(0)=TX

AND

SY(0)=TY)

THEN

--随机食物的设置

TXT<=TX;TYT<=TY;

IF

TY=5

OR

TY=6

OR

TY=7

THEN

TY<=TY-2;

ELSE

TY<=TY+2;

END

IF;

--食物不与墙重叠

IF

(TX=4

OR

TX=7)

THEN

TX<=0;

ELSE

TX<=TX+1;

END

IF;

END

IF;

END

IF;

END

PROCESS;

p3:PROCESS(CLK1,RESTART)

--控制蛇运行及倒计时部分

BEGIN

IF

RESTART='1'

THEN

--当蛇转为死亡状态,游戏重新开始,食物放置时间为10S,

T_MOUTH<=10;

--比分为0分,倒计时为59S,蛇位置初始化

SCORE<=0;

T_HIGH<=5;T_LOW<=9;

SX<=(0,1,2,3,3,3,3);SY<=(0,0,0,0,0,0,0);

ELSIF

CLK1'EVENT

AND

CLK1='1'

THEN

IF

(T_MOUTH=0)

THEN

--食物放置时间倒计时,15秒后重置

T_MOUTH<=10;

ELSE

T_MOUTH<=T_MOUTH-1;

END

IF;

IF

T_LOW=0

AND

T_HIGH/=0

THEN

--总时间倒计时

T_LOW<=9;

T_HIGH<=T_HIGH-1;

ELSE

T_LOW<=T_LOW-1;

END

IF;

IF

(SX(0)=TXT

AND

SY(0)=TYT)

THEN

--当蛇吃食物后,比分加一,鼠重置

SCORE<=SCORE+1;

T_MOUTH<=10;

END

IF;

IF

(DIRECTION="1000"

AND

TURN/=2)THEN

TURN<=0;

--C当输入方向上且上状态不为下时,

输入向上信号生效

ELSIF

(DIRECTION="0100"

AND

TURN/=3)

THEN

TURN<=1;

--C当输入方向右且上状态不为左时,

输入向右信号生效

ELSIF

(DIRECTION="0010"

AND

TURN/=0)

THEN

TURN<=2;

--C当输入方向下且上状态不为上时,

输入向下信号生效

ELSIF

(DIRECTION="0001"

AND

TURN/=1)

THEN

TURN<=3;

--C当输入方向左且上状态不为右时,

输入向左信号生效

END

IF;

CASE

TURN

IS

WHEN

0

=>

IF

(SY(0)=7)

THEN

T_HIGH<=0;T_LOW<=0;--当蛇向下运动时向上不可用

ELSE

SY(0)<=SY(0)+1;

END

IF;IF(CLK_6K'EVENT

AND

CLK_6K='1')THEN

COL<="11111111";

ROW<="00000000";

IF(NUM=12)THEN

--分频显示参数

NUM<=0;

ELSE

NUM<=NUM+1;

END

IF;

CASE

NUM

IS

WHEN

0|1|2|3|4|5|6|7=>

--扫描蛇坐标

COL(SX(NUM))<='0';ROW(SY(NUM))<='1';

WHEN

8|9|10|11=>

--扫描墙坐标

COL(WX(NUM-8))<='0';ROW(WY(NUM-8))<='1';

WHEN

12=>

--扫描鼠坐标

COL(TX)<='0';ROW(TY)<='1';

WHEN

OTHERS=>

COL<="11111111";ROW<="00000000";

END

CASE;

END

IF;

END

PROCESS;

P5:PROCESS(CLK_6K)

--数码管显示模块

BEGIN

IF

CLK_6K'EVENT

AND

CLK_6K='1'

THEN

IF(STATE=2)THEN

--分频显示参数

STATE<=0;

ELSE

STATE<=STATE+1;

END

IF;

CASE

STATE

IS

--数码管分次扫描

WHEN

2=>LIGHT_EN<="011111";

WHEN

1=>LIGHT_EN<="110111";

WHEN

0=>LIGHT_EN<="111011";

WHEN

OTHERS=>LIGHT_EN<="111111";

END

CASE;

SHOW(0)<=T_LOW;SHOW(1)<=T_HIGH;SHOW(2)<=SCORE;

CASE

SHOW(STATE)

IS

--数码管数字显示设置

WHEN

9=>LIGHT<="1110011";

WHEN

8=>LIGHT<="1111111";

WHEN

7=>LIGHT<="1110000";

WHEN

6=>LIGHT<="0011111";

WHEN

5=>LIGHT<="1011011";

WHEN

4=>LIGHT<="0110011";

WHEN

3=>LIGHT<="1111001";

WHEN

2=>LIGHT<="1101101";

WHEN

1=>LIGHT<="0110000";

WHEN

0=>LIGHT<="1111110";

WHEN

OTHERS=>LIGHT<="0000000";

END

CASE;

END

IF;

END

PROCESS;

P6:PROCESS(CLK_10)

—音乐模块

BEGIN

IF

CLK_10'EVENT

AND

CLK_10='1'

THEN

--以10Hz频率变换音乐的音符

IF

MUSIC_EN='1'

THEN

IF

COUNTER=52

THEN

COUNTER<=0;

ELSE

COUNTER<=COUNTER+1;

END

IF;

ELSE

COUNTER<=0;

END

IF;

END

IF;

END

PROCESS;

P7:PROCESS(COUNTER)

BEGIN

CASE

COUNTER

IS

--乐谱内容,对应乐符的变化情况

WHEN

00=>COUNTMU<=STOP;

WHEN

01=>COUNTMU<=MID_1;WHEN

02=>COUNTMU<=MID_1;

WHEN

03=>COUNTMU<=MID_1;WHEN

04=>COUNTMU<=MID_1;

WHEN

05=>COUNTMU<=MID_5;WHEN

06=>COUNTMU<=MID_5;

WHEN

07=>COUNTMU<=MID_5;WHEN

08=>COUNTMU<=MID_5;

WHEN

09=>COUNTMU<=MID_6;WHEN

10=>COUNTMU<=MID_6;

WHEN

11=>COUNTMU<=MID_6;WHEN

12=>COUNTMU<=MID_6;

WHEN

13=>COUNTMU<=MID_5;WHEN

14=>COUNTMU<=MID_5;

WHEN

15=>COUNTMU<=STOP;

WHEN

16=>COUNTMU<=STOP;

WHEN

17=>COUNTMU<=MID_4;WHEN

18=>COUNTMU<=MID_4;

WHEN

19=>COUNTMU<=MID_4;WHEN

20=>COUNTMU<=MID_4;

WHEN

21=>COUNTMU<=MID_3;WHEN

22=>COUNTMU<=MID_3;

WHEN

23=>COUNTMU<=MID_3;WHEN

24=>COUNTMU<=MID_3;

WHEN

25=>COUNTMU<=MID_2;WHEN

26=>COUNTMU<=MID_2;

WHEN

27=>COUNTMU<=MID_2;WHEN

28=>COUNTMU<=MID_2;

WHEN

29=>COUNTMU<=MID_1;WHEN

30=>COUNTMU<=MID_1;

WHEN

31=>COUNTMU<=STOP;

WHEN

32=>COUNTMU<=MID_5;

WHEN

33=>COUNTMU<=MID_5;WHEN

34=>COUNTMU<=MID_5;

WHEN

35=>COUNTMU<=MID_5;WHEN

36=>COUNTMU<=MID_4;

WHEN

37=>COUNTMU<=MID_4;WHEN

38=>COUNTMU<=MID_4;

WHEN

39=>COUNTMU<=MID_4;WHEN

40=>COUNTMU<=MID_3;

WHEN

41=>COUNTMU<=MID_3;WHEN

42=>COUNTMU<=MID_3;

WHEN

43=>COUNTMU<=MID_3;WHEN

44=>COUNTMU<=MID_2;

WHEN

45=>COUNTMU<=MID_2;WHEN

46=>COUNTMU<=MID_5;

WHEN

47=>COUNTMU<=MID_5;WHEN

48=>COUNTMU<=MID_4;

WHEN

49=>COUNTMU<=MID_4;WHEN

50=>COUNTMU<=MID_3;

WHEN

51=>COUNTMU<=MID_3;WHEN

52=>COUNTMU<=MID_2;

WHEN

OTHERS=>COUNTMU<=STOP;

END

CASE;

END

PROCESS;

p8:PROCESS(CLK_1M,load)

--音乐模块,音乐控制

BEGIN

IF

CLK_1M'EVENT

AND

CLK_1M='1'

THEN

IF

load='1'

THEN

p_1<=COUNTMU;

ELSE

p_1<=p_1-1;

END

IF;

END

IF;

END

PROCESS;

P9:PROCESS(p_1)

--音乐模块,节拍控制

BEGIN

IF

p_1=0

THEN

PAT<='1';

ELSE

PAT<='0';

END

IF;

load<=PAT;

END

PROCESS;

P10:PROCESS(CLK_1M)

BEGIN

IF

CLK_1M'EVENT

AND

CLK_1M='1'

THEN

PAT1<=PAT;

END

IF;

END/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论