就是几个灯的状态转换,代码如下:
module lights(out,an,led,clk,rst_n);
input wire clk,rst_n;//时钟和重置键
output reg [5:0] led;//led灯显示接口
output reg [6:0] out;//数码管显示接口
output reg [3:0] an; //控制数码管开关
//============================================================
reg newclk;
reg [30:0] count2;
parameter s0=3'd0,//没有输出
s1=3'd1,//输出100001
s2=3'd2,//输出010010
s3=3'd3,//输出001100
s4=3'd4;//输出010010
reg [3:0] count; //计时用
reg [2:0] pstate,nstate; //原状态,现状态
//============================================================
//状态转换1(次态到现态转换的条件)
always @ (posedge newclk or negedge rst_n)
begin
if(!rst_n)
begin
pstate<=s0;
count<=0;
end
else
begin
if((pstate==s1)||(pstate==s3))
begin
count<=count+1;
if(count==8)
begin
pstate<=nstate;
count<=5;//当状态为s2和s4时要倒数4秒
end
end
else if(pstate==s2 || pstate==s4)
begin
count<=count+1;
if(count==8)
begin
pstate<=nstate;
count<=0;//当状态为s2和s4时要倒数9秒
end
end
else
pstate<=nstate;
end
end
//============================================================
//状态转换2 (现态的赋值)
always @ (pstate or rst_n)
begin
case(pstate)
s0: if(rst_n==1)
nstate=s1;
else
nstate=s0;
s1: nstate=s2;
s2: nstate=s3;
s3: nstate=s4;
s4: nstate=s1;
default:nstate=s0;
en