名称:交通灯控制器设计Verilog代码Quartus仿真(文末获取)
软件:Quartus
语言:Verilog
代码功能:
一、 设计任务和要求: 交通灯控制系统主要是实现城市十字路口红绿灯的控制。在现代化的大城市中,十字 路口越来越多,在每个路口都需要使用红绿灯进行交通指挥和管理,红、黄、绿灯的转换 要有一个准确的时间间隔和转换顺序,这就需要有一个安全、自动的系统对红、黄、绿灯 的转换进行管理,本课程设计就是基于此,要求设计一个基于 FPGA 的交通灯控制器。
二、设计原理: 1、 就近观察并记录十字路口交通灯的变化情况。 2、 以实验室的 EDA 开发箱的资源为基础,设计一个交通灯控制器。开发箱的资源: (1) 交通指示灯:LED 灯模块有 12 个 LED 灯,红黄绿三种颜色,纵向表示南北 方向,横向表示东西方向,输出高电平时,对应的 LED 灯亮。 (2) 八个 7 七段数码管:动态显示方式,共阴极连接; (3) 4 个 0-1 开关:K1-K4,开关向上为 1,向下为 0。 (4) 外部输入脉冲信号时钟源 CLK(1Hz),供计数器使用。
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 管脚分配
6. 仿真图
整体仿真图
分频模块仿真图
交通灯控制模块仿真图
数码管显示模块仿真图
部分代码展示:
//红绿灯控制模块 module light_ctrl( input clk_in,//时钟 input clk_1Hz,//1Hz时钟 input busy_key,//紧急控制按键 output reg main_R,//主干道红灯 output reg main_G,//主干道绿灯 output reg main_Y,//主干道黄灯 output reg branch_R,//支干道红灯 output reg branch_G,//支干道绿灯 output reg branch_Y,//支干道黄灯 output reg [7:0] Main_road,//主干道数码管数据显示 output reg [7:0] Branch_road//支干道数码管数据显示 ); reg [7:0] main_G_cnt; reg [7:0] main_Y_cnt; reg [7:0] main_R_cnt; reg [7:0] branch_G_cnt; reg [7:0] branch_Y_cnt; reg [7:0] branch_R_cnt; reg [2:0] state=3'd0; parameter M_G_state=3'd0; parameter M_Y_state=3'd1; parameter B_G_state=3'd2; parameter B_Y_state=3'd3; parameter busy_state=3'd4; reg [7:0] M_G_cnt=1; reg [7:0] M_Y_cnt=1; reg [7:0] B_G_cnt=1; reg [7:0] B_Y_cnt=1; //状态机控制 always@(posedge clk_1Hz or posedge busy_key) if(busy_key==1)begin//紧急情况 state<=busy_state;//紧急状态 end else//1表示支干道有车 case(state) M_G_state: if(M_G_cnt<8'd45) begin//主干道绿灯45秒 state<=M_G_state; M_G_cnt<=M_G_cnt+1;//计数 end else begin state<=M_Y_state;//下一状态 M_G_cnt<=1; end M_Y_state: if(M_Y_cnt<8'd5) begin//主干道黄灯5秒 state<=M_Y_state; M_Y_cnt<=M_Y_cnt+1;//计数 end else begin state<=B_G_state;//下一状态 M_Y_cnt<=1; end B_G_state: if(B_G_cnt<8'd25) begin//支干道绿灯25秒 state<=B_G_state; B_G_cnt<=B_G_cnt+1;//计数 end else begin state<=B_Y_state;//下一状态 B_G_cnt<=1; end B_Y_state: if(B_Y_cnt<8'd5) begin//支干道5s黄灯 state<=B_Y_state; B_Y_cnt<=B_Y_cnt+1;//计数 end else begin state<=M_G_state;//下一状态 B_Y_cnt<=1; end default:state<=M_G_state; endcase //交通灯状态控制,state为相应状态时亮相应灯 always@(posedge clk_1Hz ) begin if(state==M_G_state) main_G<=1; else main_G<=0; end always@(posedge clk_1Hz ) begin if(state==M_Y_state ) main_Y<=1; else main_Y<=0; end
源代码
点击下方的公众号卡片获取