设计步骤和调试过程
1 、模块设计和相应模块代码
( 1 ) 发球选择模块 的设计
游戏开始时,必须先决定发球权在哪一方。同时,在游戏进行的过程中,必须能够正确交换甲乙双方发球权。相应的代码如下:
module Permissions(clk,res,in1,in2,out1,out2,en_jia,en_yi);
input clk,res,in1,in2;
output out1,out2,en_jia,en_yi;
reg out1,out2,en_jia,en_yi;
wire w1,w2,a,b;
or u2(w1,in1,in2);
add4 u1(.res(res),.c(w1),.cnt(w2));
select u3(.cnt(w2),.a(a),.b(b));
parameter[1:0] s0=1’b00,s1=1’b01;
reg[1:0] current_state,next_current;
always@(posedge clk or negedge res)
begin
if(!res)
current_state<=s0; // 复位
else
current_state<=next_current;
end
always@(current_state or next_current)
begin
case(current_state)
s0:
begin
out1<=1;
en_jia<=1;
en_yi<=0;
out2<=0;
if(a1)
next_current<=s1;
else
next_current<=s0;
end
s1:
begin
out1<=0;
en_jia<=0;
en_yi<=1;
out2<=1;
if(b1)
next_current<=s0;
else
next_current<=s1;
end
endcase
end
endmodule
( 2 )状态机编程实现
状态机设置了 7 个状态,它们代表的具体数值依次是 0 到 6 。在波形模拟图中是用数值来表示状态的。
在整个程序中,状态机起的是中央控制器的作用,由它控制的信号来影响整个程序中的其他相关部分,如记分部分,发光二极管部分。乒乓球游戏机中有两个计数器,分别记忆甲和乙的得分,用发光二极管的轮流发光表示球的移动轨迹。状态机的进程如下 :
module state_machine (clk,res,key1,key2 ,led,jia,yi,en_jia,
en_yi,win,t1 , t2);
input clk,res,key1,key2,en_jia,en_yi,win,t1;
output jia,yi,t2;
reg
Verilog语言乒乓球机7段译码器(二)
最新推荐文章于 2024-10-12 09:32:17 发布