版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新闻发稿平台怎么选五步决策法
- 《工业固体废物资源综合利用评价技术规范》
- 2025年河北省衡水市景县数学四年级下学期期末考试模拟试题(含答案解析)
- AI办公助手进阶实战指南:从手动指令到自动化工作流
- 600道试题及答案:为学习助力的资源
- 子痫知识测试试题及答案解析
- 管理学期末试题及详细答案
- 2026年广西初中学业水平考试模拟卷数学附答案
- 保健医生笔试试题及答案
- 遴选改革知识测试题目及答案解析
- 教师节表彰大会主持稿范例
- 2025-2026学年湖北省武汉市武昌区人教版三年级下册期末考试数学试题 含答案
- 云南省2026年普通高等学校面向中等职业学校毕业生招生考试答案
- 六年级上册人教版道德与法治学科教学计划
- 山东省2025山东中国海洋大学财务处会计人员招聘5人笔试历年参考题库典型考点附带答案详解
- 人保培训制度
- 山河童声二声部合唱简谱
- GB/Z 36271.3-2026交流1 kV及直流1.5 kV以上电力设施第3部分:高压设施的设计和安装原则高压设施的安全
- 工业管道年度检查报告(2026新标准)
- AI驱动下个性化学习路径的自适应生成与效果评估
- 2025年教科版三年级科学上册第一单元《天气》知识清单
评论
0/150
提交评论