|
module df(clk,reset,red1,green1,yellow1,red2,green2,yellow2); input clk,reset; output red1,green1,yellow1,red2,green2,yellow2; parameter std0=0,std1=1,std2=2,std3=3,std4=4,std5=5,std6=6,std7=7;//声明状态变量
reg[2:0]state,nxstate;//声明状态寄存器 reg red1,green1,yellow1,red2,green2,yellow2; always@(posedge clk or posedge reset)//时钟信号上跳沿或复位信号上跳沿触发工作 begin if(reset)//复位信号reset高电平有效 state=std0; else state=nxstate;//基于当前状态和输入,以及进入下一状态和输出 end always@(state) begin red1=1'b0;green1=1'b0;yellow1=1'b0;red2=1'b0;green2=1'b0;yellow2=1'b0;//定义输出变量初始值 case(state) std0:begin green1=1'b1; red2=1'b1; nxstate=std1; end std1:begin green1=1'b1; red2=1'b1; nxstate=std2; end std2:begin green1=1'b1; red2=1'b1; nxstate=std3; end /*当东西走向的绿灯亮时,南北走向的红灯亮,并且保持三个clk*/ std3:begin green1=1'b1; yellow1=1'b1; red2=1'b1; nxstate=std4; end /*当东西走向的绿黄灯亮时,南北走向的红灯亮,并且保持一个clk*/ std4:begin red1=1'b1; green2=1'b1; nxstate=std5; end std5:begin red1=1'b1; green2=1'b1; nxstate=std6; end std6:begin red1=1'b1; green2=1'b1; nxstate=std7; end /*当东西走向的红灯亮时,南北走向的绿灯亮,并且保持三个clk*/ std7:begin red1=1'b1; green2=1'b1; yellow2=1'b1; nxstate=std0;//又重新回到初始状态 end /*当东西走向的红灯亮时,南北走向的绿黄灯亮,并且保持一个clk*/ endcase
end endmodule
未命名 
|