• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

Quartus交通灯控制器verilog代码

06/09 10:42
820
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-2312251103154J.doc

共1个文件

名称:Quartus交通灯控制器verilog代码

软件:Quartus

语言:Verilog

代码功能:

用 Verilog HDL或VHDL语言设计有限状态机及其附属电路(定时器),实现交通灯控制器。其功能为东西方向、南北方向各红、黄绿三个灯。绿灯每次亮30秒,黄灯每次亮3秒定时器的输入时钟频率为1Hz。状态机的输入时钟与定时器相同,状态机有复位输入,复位后进入某个确定状态。

要求

(1)画出状态转移图;

2)完整的源代码,含有限状态机、附属电路(定时器);(附代码说明文档、或代码详细注释)

(3)仿真波形截图(含简单说明),(可采用任意工具软件,如: Modelsim

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. 状态图

5. Testbench

6. 仿真图

部分代码展示:

/*
红->绿 绿->黄 黄->红
1、红--计时main_red_times------------------------绿--计时main_green_times---main_yellow_times黄灯---------------红
2、绿--计时branch_green_times---branch_yellow_times黄灯--------------------红--计时branch_reg_times-------------------绿
*/
//交通灯控制
module traffic_light(
input clk_1Hz,//1Hz
input reset,//复位
output reg main_red,//主路灯(东西方向)
output reg main_green,//
output reg main_yellow,//
output reg branch_red,//支路灯(南北方向)
output reg branch_green,//
output reg branch_yellow
);
reg [7:0] main_green_BCD;
reg [7:0] main_yellow_BCD;
reg [7:0] main_red_BCD;
reg [7:0] branch_green_BCD;
reg [7:0] branch_yellow_BCD;
reg [7:0] branch_red_BCD;
parameter main_green_state=3'd0;
parameter main_yellow_state=3'd1;
parameter branch_green_state=3'd2;
parameter branch_yellow_state=3'd3;
//定义路口个灯持续时间,修改此处时间
//主路绿灯+主路黄灯=支路红灯时间
//支路绿灯+支路黄灯=主路红灯时间
wire [7:0] main_green_time;
wire [7:0] main_yellow_time;
wire [7:0] branch_green_time;
wire [7:0] branch_yellow_time;
assign main_green_time=8'd30;
assign main_yellow_time=8'd3;
assign branch_green_time=8'd30;
assign branch_yellow_time=8'd3;
reg [2:0] state=3'd0;
reg [7:0] main_green_cnt=8'd1;
reg [7:0] main_yellow_cnt=8'd1;
reg [7:0] branch_green_cnt=8'd1;
reg [7:0] branch_yellow_cnt=8'd1;
//主路绿灯+主路黄灯=支路红灯时间
//支路绿灯+支路黄灯=主路红灯时间
always@(posedge clk_1Hz or negedge reset)
if(!reset)
state<=main_green_state;//reset
else
case(state)
main_green_state:
if(main_green_cnt<main_green_time) begin//主路绿灯
state<=main_green_state;
main_green_cnt<=main_green_cnt+'d1;
end
else begin
state<=main_yellow_state;//计数到后到下一状态
main_green_cnt<='d1;
end
main_yellow_state:   
   if(main_yellow_cnt<main_yellow_time) begin//主路黄灯
state<=main_yellow_state;
      main_yellow_cnt<=main_yellow_cnt+'d1;
end
else begin
state<=branch_green_state;//计数到后到下一状态
      main_yellow_cnt<='d1;
end
   branch_green_state:
if(branch_green_cnt<branch_green_time) begin//支路绿灯
state<=branch_green_state;
branch_green_cnt<=branch_green_cnt+'d1;
end
else begin
state<=branch_yellow_state;//计数到后到下一状态
branch_green_cnt<='d1;
end    
   branch_yellow_state:
   if(branch_yellow_cnt<branch_yellow_time) begin//支路3s黄灯
state<=branch_yellow_state;
      branch_yellow_cnt<=branch_yellow_cnt+'d1;
end
else begin
state<=main_green_state;//计数到后到下一状态
      branch_yellow_cnt<='d1;
end
default:state<=main_green_state;
endcase
//交通灯状态控制,state为相应状态时亮相应灯
always@(posedge clk_1Hz )
begin
if(state==main_green_state)
main_green<=1;
else
main_green<=0;
if(state==main_yellow_state )
main_yellow<=1;
else
main_yellow<=0;
if(state==branch_green_state | state==branch_yellow_state)
main_red<=1;
else
main_red<=0;
end
//交通灯状态控制,state为相应状态时亮相应灯
always@(posedge clk_1Hz )
begin
if(state==branch_green_state)
branch_green<=1;
else
branch_green<=0;
if(state==branch_yellow_state )
branch_yellow<=1;
else
branch_yellow<=0;
if(state==main_green_state | state==main_yellow_state)
branch_red<=1;
else
branch_red<=0;
end
endmodule

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=403

  • 2-2312251103154J.doc
    下载

相关推荐