课程设计拔河游戏机文档格式.docx
《课程设计拔河游戏机文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计拔河游戏机文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
![课程设计拔河游戏机文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/29/efd6dd5b-b8bb-47a6-8e87-1ad14a7156a2/efd6dd5b-b8bb-47a6-8e87-1ad14a7156a21.gif)
1、总体设计电路
总体电路图和仿真图如图(25)所示,由仿真图可知,此电路设计无误,可以实现按动A、B两个按键时,分别产生两个脉冲信号,经整形后分别加到可逆计数器上,可逆计数器输出的代码经译码器译码后驱动电平指示灯点亮并产生位移,当亮点移到任何一方终端后,由于控制电路的作用,使这一状态被锁定,双方按键产生的输入脉冲不起作用。
如按动复位键C,亮点又回到中点位置,再次按C键则比赛又可重新开始。
图2.电路图
2、模块设计和相应模块程序
1.顶层文件
libraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
entitybaheis
port(
player1,player2:
instd_logic;
--玩家1,2输入
clk_in:
--clk_in(1MHZ)
reset:
--重置键
row:
outstd_logic_vector(7downto0);
col:
led:
outstd_logic_vector(7downto0);
--绳子
cats:
outstd_logic_vector(6downto0);
--比分
q:
outstd_logic_vector(5downto0);
--数码管控制
mus:
outstd_logic);
--蜂鸣输出
endbahe;
architecturebody_baheofbaheis
--分频模块
componentdivision
port(
clk_in:
--1MHZ输入
clk_100,clk_5,clk_1:
--100HZ,5Hz,1HZ
endcomponent;
--计数模块
componentcount
port(
clk_1:
--1HZ输入
sw:
--状态开关
player1,player2:
--选手输入
sum1,sum2:
outstd_logic_vector(4downto0));
--计数结果输出
--比较模块
componentcmp
clk_100:
--100hz
--1hz
outstd_logic;
--状态开关输出
reset:
--重置
start:
--开始
instd_logic_vector(4downto0);
--计数结果输入
music_begin:
--音乐
record1,record2:
outstd_logic_vector(1downto0);
--比分输出
lights:
outstd_logic_vector(2downto0));
--拔河绳子显示
endcomponent;
--音乐模块
componentmusic
--重置
clk:
--1MHz
clk_5:
--5hz
music_begin:
--音乐开始
mus:
--译码模块
componentdecode
--1mHZ
instd_logic_vector(1downto0);
--比分输入
instd_logic_vector(2downto0);
--拔河绳子输入
led:
--输出到LED
q:
bufferstd_logic_vector(5downto0);
cats:
outstd_logic_vector(6downto0)--数码管显示比分
);
--倒计时模块
componentdaojishi
clk_in,clk_1,reset:
row:
col:
outstd_logic
--分频器输出
signalclk_100,clk_5,clk_1:
std_logic;
--时钟信号
--计数器输出
signalsum1,sum2:
std_logic_vector(4downto0);
--计数结果
--比较器输出
signalsw:
--状态开关
signalrecord1,record2:
std_logic_vector(1downto0);
signallights:
std_logic_vector(2downto0);
--绳子
signalmusic_begin:
--解码器输出
signaltmp_led:
std_logic_vector(7downto0);
--LED显示
signaltmp_q:
std_logic_vector(5downto0);
signaltmp_cat:
std_logic_vector(6downto0);
--数码管显示比分
--倒计时器输出
signaltmp_start:
begin
cats<
=tmp_cat;
q<
=tmp_q;
led<
=tmp_led;
div:
divisionportmap(clk_in=>
clk_in,clk_100=>
clk_100,clk_5=>
clk_5,clk_1=>
clk_1);
cnt:
countportmap(
clk_1=>
clk_1,sw=>
sw,player1=>
player1,player2=>
player2,
sum1=>
sum1,sum2=>
sum2);
com:
cmpportmap(
clk_100=>
clk_100,clk_1=>
sw,reset=>
reset,
start=>
tmp_start,sum1=>
sum2,music_begin=>
music_begin,
record1=>
record1,record2=>
record2,lights=>
lights);
dec:
decodeportmap(
clk_in=>
clk_in,record1=>
record2,
lights=>
lights,led=>
tmp_led,q=>
tmp_q,cats=>
tmp_cat);
mu:
musicportmap(
reset=>
reset,clk=>
clk_in,clk_5=>
clk_5,
music_begin=>
music_begin,mus=>
mus);
dao:
daojishiportmap(
clk_in,clk_1=>
clk_1,reset=>
tmp_start,col=>
col,row=>
row);
endbody_bahe;
2.CMP模块
entitycmpis
port(clk_100:
--100HZ输入
--1HZ输入
--重置
--开始
--计数输入
--比分输出
--音乐开始
--状态输出
--绳子状态
endcmp;
architecturebody_cmpofcmpis
signaltmp_record1:
--比分
signaltmp_record2:
signaltmp:
--绳子状态
signaltmp_sta:
--状态
signals1,s2:
--计数
begin
record1<
=tmp_record1;
record2<
=tmp_record2;
lights<
=tmp;
sw<
=tmp_sta;
process(clk_100)--判断比赛状态
begin
if(start='
1'
)then
if(clk_100'
eventandclk_100='
tmp_sta<
='
;
endif;
endif;
if(clk_100'
)then--任意比分到3,比赛结束,开始播放音乐
if(tmp_record1="
11"
ortmp_record2="
0'
music_begin<
if(tmp="
001"
ortmp="
111"
)then--绳子到头,进入等待状态
if(reset='
)then--复位,状态归零
endprocess;
s1<
=sum1;
s2<
=sum2;
process(clk_1,reset)--控制绳子移位
begin
if(reset='
)then
tmp<
="
100"
--绳子初始状态为100
tmp_record1<
00"
tmp_record2<
else
if(clk_1'
eventandclk_1='
if(tmp_sta='
if(s1>
s2)thentmp<
=tmp-'
--绳子左移
elsif(s1=s2)thentmp<
--绳子保持原状
elsetmp<
=tmp+'
--绳子右移
endif;
else
if(tmp="
)then--绳子到左尽头,左计分器加1
tmp_record1<
=tmp_record1+'
tmp<
elsif(tmp="
)then--绳子到右尽头,右记分器加1,
tmp_record2<
=tmp_record2+'
endif;
endbody_cmp;
3.COUT模块
entitycountis
libraryIEEE;
port(clk_1:
--1HZ输入
--状态判断输入
--选手输入
--计数输出
endcount;
architecturebody_countofcountis
signalp1,p2:
--计数输出
sum1<
=p1;
sum2<
=p2;
process(player1,player2,sw,clk_1)
if(sw='
)then--处于比赛状态
if(clk_1='
if(player1'
eventandplayer1='
p1<
=p1+'
if(player2'
eventandplayer2='
p2<
=p2+'
else
p1<
00000"
--比赛状态结束
elsep1<
p2<
endbody_count;
4.daojishi模块
entitydaojishiis
port(clk_1,clk_in,reset:
instd_logic;
col:
start:
outstd_logic);
enddaojishi;
architecturebody_daojishiofdaojishiis
typestateis(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10);
signalpresent_state:
state:
=s10;
signalnum:
std_logic_vector(2downto0):
000"
p3:
process(clk_in)
ifclk_in'
eventandclk_in='
then
ifnum="
101"
thennum<
elsenum<
=num+1;
casepresent_stateis
whens9=>
casenumis
when"
=>
col<
"
row<
01110100"
010"
01010100"
011"
01111100"
whenothers=>
00000000"
endcase;
whens8=>
whens7=>
01000000"
whens6=>
01011100"
whens5=>
whens4=>
01110000"
00010000"
whens3=>