汽车转向灯与灯光控制 FPGA 设计 Verilog Quartus
名称:汽车转向灯与灯光控制 FPGA 设计 Verilog Quartus
软件:Quartus
语言:Verilog
开发板/平台:Cyclone IV FPGA开发板
功能介绍
本设计使用 Verilog 实现汽车转向灯及相关灯光控制,在 Quartus 工程中完成分频、状态控制和数码管显示的模块连接。系统设置左转、右转、紧急、前灯和刹车五路按键输入,输出左右转向灯信号、两位前灯信号、两位后灯信号以及蜂鸣器控制信号,适合用于汽车灯光控制类 FPGA 课程设计与实验演示。
除灯光输出外,系统还将控制模块的状态送入数码管显示模块,通过八位位选和七位段选接口完成扫描显示。灯光节拍与显示扫描节拍分别由分频模块产生,便于围绕按键控制、状态机、计数分频和动态扫描开展学习与调试。
工程配有顶层及各功能模块的波形文件、设计说明图片和开发板运行演示,可用于对照理解模块接口、检查控制时序,并结合上板效果学习从逻辑设计到硬件验证的过程。
运行环境
开发语言为 Verilog,工程使用 Quartus,目标硬件为 Cyclone IV FPGA开发板。工程采用 top 作为顶层模块,具有 Quartus 工程配置、管脚分配、原理图设计文件及编译输出,可用于查看模块连接和开展硬件调试。
仿真环境涉及 ModelSim,配有仿真运行脚本及 Quartus 波形文件。顶层默认分频参数为 BLINK_DIV = 50_000_000、SCAN_DIV = 50_000;运行前应根据实际输入时钟核对分频设置,并确认按键、灯光、蜂鸣器和数码管的硬件连接。
设计思路
设计将时间节拍、灯光控制和状态显示分开实现。顶层统一接入系统时钟,由 clock_divider 产生 blink_tick 与 scan_tick 两路节拍信号,分别供灯光控制和数码管扫描使用。BLINK_DIV 与 SCAN_DIV 作为顶层参数传入分频模块,便于根据输入时钟及观察需求调整节拍;具体闪烁和扫描周期需要结合分频实现与实际时钟计算。
turn_controller 集中接收左转、右转、紧急、前灯及刹车按键,通过状态机组织灯光与蜂鸣器控制,并输出两位 state 状态信号。显示模块直接使用这一状态信号,使控制逻辑与显示逻辑通过明确的接口衔接,便于分别检查状态变化和显示响应。
调试可按分频、控制、显示、顶层联动的顺序进行:先检查节拍产生过程,再观察不同按键条件下的状态与输出,随后检查数码管位选和段选,最后验证完整系统的连接。仿真时可适当缩小分频参数以缩短观察时间,上板时则应按实际时钟与显示需求设置参数。
模块结构
系统由 top、clock_divider、turn_controller 和 sevenseg_display 四个模块组成。
- top:顶层连接模块,接入系统时钟与五路按键,导出灯光、蜂鸣器和数码管接口,并传递分频参数。
- clock_divider:分频模块,输出 blink_tick 和 scan_tick,为灯光控制及显示扫描提供节拍。
- turn_controller:控制模块,接收按键和闪烁节拍,完成状态机及灯光、蜂鸣器控制,输出两位 state 状态信号。
- sevenseg_display:显示模块,接收状态与扫描节拍,输出 bit_sel[7:0] 位选和 seg_sel[6:0] 段选信号。
模块连接关系清晰:分频模块分别向控制模块和显示模块提供节拍,控制模块再向显示模块传递状态,顶层负责汇总外部接口。
开发板验证
设计已在 Cyclone IV FPGA开发板上完成上板验证,配有开发板实物图片、管脚分配配置和上板演示视频。验证时可结合按键输入,观察左右转向灯、前后灯、蜂鸣器及数码管的响应,并对照控制状态检查各输出之间的配合。
移植到其他开发板时,需要根据实际硬件重新核对时钟输入、按键连接、LED及数码管管脚,同时确认外设的有效电平和数码管段线、位选接线。


演示视频
演示视频与成功上板视频展示汽车灯光控制设计的运行效果,可结合开发板上的按键操作与输出变化,了解灯光控制及状态显示的实际表现。
仿真图/仿真说明/设计文档图片
设计说明图片涵盖工程文件、程序文件、程序编译、RTL结构、管脚分配及仿真图,便于对照查看实现结构与工程配置。
仿真内容覆盖顶层、分频模块、控制模块和显示模块。可结合对应波形文件检查分频节拍、按键与状态之间的关系,以及数码管扫描接口的变化,再通过顶层仿真观察模块联动。










部分代码
以下展示顶层模块 top 的部分代码,完整源码请下载压缩包查看。
module top #(
parameter BLINK_DIV = 50_000_000,
parameter SCAN_DIV = 50_000
) (
input wire clk,
input wire left_key,
input wire right_key,
input wire jingji_key,
input wire front_key,
input wire brake_key,
output wire LD,
output wire RD,
output wire [1:0] FD,
output wire [1:0] BD,
output wire speaker,
output wire [7:0] bit_sel,
output wire [6:0] seg_sel
);
// 子模块内部连线
wire blink_tick;
wire scan_tick;
wire [1:0] state;
// 分频模块:产生闪烁与扫描脉冲
clock_divider #(
.BLINK_DIV(BLINK_DIV),
.SCAN_DIV(SCAN_DIV)
) u_div (
.clk(clk),
.blink_tick(blink_tick),
.scan_tick(scan_tick)
);
// 控制模块:状态机与灯/蜂鸣器控制
turn_controller u_ctrl (
.clk(clk),
.blink_tick(blink_tick),
.left_key(left_key),
.right_key(right_key),
.jingji_key(jingji_key),
.front_key(front_key),
.brake_key(brake_key),
.LD(LD),
.RD(RD),
.FD(FD),
.BD(BD),
.speaker(speaker),
.state(state)
);
// 数码管显示模块
sevenseg_display u_disp (
.clk(clk),
.scan_tick(scan_tick),
.state(state),
.bit_sel(bit_sel),
.seg_sel(seg_sel)
);
endmodule
代码文件(付费下载)
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 汽车转向灯与灯光控制 FPGA 设计 Verilog Quartus