有个做简易交通灯控制电路的代码,求教大神帮忙分模块和顶层
(1)由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄、左拐允许四盏信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外,左拐灯亮允许车辆向左拐弯。信号灯变换次序为:主支干道交替允许通行,主干道每次放行40S,亮5S红灯让行驶中的车辆有时间停到禁行线外,左拐放行15秒,亮5S红灯;支干道放行30S,亮5S黄灯,左拐放行15秒,亮5S红灯……。各计时电路为倒计时显示。
下面是代码,求大神帮我分层和做顶层
module jtd(clk,en,lampa,lampb,acount,bcount);
input clk,en;
output[3:0]lampa,lampb;
output[7:0]acount,bcount;
reg[3:0]lampa,lampb;
reg[7:0]agreen,ayellow,aleft,ared,bgreen,byellow,bleft,bred;
reg[2:0]counta,countb;
reg tempa,tempb;
reg[7:0]numa,numb;
always@(en)
begin
if(!en)
begin
ared<=8'h5;ayellow<=8'h0;agreen<=8'h40;aleft<=8'h15;
bred<=8'h5;byellow<=8'h5;bgreen<=8'h30;bleft<=8'h15;
end
end.l
always@(posedge clk)
if(en)
begin
if(!tempa)
begin
tempa<=1;
case(counta)
0:begin numa <=agreen;lampa<=8;counta<=1;end
1:begin numa <=ared; lampa<=1;counta<=2;end
2:begin numa <=aleft; lampa<=2;counta<=3;end
3:begin numa <=ared; lampa<=1;counta<=0;end
default: lampa<=1;
endcase
end
else
begin
if(numa>1)
if(numa[3:0]==0)
begin
numa[3:0]<=4'b1001;
numa[7:4]<=numa[7:4]-1;
end
else
numa[3:0] <= numa[3:0]-1;
if(numa==2) tempa<=0;
end
end
else
begin
lampa<=1;counta<=0;tempa<=0;
end
always@(posedge clk)
if(en)
begin
if(!tempb)
begin
tempb<=1;
case(countb)
0:begin numb <=bgreen; lampb<=8;countb<=1;end
1:begin numb <=byellow; lampb<=4;countb<=2;end
2:begin numb <=bleft; lampb<=2;countb<=3;end
3:begin numb <=bred; lampb<=1;countb<=0;end
default: lampb<=1;
endcase
end
else
begin
if(numb>1)
if(numb[3:0]==0)
begin
numb[3:0]<=4'b1001;
numb[7:4]<=numb[7:4]-1;
end
else
numb[3:0]<=numb[3:0]-1;
if(numb==2) tempb<=0;
end
end
else
begin
lampb<=1;countb<=0;tempb<=0;
end
assign acount=numa;
assign bcount=numb;
endmodule