汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus

名称:汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus

软件:Quartus

语言:Verilog

功能介绍

本设计包含汽车转向灯控制和交通灯控制两个 FPGA 实验工程,适合用于 Verilog 数字逻辑课程设计、EDA 实验和 FPGA 入门项目参考。汽车转向灯部分通过按键输入控制左转、右转和紧急双闪状态,输出端连接 LED,用于模拟车辆转向灯在不同操作状态下的闪烁效果。 汽车转向灯控制模块以时钟 cp 作为系统节拍输入,z、y、j 分别作为左转、右转和紧急状态控制键。系统空闲时左右灯均熄灭;左转状态下左灯按节拍闪烁;右转状态下右灯按节拍闪烁;紧急状态下左右灯同步闪烁。模块内部设置可调整的 CLK_FREQ_HZ 参数,便于根据实际输入时钟频率修改分频计数,使闪烁节奏适配不同实验环境。 交通灯控制部分围绕红绿灯时序控制展开,配套包含红绿灯控制模块、数码管显示模块等内容,可用于展示交通信号灯状态切换和倒计时显示逻辑。工程包含 Quartus 项目文件、Verilog 程序、仿真波形和设计文档图片,便于学习者从代码、RTL结构、仿真结果和工程配置多个角度理解设计。

运行环境

开发语言:Verilog 开发软件:Quartus 工程类型:FPGA/EDA 数字逻辑设计工程 主要工程文件包括汽车转向灯 controlwd 工程和交通灯 Traffic_Light_Control 工程,工程中包含 .qpf、.qsf、.vwf、Verilog 源码及仿真相关文件。

设计思路

汽车转向灯控制采用有限状态机实现,状态划分为 QA、QB、QC、QD 四种工作模式。QA 表示左右灯均灭的空闲状态;QB 表示左转闪烁状态;QC 表示右转闪烁状态;QD 表示紧急双闪状态。状态转移由 z、y、j 三个按键信号控制,其中紧急状态 j 具有较高优先级,能够从空闲状态进入双闪模式。 为了实现周期性闪烁,模块内部加入分频计数器 tick_cnt,根据 CLK_FREQ_HZ 参数产生 second_tick 节拍信号。进入闪烁状态时,blink_phase 首先置为亮;之后在状态保持期间,每到一个节拍翻转一次,从而形成 LED 亮灭交替的效果。返回空闲状态时,blink_phase 清零,左右输出均保持熄灭。 输出逻辑根据当前状态和 blink_phase 组合生成 LD、RD 两路 LED 控制信号。QA 状态下 LD、RD 均为 0;QB 状态下 LD 随 blink_phase 闪烁、RD 熄灭;QC 状态下 RD 随 blink_phase 闪烁、LD 熄灭;QD 状态下 LD、RD 同步随 blink_phase 闪烁。这样的结构将状态转移、节拍产生和输出控制分开,代码层次清晰,便于修改闪烁频率和扩展控制条件。 交通灯控制工程采用模块化方式组织,包含红绿灯控制模块和数码管显示模块。红绿灯控制逻辑负责信号灯状态切换,数码管显示模块用于显示相关计时或状态信息,整体适合作为状态机设计、分频计数、显示译码和交通信号控制实验的综合参考。

模块结构

主要模块包括: 1. controlwd:汽车转向灯顶层控制模块,输入时钟和左转、右转、紧急控制信号,输出左右转向灯 LED 控制信号。 2. Traffic_Light_Control:交通灯控制工程主模块,用于实现交通信号灯控制相关逻辑。 3. RGY:红绿灯控制相关模块,用于交通灯红、绿、黄灯状态控制。 4. HEX:数码管显示模块,用于交通灯工程中的数码管显示译码。 工程文件包含 Verilog 源码、Quartus 工程配置、仿真波形文件和编译输出文件,便于直接打开工程查看模块连接、RTL 图和仿真波形。

开发板验证

工程包含 Quartus 管脚约束/分配文件,可用于开发板引脚分配和硬件下载验证。汽车转向灯工程可将 LD、RD 连接至开发板 LED,通过 z、y、j 控制键观察左转闪烁、右转闪烁和紧急双闪效果;交通灯工程可结合红绿灯输出和数码管显示进行板级验证。

演示视频

包含汽车转向灯演示视频和交通灯演示视频,可直观看到转向灯闪烁控制以及交通灯控制效果。

仿真图/仿真说明/设计文档图片

设计文档图片内容包括工程文件、程序文件、程序编译、RTL 图、状态图、仿真图、整体仿真图、红绿灯控制模块和数码管显示模块等,适合配合源码理解工程结构、状态机设计和仿真结果。

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image1.png

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image2.png

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image3.png

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image4.png

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image5.png

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image6.png

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image7.png

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image8.png

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image1.png

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image2.png

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image3.png

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image4.png

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image5.png

汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus 设计文档图片 image6.png

部分代码

以下展示顶层模块 controlwd 的部分代码,完整源码请下载压缩包查看。

module controlwd (
    input  wire cp,   // 时钟输入
    input  wire z,    // 左转向灯控制键
    input  wire y,    // 右转向灯控制键
    input  wire j,    // 紧急状态控制键
    output reg  LD,   // 左转向灯输出(连接到最左端LED)
    output reg  RD    // 右转向灯输出(连接到最右端LED)
);

    //========================
    // 参数与状态编码
    //========================
    // 时钟频率参数(单位Hz),用于把“cp”分频到1秒节拍
    // 若实际为1Hz,请将其改为1;若为50MHz,请改为50000000,以此类推
    parameter integer CLK_FREQ_HZ = 20;//默认20Hz

    // 状态编码:QA=00, QB=01, QC=10, QD=11
    localparam [1:0] QA = 2'b00;
    localparam [1:0] QB = 2'b01;
    localparam [1:0] QC = 2'b10;
    localparam [1:0] QD = 2'b11;

    // 当前状态与下一状态
    reg [1:0] state  = QA;  // 初始为QA:左右均灭
    reg [1:0] next_state;

    //========================
    // 1秒节拍分频器
    //========================
    // 计数到(CLK_FREQ_HZ-1)产生一次1秒到达信号second_tick
    reg [31:0] tick_cnt = 32'd0; // 计数器,初值为0
    wire second_tick = (tick_cnt == (CLK_FREQ_HZ - 1));

    always @(posedge cp) begin
        if (second_tick) begin
            tick_cnt <= 32'd0;        // 到达1秒,清零重新计数
        end else begin
            tick_cnt <= tick_cnt + 1; // 累加计数
        end
    end

    //========================
    // 闪烁相位控制
    //========================
    // blink_phase=1表示“亮”,=0表示“灭”
    // 进入闪烁状态时先置为亮;随后每过1秒翻转一次
    reg blink_phase = 1'b0;

    //========================
    // 下一状态组合逻辑(根据题目要求的跳转条件)
    //========================
    always @(*) begin
        next_state = state; // 默认保持当前状态
        case (state)
            QA: begin
                // 在QA时,按优先级处理:j(紧急) > z(左转) > y(右转)
                if (j)       next_state = QD;
                else if (z)  next_state = QB;
                else if (y)  next_state = QC;
            end
            QB: begin
                // QB:左转闪烁;当z=0时返回QA
                if (!z)      next_state = QA;
            end
            QC: begin
                // QC:右转闪烁;当y=0时返回QA
                if (!y)      next_state = QA;
            end
            QD: begin
                // QD:紧急双闪;当j=0时返回QA
                if (!j)      next_state = QA;
            end
            default: begin
                next_state = QA;
            end
        endcase
    end

    //========================
    // 状态寄存与闪烁相位更新
    //========================
    always @(posedge cp) begin
        // 状态更新
        state <= next_state;

        // 当状态发生变化时进行“起始亮/灭”设定
        if (state != next_state) begin
            if (next_state == QA) begin
                blink_phase <= 1'b0;  // 回到QA时,灭
            end else begin
                blink_phase <= 1'b1;  // 进入QB/QC/QD时,先亮起
            end
        end else begin
            // 状态未变更时,若处于闪烁类状态,每1秒翻转一次亮灭
            if (second_tick) begin
                if (state == QA) begin
                    blink_phase <= 1'b0; // 在QA保持灭
                end else begin
                    blink_phase <= ~blink_phase; // 闪烁翻转
                end
            end
        end
    end

    //========================
    // 输出控制
    //========================
    // QA:LD=0,RD=0
    // QB:LD=blink_phase,RD=0
    // QC:LD=0,RD=blink_phase
    // QD:LD=blink_phase,RD=blink_phase
    always @(*) begin
        // 默认灭
        LD = 1'b0;
        RD = 1'b0;
        case (state)
            QA: begin
                LD = 1'b0;
                RD = 1'b0;
            end
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 汽车转向灯与交通灯控制 FPGA 设计 Verilog Quartus

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员