FPGA十字路口红绿灯控制器

这篇具有很好参考价值的文章主要介绍了FPGA十字路口红绿灯控制器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

课程设计:十字路口红绿灯控制器

1.要求双方向8个灯的时序控制

2.要求显示倒计时

FPGA十字路口红绿灯控制器

verilog hdl代码模块

module red_green(
     input clk, //系统时钟
     input rst,
     
     output reg A_red,
     output reg A_green,
     output reg A_yellow,
     output reg A_left,
     
     output reg B_red,
     output reg B_green,
     output reg B_yellow,
     output reg B_left,
     
     output reg[7:0] A_T,
     output reg[7:0] B_T
);
//灯的显示时间,系统分配32位宽
parameter A_yellow_time = 5;         
parameter A_left_time = 15;
parameter A_red_time = 55;
parameter A_green_time = 40;

parameter B_yellow_time = 5;         
parameter B_left_time = 15;
parameter B_red_time = 65;
parameter B_green_time = 30;

reg [2:0] A_state;
reg [2:0] B_state;
reg [7:0] A_count;
reg [7:0] B_count;
//A灯的状态
always @(posedge clk or negedge rst)

case(A_state)
    0:                 //A绿灯
        begin
        A_green <= 1'b1;
        A_yellow <= 1'b0;
        A_left <= 1'b0;
        A_red <=1'b0;
        end
    1:                 //A黄灯
        begin
        A_green <= 1'b0;
        A_yellow <= 1'b1;
        A_left <= 1'b0;
        A_red <=1'b0;
        end
    2:                 //A左转灯
        begin
        A_green <= 1'b0;
        A_yellow <= 1'b0;
        A_left <= 1'b1;
        A_red <=1'b0;
        end
    3:                 //A黄灯
        begin        
        A_green <= 1'b0;
        A_yellow <= 1'b1;
        A_left <= 1'b0;
        A_red <=1'b0;
        end
default:              //A红灯
        begin
        A_green <= 1'b0;
        A_yellow <= 1'b0;
        A_left <= 1'b0;
        A_red <=1'b1;
        end
endcase

//A灯的计时以及状态变化
always @(posedge clk or negedge rst)
begin
if(rst==0)
begin
A_count<=A_green_time;
A_state<=0;
end
else
    begin
        if(A_count==1)   //计时到1时变换
            begin
                if(A_state==4) 
                begin
                    A_state <=0;  //状态到最后一个时,A状态回到0循环
                    A_count <=A_green_time;
                end
                else
                    A_state <= A_state+1; //否则,下一个状态
                    case(A_state)
                    0: A_count <= A_yellow_time;
                    1: A_count <= A_left_time;
                    2: A_count <= A_yellow_time;
                    3: A_count <= A_red_time;
            default: A_count <= A_green_time;    //给下一个状态赋予时间
                    endcase
            end
        else A_count<=A_count-1;
    end
end




//B灯的状态
always @(posedge clk or negedge rst)

case(B_state)
    0:                 //B红灯
        begin
        B_green <= 1'b0;
        B_yellow <= 1'b0;
        B_left <= 1'b0;
        B_red <=1'b1;
        end
    1:                 //B绿灯
        begin
        B_green <= 1'b1;
        B_yellow <= 1'b0;
        B_left <= 1'b0;
        B_red <=1'b0;
        end
    2:                 //B黄灯
        begin
        B_green <= 1'b0;
        B_yellow <= 1'b1;
        B_left <= 1'b0;
        B_red <=1'b0;
        end
    3:                 //B左转灯
        begin        
        B_green <= 1'b0;
        B_yellow <= 1'b0;
        B_left <= 1'b1;
        B_red <=1'b0;
        end
default:              //B黄灯
        begin
        B_green <= 1'b0;
        B_yellow <= 1'b1;
        B_left <= 1'b0;
        B_red <=1'b0;
        end
endcase
//B灯的计时以及状态变化
always @(posedge clk or negedge rst)
begin
if (rst==0)
begin
    B_count<=B_red_time;
    B_state<=0;
end
else
    begin
        if(B_count==1)   //计时到1时变换
            begin
                if(B_state==4) 
                begin
                    B_state <=0;  //状态到最后一个时,B状态回到0循环
                    B_count <=B_red_time;
                end
                else
                    B_state <= B_state+1; //否则,下一个状态
                    case(B_state)
                    0: B_count <= B_green_time;
                    1: B_count <= B_yellow_time;
                    2: B_count <= B_left_time;
                    3: B_count <= B_yellow_time;
            default: B_count <= B_red_time;    //给下一个状态赋予时间
                    endcase
            end
        else B_count<=B_count-1;
    end
end






//移位加3法,二进制向BCD码的转换
reg [3:0] num_1; //bcd码的十位
reg [3:0] num_0; //bcd码的个位
integer i;
always @(posedge clk)
begin 
    num_1=4'b0;   //bcd码的十位
    num_0=4'b0;   //bcd码的个位
    for (i=7;i>=0;i=i-1)
        begin
            if(num_1>=5)
                num_1=num_1+3;
            if(num_0>=5)
                num_0=num_0+3;    //加3
                
            num_1=num_1<<1;
            num_1[0]=num_0[3];
            
            num_0=num_0<<1;
            num_0[0]=A_count[i]; //移位
        end
    A_T={num_1,num_0};
    
    num_1=4'b0;   //bcd码的十位
    num_0=4'b0;   //bcd码的个位
    for (i=7;i>=0;i=i-1)
        begin
            if(num_1>=5)
                num_1=num_1+3;
            if(num_0>=5)
                num_0=num_0+3;    //加3
                
            num_1=num_1<<1;
            num_1[0]=num_0[3];
            
            num_0=num_0<<1;
            num_0[0]=B_count[i]; //移位
        end
    B_T={num_1,num_0};    

end

endmodule

测试程序模块

`timescale 1ns/1ps   //时间单位1ns,时间精度1ps

module testbench;
    reg clk;   //系统时钟
    reg rst;   //复位
    wire A_red;
    wire A_green;
    wire A_yellow;
    wire A_left;
     
    wire B_red;
    wire B_green;
    wire B_yellow;
    wire B_left;
    
    wire [7:0]A_T;
    wire [7:0]B_T;    
    //元件例化为RD,仿真连线
    red_green RD   
    (
    .clk(clk),
    .rst(rst),
    .A_red(A_red),
    .A_green(A_green),
    .A_yellow(A_yellow),
    .A_left(A_left),
    .B_red(B_red),
    .B_green(B_green),
    .B_yellow(B_yellow),
    .B_left(B_left),
    
    .A_T(A_T),
    .B_T(B_T)
    );
//初始先复位一次
initial
    begin
        rst=0;
        #30;
        rst=1;
    end


//设置时钟每500000000个单位翻转一次,这样一个时钟周期为1秒
always
    begin
        clk=0;
        #500000000;
        clk=1;
        #500000000;
    end
endmodule
FPGA十字路口红绿灯控制器
FPGA十字路口红绿灯控制器

注意:

  1. 选择比较好的器件

  1. 测试文件命名为testbench.vt,否则不行。

  1. 采用BCD倒计时,经测试时序无错,代码结构清晰。

  1. EDA课设,感谢论坛其他大佬的代码,基于站内其他作者单方向灯代码和二进制转BCD写出。文章来源地址https://www.toymoban.com/news/detail-506507.html

到了这里,关于FPGA十字路口红绿灯控制器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板代码

    名称:多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板 软件:Quartus II 语言:VHDL 代码功能: 要求设计一个多功能交通灯控制系统。并进行软件仿真与硬件实现。要求做到  (1)主干道绿灯亮时,支干道红灯亮,反之亦然,两者交替允许通行,主干道每次放行60s,支干道每

    2024年02月04日
    浏览(53)
  • 基于高云FPGA开发板的十字路口交通灯

    结合高云MiniStar_Nano EDA开发板,完成设计十字路口交通信号灯控制系统。 1.要求该交通灯为三色灯控制器,红灯亮表示禁止通行,绿灯亮表示允许通行,黄灯亮表示要求压线车辆快速穿越。主干道和次干道灯的亮灭时序按照交通规则设置。 2.可以调整主干道和次干道绿灯和红

    2024年01月19日
    浏览(44)
  • 【红绿灯识别】计算机视觉红绿灯识别【含GUI Matlab源码 2713期】

    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:行百里者,半于九十。 更多Matlab仿真内容点击👇 Matlab图像处理(进阶版) 路径规划

    2024年01月19日
    浏览(36)
  • 高德导航红绿灯为啥能读秒?

    文章来源:https://www.zhihu.com/question/545653479/answer/3098666967 每天工作其实就是负责自己片区的红绿灯,一大早就去校对时间,然后发布到后台。是的,统计出来的,而且还是人工统计,有误差请见谅 真的是很辛苦了!不过还是希望他们记录的时候好好记,因为有的路口真的不准

    2024年02月09日
    浏览(31)
  • 交通信号灯课程设计(红绿灯)

    一、设计指标 1.1对设计课题进行简要阐述        由一条主干道和一条支干道的汇合点形成十字交叉路口,为确保车辆安全、迅速地通行,在交叉路口的每个人口处设置了红、绿、黄三色信号灯。        (1)用红、绿、黄三色发光二极管作信号灯,用传感器或逻辑开关

    2024年02月09日
    浏览(38)
  • 基于OpenCV的红绿灯识别

    为了实现轻舟航天机器人实现红绿灯的识别,决定采用传统算法OpenCV视觉技术。 航天机器人的红绿灯识别主要基于传统计算机视觉技术,利用OpenCV算法对视频流进行处理,以获取红绿灯的状态信息。具体而言,该系统通过连接工控机摄像头读取视频流,将视频帧转换成HSV色彩

    2024年02月15日
    浏览(25)
  • 基于STM32的红绿灯设计

    基于protrus8设计电路原理图 先要思考明白十字路口红绿灯的逻辑 东西是一样的,南北是一样的。 东西红灯,南北就是绿灯,反之一样的,弄明白这些写代码就有思路了 中间的两个数码管是模拟真实红绿灯倒计时的用的,放置4个也行,但是为了方便观看就放一个了 下面放几

    2024年02月11日
    浏览(25)
  • 基于Verilog的十字路口交通灯控制电路设计

    设计并实现一个简单的十字路口交通灯控制电路。以4个红色指示灯、4个绿色指示灯和4个黄色指示灯模拟路口东西南北4个方向的红绿黄交通灯。控制这些灯,使它们安下列规律亮灭。 1、东西方向绿灯亮,南北方向红灯亮。东西方向通车,时间30秒; 2、东西方向黄灯闪烁,南

    2024年02月03日
    浏览(32)
  • 定时红绿灯(C51单片机)

    一.项目题目:利用中断处理制作的定时LED红绿灯系统 二.项目器件: 红色LED灯 绿色LED灯 黄色LED灯 100R电阻 电源 电容器 C51单片机 接地线 三.项目原理图 四.项目实现功能: 使用定时器/计数器T1工作方式1,采用中断方式控制P1口6个单片机串口,实现类似交通红绿灯功能

    2024年02月05日
    浏览(37)
  • 红绿灯交通灯控制逻辑电路设计

    最近无聊整理一下以前的笔记之类的,发现以前的课设,简陋粗糙,还是记录下吧。 此设计有具体接线说明 实验箱大概如下图 课设任务及要求 1、满足如图 1 顺序工作流程 t为时间单位 2、满足两个方向的工作时序 即东西方向亮红灯时间应等于南北方向亮黄、绿灯时间之和,

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包