if(speaker) speaker<=1'b0;//将刚才鸣叫的蜂鸣器关闭; end s2: begin if(led8s==8'b00000010) begin led8s<=led8s>>1; nextstate<=s3;//进入判断乙方接球的状态; end else begin led8s<=led8s>>1; nextstate<=s1; end if(k_b) begin score_a<=score_a+1; speaker<=1'b1;//若在此期间乙方抢先按键,就判断乙方输,给甲方加1分,并让蜂鸣器鸣叫; nextstate<=s1; led8s<=8'b00000000; end end s3: begin if(k_b) begin nextstate<=s4;//乙方接球成功,并进入乙方发球的s4状态; led8s<=8'b00000000; end else begin score_a<=score_a+1; speaker<=1'b1; nextstate<=s1;//乙方接球不成功,则甲方加一分,并进入甲方发球的s1状态,蜂鸣器鸣叫; led8s<=8'b00000000; end end s4: begin led7s5<=7'b1011011;//第五个数码管显示数字2,表示发球权现在是乙方的;
- 5 -
if(led8s==8'b00000000) led8s<=8'b00000001;//点亮的灯出现在最左边,即乙方发球; nextstate<=s5; if(speaker) speaker<=1'b0;//将刚才鸣叫的蜂鸣器关闭; end s5: begin if(led8s==8'b01000000) begin led8s<=led8s<<1; nextstate<=s6;//进入判断甲方接球的状态; end else begin led8s<=led8s<<1; nextstate<=s4; end if(k_a) begin score_b<=score_b+1; speaker<=1'b1;//若在此期间甲方抢先按键,就判断甲方输,给乙方加1分,并让蜂鸣器鸣叫; nextstate<=s4; led8s<=8'b00000000; end end s6: begin if(k_a) begin nextstate<=s1;//甲方接球成功,并进入甲方发球的s1状态; led8s<=8'b00000000; end else begin score_b<=score_b+1; speaker<=1'b1; nextstate<=s4;//甲方接球不成功,则乙方加一分,并进入乙方发球的s4状态,蜂鸣器鸣叫; led8s<=8'b00000000; end end
- 6 -
default: nextstate<=s0; endcase
//----------甲乙双方的分数各用2个数码管显示----------------------------------------------------------------- if(score_a==11 & score_b==11) begin score_a<=0; score_b<=0;//如果任一方得11分,一局结束,计分清零; end case(score_a) 8'b0000: begin led7s1<=7'b0111111; led7s2<=7'b0111111;//数码管显示0分; end 8'b0001: begin led7s1<=7'b0111111; led7s2<=7'b0000110;//数码管显示1分; end 8'b0010: begin led7s1<=7'b0111111; led7s2<=7'b1011011;//数码管显示2分; end 8'b0011: begin led7s1<=7'b0111111; led7s2<=7'b1001111;//数码管显示3分; end 8'b0100: begin led7s1<=7'b0111111; led7s2<=7'b1100110;//数码管显示4分; end 8'b0101: begin led7s1<=7'b0111111; led7s2<=7'b1101101;//数码管显示5分; end 8'b0110: begin led7s1<=7'b0111111; led7s2<=7'b1111101;//数码管显示6分; end 8'b0111: begin led7s1<=7'b0111111; led7s2<=7'b0000111;//数码管显示7分; end
- 7 -
8'b1000: begin led7s1<=7'b0111111; led7s2<=7'b1111111;//数码管显示8分; end 8'b1001: begin led7s1<=7'b0111111; led7s2<=7'b1101111;//数码管显示9分; end 8'b1010: begin led7s1<=7'b0000110; led7s2<=7'b0111111;//数码管显示10分; end 8'b1011: begin led7s1<=7'b0000110; led7s2<=7'b0000110;//数码管显示11分; end default: begin led7s1<=7'b0111111; led7s2<=7'b0111111;//数码管显示0分; end endcase
case(score_b) 8'b0000: begin led7s3<=7'b0111111; led7s4<=7'b0111111;//数码管显示0分; end 8'b0001: begin led7s3<=7'b0111111; led7s4<=7'b0000110;//数码管显示1分; end 8'b0010: begin led7s3<=7'b0111111; led7s4<=7'b1011011;//数码管显示2分; end 8'b0011: begin led7s3<=7'b0111111; led7s4<=7'b1001111;//数码管显示3分; end 8'b0100: begin led7s3<=7'b0111111;
- 8 -
led7s4<=7'b1100110;//数码管显示4分; end 8'b0101: begin led7s3<=7'b0111111; led7s4<=7'b1101101;//数码管显示5分; end 8'b0110: begin led7s3<=7'b0111111; led7s4<=7'b1111101;//数码管显示6分; end 8'b0111: begin led7s3<=7'b0111111; led7s4<=7'b0000111;//数码管显示7分; end 8'b1000: begin led7s3<=7'b0111111; led7s4<=7'b1111111;//数码管显示8分; end 8'b1001: begin led7s3<=7'b0111111; led7s4<=7'b1101111;//数码管显示9分; end 8'b1010: begin led7s3<=7'b0000110; led7s4<=7'b0111111;//数码管显示10分; end 8'b1011: begin led7s3<=7'b0000110; led7s4<=7'b0000110;//数码管显示11分; end default: begin led7s3<=7'b0111111; led7s4<=7'b0111111;//数码管显示0分; end endcase end endmodule
4功能仿真
功能仿真是最基本的仿真验证,它只能仿真设计中的逻辑功能。通过功能仿真,可以验证
- 9 -