交通灯电路及verilog实现(状态机)

这篇具有很好参考价值的文章主要介绍了交通灯电路及verilog实现(状态机)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、功能

功能描述
1 )初始状态:主路绿灯、支路红灯;
2 )检测到支路有车 (X=1),灯状态的变化过程为:
        ①主路变黄灯、支路红灯
        ②主路变红灯、支路红灯
        ③主路红灯、支路变绿灯
3)当支路没车(X=0),灯状态的变化过程为:
        ①主路红灯、支路绿灯
        ②主路红灯、 支路变黄灯
        ③主路绿灯、支路变红灯
道路示意图如下:
交通灯电路及verilog实现(状态机)

二、状态分析

对于以上转换过程,可以采用状态机电路来描述:
状态描述:
S0:主路绿灯亮,支路红灯亮; 检测到支路有车 (X=1), 进入 S1;
S1:主路黄灯亮,支路红灯亮, 延时进入 S2
S2:主路红灯亮,支路红灯亮, 延时进入 S3
S3:主路红灯亮,支路绿灯亮;检测到支路没车(X=0)进入S4;
S4:主路红灯亮,支路黄灯亮;延时进入S0;
S0:主路绿灯亮,支路红灯亮
交通灯电路及verilog实现(状态机)

 三、verilog实现

用三段式状态机实现交通灯电路,设计和TB代码如下:


// Design Name: traffic_light
// Module Name: traffic_light               
// Description:  ↓ ↓ ↓
// Create Date: 2022/3/28

/*

state:
s0: main-green,     branch-red,     when x=1    s0->s1
s1: main-yellow,    branch-red,     delay       s1->s2
s2: main-red,       branch-red,     delay       s2->s3
s3: main-red,       branch-green,   when x=0    s3->s4
s4: main-red,       branch-yellow,  delay       s4->s1

port:
input:  clk,rst_n,x
output: main, branch

*/


`timescale 1ns / 1ps

module traffic_light(
    input   clk,
    input   rst_n,
    input   x,
    output  reg [1:0] main,
    output  reg [1:0] branch
);

parameter   green   = 2'd1,
           	yellow  = 2'd2,
			red     = 2'd3;

parameter   s0 = 3'd0,
            s1 = 3'd1,
            s2 = 3'd2,
            s3 = 3'd3,
            s4 = 3'd4;


reg [3:0] state;
reg [3:0] next_state;

//state transfer
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        state <= s0;
    else
        state <= next_state;
end

//transfer logic
always @(*)begin
    case(state)
        s0:                 next_state = x ? s1 : s0;
        s1:         #600    next_state = s2;
        s2:         #600    next_state = s3;
        s3:                 next_state = x ? s3 : s4;
        s4:         #600    next_state = s0;
        default:            next_state = state;
     endcase
end

//output
always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        main    <= green;
        branch  <= red;
    end
    else begin
        case(state)
        s0:         begin       main <= green;        branch <= red;       end
        s1:         begin       main <= yellow;       branch <= red;       end
        s2:         begin       main <= red;          branch <= red;       end
        s3:         begin       main <= red;          branch <= green;     end
        s4:         begin       main <= red;          branch <= yellow;    end
        default:    begin       main <= green;        branch <= red;       end
        endcase
    end
end

endmodule

testbench:

`timescale 1ns / 1ps

module tb_traffic_light();

parameter period = 10; //100mhz

reg     clk;
reg     rst_n;
reg     x;
wire    [1:0] main;
wire    [1:0] branch;

always #(period/2) clk = ~clk;

initial begin
    clk = 1'b0;
    rst_n = 1'b0;
    x = 0;
    #60
    rst_n = 1'b1;
    #1234
    x = 1;
    #1234
    x = 0;
end


traffic_light u_traffic_light(clk,rst_n,x,main,branch);


endmodule

 四、仿真&综合

仿真结果:

交通灯电路及verilog实现(状态机)综合结果:

交通灯电路及verilog实现(状态机)文章来源地址https://www.toymoban.com/news/detail-455412.html

到了这里,关于交通灯电路及verilog实现(状态机)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • vivado交通灯设计verilog代码ego1板红绿灯时间可修改

    名称:vivado交通灯设计verilog代码ego1板红绿灯时间可修改 软件:VIVADO 语言:Verilog 代码功能: 十字路口红绿灯设计; 1、每次通行时间可在0-99秒内设定,可以通过按键修改通行时间。 2、路口四边均设红黄绿三色信号灯和用于计时的两位数码管显示时间(十进制数)。 3、黄灯亮

    2024年02月04日
    浏览(32)
  • 基于FPGA的交通灯设计与实现

    EDA工具:Modelsim and Vivado ##一、产品要求: 该控制器用于主干道和支道公路交叉口,优先保证主干道通行,平时处于\\\"主干道绿灯,支道红灯\\\"状态,支道有车辆要穿过主干道时,信号灯改为\\\"主干道红灯,支道绿灯\\\",支道无车辆时,信号灯返回\\\"主干道绿灯,支道红灯\\\"状态。如

    2024年02月02日
    浏览(41)
  • 51单片机STM32交通灯红绿灯十字路口信号灯类设计功能要求汇总

    浏览必读: 使用搜索可以达到事半功倍的效果。 电脑浏览器CTRL+F可以使用搜索查找 功能说明: 1.四路交通灯,带有红绿灯倒计时,绿灯倒计时结束后转黄灯5秒,再转红灯。 2.紧急情况下按键紧急按钮,四路黄灯快闪。 3.可以动态设置红绿灯时间。 涉及知识点:按键扫

    2024年02月11日
    浏览(33)
  • protues仿真微处理器8086实现交通灯

    (1)下载安装仿真环境protues。 (2)搭建8086开发环境,我使用的是 emu8086 。自行下载安装即可。 有需要相关安装包可以私信 (1)选用74LS373与74LS245来实现8086地址数据总线的拆分。 (2)选用 8259可编程中断控制器 用于管理8086系列微机系统的外部中断请求,实现优先权的排

    2024年02月06日
    浏览(33)
  • 多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板代码

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

    2024年02月04日
    浏览(53)
  • Apollo星火计划学习笔记——Apollo决策规划技术详解及实现(以交通灯场景检测为例)

    Apollo星火计划课程链接如下 星火计划2.0基础课:https://apollo.baidu.com/community/online-course/2 星火计划2.0专项课:https://apollo.baidu.com/community/online-course/12 星火计划学习笔记——第七讲自动驾驶规划技术原理1 ●目的 ○ 保障无人车的行车安全并且遵守交规 ○ 为路径和速度的平滑优

    2024年02月07日
    浏览(36)
  • 交通灯控制系统

    一.实验目的 设计一个用于十字路口的交通灯控制器,能显示十字路口东西、南北两个方向的红、黄、绿的指示状态; 具有倒计时的功能,用两组数码管作为东西和南北方向的倒计时显示,主干道直行(绿灯)60秒后,左转(绿灯)40秒;支干道直行(绿灯)45秒后,左转(绿灯)30秒,在

    2024年02月11日
    浏览(31)
  • 实验(八):交通灯控制

            1. 学习模拟交通灯控制的实现方法;         2. 掌握Proteus硬件仿真与调试。         1.根据要求编写程序,并写出原理性注释;         2. 将检查程序运行的结果,分析一下是否正确;         3. 完成所建工程的仿真及调试。 按照电路要求在Protu

    2024年02月03日
    浏览(42)
  • VHDL交通灯

    交通灯控制电路设计 要求: (1)使用开发板自带的50MHz晶振作为时钟源; (2)电路具有6个LED输出,分别代表东西向红、黄、绿指示灯和南北向红、黄、绿指示灯;电路具有4个数码管输出,分别代表东西向倒计时和南北向倒计时信息; (3)电路对十字路口的两组交通灯的

    2024年02月03日
    浏览(42)
  • 51单片机——交通灯

      1、基本功能就是如同红绿灯一般,不做赘述。   2、红灯时长和绿灯时长可通过按键设置,即按键列中的上面4个,当这4个按键有一个按下后便进入时长设置功能,设置完成后按最下面两个按键(紧急控制按钮)任意一个便可退出该功能。   3、有紧急控制功能,按下

    2024年02月11日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包