有限状态机交通灯的实现
一、 实验目的
设计一个交通灯控制器,要求实现功能:
- 交通灯位于四个方向(东南西北)
- 南北和东西向在同一时间亮相同的灯
- 灯变化的次序为:绿-黄-红,循环
- 南北和东西向灯不同时为绿灯或黄灯
- 灯的持续时间:绿9s,黄-3s,红-9s
用verilog语言描述有限状态机的功能,熟悉有限状态机原理,了解用计数器控制时间等方法。
二、 实验内容
1. 实验流程
① 分析实验目的,在实验中南北东西的交通灯一共有四种状态,因为南北,东西在同一时刻分别具有相同的状态,故南北灯,东西灯可以分别由3个灯——红,黄,绿灯表示状态。
② 以led[2:0]依次表示南北灯的绿灯,黄灯,红灯,以led[5:3]依次表示东西灯的绿灯、黄灯、红灯。状态表如下:
③ 根据状态表,利用计数器完成verilog代码并上板实验。
2. Verilog代码分析
(1) Design source(.v文件):
clkdivtransport.v:
module clkdivtransport(
input CLK100MHZ,
input reset,
output [5:0]LED,
output clk1HZ
);
reg [100:0]count1;
always@(posedge CLK100MHZ)
begin
if(count1==100000000)count1<=0;
else count1<=count1+1;
end
assign clk1HZ=(count1<50000000?0:1); //分频得到1hz的时钟信号
transport x1(.CP(clk1HZ),.reset(reset),.led(LED));
endmodule
transport.v:
module transport(
input CP,
input reset,
output reg [5:0]led
);
wire t1,t2,t3,t4;
reg ST,LT;
reg [5:0]count;
assign t1=led[3]&led[2];
assign t2=led[3]&led[1];
assign t3=led[5]&led[0];
assign t4=led[4]&led[0];
always@(posedge CP)
begin
if(!reset)begin ST=0;LT=0;count=0;led=6'b001100;end//清零
if(count==9)begin LT<=1;count<=0;end//长短时间
else if(count==3)begin ST<=1;count=count+1;end
else begin count<=count+1;ST<=0;LT<=0;end
if(t1<)led=6'b001010;
else if(t2&ST)led=6'b100001;
else if(t3<)led=6'