verilog乒乓球大作业仿真成功Word格式.docx
- 文档编号:16854013
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:18
- 大小:648.89KB
verilog乒乓球大作业仿真成功Word格式.docx
《verilog乒乓球大作业仿真成功Word格式.docx》由会员分享,可在线阅读,更多相关《verilog乒乓球大作业仿真成功Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
开始判断乙方是否在0.5S内接球
S4
乙方发球
S5
球从乙方向甲方左移,若此时甲方接球就给乙方加一分,并将球权给乙方
S6
开始判断甲方是否在0.5S内接球
S7
用于接球后判断发球
程序还加入了蜂鸣、用数码管显示分数和发球权等功能。
二结构框图
1状态转移图
K_a=1
led8s==8'
b01000000
b00000010
K_b=1
2程序流程图
3系统模块
三系统程序
modulepingpangok(state,clk2hz,rst,k_a,k_b,led8s,led7s1,led7s2,led7s3,led7s4,led7s5,speaker);
//clk2hz指一个2Hz的时钟输入,rst异步复位,k_a和k_b是比赛双方按键,speaker是蜂鸣器
//led8s是一排8个发光二极管代表球场,led7s1~4是4个显示分数的数码管,led7s5是显示发球权的数码管
inputclk2hz,rst,k_a,k_b;
output[7:
0]led8s;
output[6:
0]led7s1,led7s2,led7s3,led7s4,led7s5;
outputspeaker;
output[2:
0]state;
reg[7:
reg[6:
reg[3:
0]score_a,score_b;
reg[2:
regspeaker;
parameters0=3'
b000,//复位状态,也是判断发球权的状态;
s1=3'
b001,//甲方发球;
s2=3'
b010,//球从甲方向乙方右移,若此时乙方接球就给甲方加一分,并将球权给甲方;
s3=3'
b011,//开始判断乙方是否在0.5S内接球;
s4=3'
b100,//乙方发球;
s5=3'
b101,//球从乙方向甲方左移,若此时甲方接球就给乙方加一分,并将球权给乙方;
s6=3'
b110;
//开始判断甲方是否在0.5S内接球;
s7=3'
b111;
//用于判断接球后发球;
//----------------游戏逻辑控制核心----------------------------------------------------------------------------
always@(posedgeclk2hz)begin
case(state)
s7:
begin
if(k_a)
state<
=s1;
//甲发球;
elseif(k_b)
=s4;
//乙发球;
elseif(speaker)
speaker=1'
b0;
else
end
s0:
led7s5<
=7'
b0111111;
//第五个数码管显示数字0,表示发球权可以开始判断了;
led8s<
b00000000;
score_a<
=0;
score_b<
//给甲乙双方的分数复位;
if(k_a)
begin
speaker<
=1'
b1;
//因为按键k_a要持续按着保持高电位'
1'
,蜂鸣器鸣叫是提示可以松手了;
state<
=s7;
end
elseif(k_b)
begin
speaker<
state<
end
state<
=s0;
s1:
b0000110;
//第五个数码管显示数字1,表示发球权现在是甲方的;
if(led8s==8'
b00000000)
led8s<
=8'
b10000000;
//点亮的灯出现在最右边,即甲方发球;
=s2;
if(speaker)
speaker<
//将刚才鸣叫的蜂鸣器关闭;
s2:
b00000010)
=led8s>
>
1;
=s3;
//进入判断乙方接球的状态;
else
if(k_b)
score_a<
=score_a+1;
//若在此期间乙方抢先按键,就判断乙方输,给甲方加1分,并让蜂鸣器鸣叫;
s3:
//乙方接球成功,并进入乙方发球的s7状态;
//乙方接球不成功,则甲方加一分,并进入甲方发球的s7状态,蜂鸣器鸣叫;
s4:
b1011011;
//第五个数码管显示数字2,表示发球权现在是乙方的;
b00000001;
//点亮的灯出现在最左边,即乙方发球;
=s5;
s5:
b01000000)
=led8s<
<
=s6;
//进入判断甲方接球的状态;
score_b<
=score_b+1;
//若在此期间甲方抢先按键,就判断甲方输,给乙方加1分,并让蜂鸣器鸣叫;
s6:
//甲方接球成功,并进入甲方发球的s7状态;
//甲方接球不成功,则乙方加一分,并进入乙方发球的s7状态,蜂鸣器鸣叫;
end
default:
state<
endcase
//----------甲乙双方的分数各用2个数码管显示-----------------------------------------------------------------
if(score_a==11&
score_b==11)
begin
score_a<
score_b<
//如果任一方得11分,一局结束,计分清零;
end
case(score_a)
8'
b0000:
led7s1<
led7s2<
//数码管显示0分;
b0001:
//数码管显示1分;
b0010:
//数码管显示2分;
b0011:
b1001111;
//数码管显示3分;
b0100:
b1100110;
//数码管显示4分;
b0101:
b1101101;
//数码管显示5分;
b0110:
b1111101;
//数码管显示6分;
b0111:
b0000111;
//数码管显示7分;
b1000:
b1111111;
//数码管显示8分;
b1001:
b1101111;
//数码管显示9分;
b1010:
//数码管显示10分;
b1011:
//数码管显示11分;
case(score_b)
led7s3<
led7s4<
end
endmodule
四仿真结果
功能仿真是最基本的仿真验证,它只能仿真设计中的逻辑功能。
通过功能仿真,可以验证整个系统的逻辑功能是否正确。
用户可以通过观看仿真的波形来对系统的逻辑功能进行分析,并可以以此为依据,对设计进行必要的修改和完善。
由于本系统的状态情况较为复杂,下面就几种典型的情况进行系统的综合和仿真:
A发球B未接球
A发球B接球
A发球B接球B再发球
B发球A未接球
B发球A接球
B发球A接球B再发球
五总结
通过这次大作业的练习,我对EDA有了更加深入的理解,对用Verilog语言设计程序不再感到陌生。
我对设计要求进行了仔细的分析,对设计算法不断地进行优化,对程序反复地进行调试,这在很大程度上锻炼了我解决问题的能力。
另外,通过这次课程设计我的Verilog编程能力得到了很大的提高,同时熟练掌握了Quartus这个EDA软件。
总之,这次课程设计让我受益匪浅,最后非常感谢宋万杰老师平时给予我们的帮助和指导。
给宋老师的意见:
希望宋老师以后能将实验课平均分配给每一周,一次90分钟就好,这样我们可以及时复习每节课所学习的知识,还有助于我们消化吸收所学的知识。
谢谢。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- verilog 乒乓球 作业 仿真 成功