FPGA基于VGA的交通信号灯设计

本文介绍了一种基于FPGA的交通信号灯设计,结合VGA显示技术。主要内容包括VGA显示模块和逻辑控制模块的讲解,略过了LED和数码管模块。文中提到了VGA协议的HS、VS扫描信号以及RGB信号,并展示了800*600X60分辨率的参数设置。此外,还介绍了扫描模块和RGB控制模块的工作原理。
摘要由CSDN通过智能技术生成

前面一段时间fpga课整了个比较神奇的搭配?就交通信号灯(有上FPGA课的人应该知道这是一个比较基础的内容)配合VGA显示,弄了点东西忍不住分享一下。

总体上我这篇文章就重点讲解一下VGA显示模块和逻辑控制模块,像led和数码管模块我就不说了(也没啥东西可以说)

我先放个结果在这

话不多说先贴一段代码

module control_place(
        input clk_1s,
        input rst,
        input control_auto,
        input contrl_re,
        output reg [5:0]time_data_10,
        output reg [5:0]time_data_0,
        output reg [1:0]light_in_NS,
        output reg [1:0]light_in_WE,
        output reg ss_time
    );
    
    
    initial
    begin
    // 00是绿灯,01是黄灯 ,10是红灯
    light_in_NS = 2'b01;
    light_in_WE = 2'b01;
    time_data_10 = 0;
    time_data_0 = 5;
    ss_time = 0;
    end
    
    //设定逻辑
    always@(posedge clk_1s or negedge rst)
    begin
        
    if (!rst) begin
        light_in_NS = 2'b01;
        light_in_WE <= 2'b01;
        time_data_10 <= 0;
        time_data_0 <= 5;
        ss_time <= 0;
        end
        else begin
        
        if((time_data_0 == 1|| time_data_0 == 0)&& time_data_10 == 0) 
            if(control_auto)
                begin
                
                if(light_in_NS == 'b00)
                begin
                    light_in_NS <= 'b01;
                    light_in_WE <= 'b10;
                    time_data_10 <= 0;
                    time_data_0 = 5;
                    end
                else if(light_in_NS == 'b01)
                begin
                                light_in_NS <= 'b10;
                                light_in_WE <= 'b00;
                                time_data_10 <= 2;
                                time_data_0 <= 5;
                                ss_time = 0;
                                end
                else if(light_in_WE == 'b00)
                begin
                         light_in_NS <= 'b10;
                         light_in_WE <= 'b01;
                         time_data_10 <= 0;
                         time_data_0 = 5;
                         end
                 else if(light_in_WE == 'b01)
                    begin
                          light_in_NS <= 'b00;
                          light_in_WE <= 'b10;
                          time_data_10 <= 2;
                          time_data_0 <= 5;
                          ss_time = 0;
                          end 
                  end
           else 
                begin
                if(contrl_re)
                    begin
                    if(light_in_NS == 'b00 || light_in_WE == 'b01)
                        begin
                        light_in_NS <= 'b00;
                        light_in_WE <= 'b10;
                        end
                    else
                        begin
                        light_in_NS <= 'b10;
                        light_in_WE <= 'b01;
                        time_data_0 = 5;
                        time_data_10 = 0;
                        end
                    end
                else
                    begin
                    if(light_in_WE == 'b00 || light_in_NS == 'b01)
                        begin
                        light_in_WE <= 'b00;
                        light_in_NS <= 'b10;
                        end
                    else
                        begin
                        light_in_WE <= 'b10;
                        light_in_NS <= 'b01;
                        time_data_0 = 5;
                        time_data_10 = 0;
                        end
                    end


                end


        else 
            if(!control_auto)
                begin
                time_data_10 = 0;
                if(time_data_0 >= 5)
                    time_data_0 = 5;
                end
            if(time_data_0 == 0)
                begin
                if(time_data_10 != 0)
                    time_data_10 = time_data_10 - 1;
                    time_data_0 = 9;
                    end
                else if(time_data_0 == 5 
设计任务 (一)有一条主干道和一条支干道的汇合点形成十字交叉路口,主干道为东西向,支干道为南北向。为确保车辆安全,迅速地通行,在交叉道口的每个入口处设置了红,绿,黄3色信号灯。 (二)要求: (1)主干道绿灯亮时,支干道红灯亮,反之亦然,两者交替允许通行,主干道每次放行55s,支干道每次放行25s。每次由绿灯变为红灯的过程中,黄灯亮5s作为过渡。 (2)能实现正常的倒计时显示功能。 (3)能实现总体清零功能:计数器由初始状态开始计数,对应状态的指示灯亮。 (4)能实现特殊状态的功能显示:进入特殊状态时,东西、南北路口均显示红灯状态。 Verilog HDL作为一种规范的硬件描述语言,被广泛应用于电路的设计中。利用Verilog的设计描述可被不同的工具(包括验证仿真、时序分析、测试分析以及综合)所支持,可用不同器件来实现。而可编程器件的广泛应用,为数字系统的设计带来了极大的灵活性。由于可编程器件可以通过软件编程对硬件的结构和工作方式进行重构,使得硬件的设计可以如同软件设计那样快捷方便。 本文用Verilog HDL设计了一个交通灯控制系统,主干道交通灯按绿-黄-红变化,支干道交通灯按红-绿-黄变化。设计采用了自顶向下的设计方法,首先根据功能将电路分为div(包括div1和div2)、counter、controller、Fenwei(包括Fenwei1和Fenwei2)、demx模块,然后针对每个模块进行开发。利用QuartusII6.0中的仿真工具对每个模块进行仿真,保证功能正确。在此基础上,将所有模块连接起来,形成完整的设计,并用QuartusII6.0中的仿真工具再次仿真。仿真结果表明功能正确,符合设计要求。最后利用QuartusII6.0将程序下载到Altera FPGA芯片EP1C3T144C8中,实际结果表明电路工作正常,满足了设计要求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值