module traffic_light(ncr,cp,en,r1,r2,r3,l1,l2,l3);
input ncr,cp;
input [1:0]en;
output r1,r2,r3,l1,l2,l3;
reg r1,r2,r3,l1,l2,l3;
reg [1:0] current_state1,next_state1,current_state2,next_state2;
parameter normal=2'b00,stop=2'b01,left=2'b10,right=2'b11;
always
/*begin
r1=0;r2=0;r3=0;l1=0;l2=0;l3=0;
end*/
case(en)
normal:begin {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0}; end
stop:begin
always@(cp)
if(~ncr) {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0};
else if (cp)
{r1,r2,r3,l1,l2,l3}={1,1,1,1,1,1};
else {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0};
end
left:begin
always @(posedge cp)begin
if(~ncr) {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0};
s1=00;
else
current_state1=next_state1;
end
always@(current_state1)
begin
case(current_state1)
2’b00:{l1,l2,l3}={1,0,0};next_state1=2’b01;
2’b01:{l1,l2,l3}={1,1,0};next_state1=2’b10;
2’b10:{l1,l2,l3}={1,1,1};next_state1=2’b11;
2’b11: {l1,l2,l3}={0,0,0};next_state1=2’b00;
endcase
end
right:begin
always @(posedge cp)begin
if(~ncr) {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0};
s1=00;
else
current_state2=next_state2;
end
always@(current_state2)
begin
case(current_state2)
2’b00:{r1,r2,r3}={1,0,0};next_state2=2’b01;
2’b01:{r1,r2,r3}={1,1,0};next_state2=2’b10;
2’b10:{r1,r2,r3}={1,1,1};next_state2=2’b11;
2’b11: {r1,r2,r3}={0,0,0};next_state2=2’b00;
endcase
end
endmodule
呼如林
郎朗坤
慕虎7371278
随时随地看视频慕课网APP