VL33 交通灯

该博客介绍了一个交通灯控制系统的设计,采用VerilogHDL语言,包括红黄绿三色灯和行人按钮。系统在正常情况下按照60、5、10的时钟周期循环,行人按钮按下时若剩余绿灯时间大于10则缩短为10个时钟。设计中使用了状态机和倒计时计数器,通过信号上升沿来触发状态转换,并处理行人按钮的影响。此外,还讨论了信号灯与倒计时的同步问题。
摘要由CSDN通过智能技术生成

描述

要求实现一个交通红绿灯,具有红黄绿三个小指示灯和一个行人按钮,正常情况下,机动车道指示灯按照60时钟周期绿灯,5个时钟周期黄灯,10个时钟周期红灯循环。当行人按钮按下,如果剩余绿灯时间大于10个时钟,则缩短为10个时钟,小于10个时钟则保持不变。

注:机动车道的指示灯和人行道指示灯应该是配对的,当机动车道的灯为绿或者黄时,人行道的灯为红;当机动车道的灯为红时,人行道的灯为绿,为简便起见,只考虑机动车道的指示灯。

模块的信号接口图如下:

请使用VerilogHDL语言实现,并编写testbench验证功能。

输入描述:

clk:系统时钟信号

rst_n:复位信号,低电平有效

pass_request:行人按钮信号,当该信号为1,表示按钮按下,如果剩余绿灯时间大于10个时钟,则缩短为10个时钟,小于10个时钟则保持不变。

输出描述:

clock:交通灯倒计时读数

red:该信号为1,表示红灯亮,为0表示红灯不亮

yellow:该信号为1,表示黄灯亮,为0表示黄灯不亮

green:该信号为1,表示黄灯亮,为0表示黄灯不亮

题解主体

    首先设置一个倒计时的计数器,每个时钟计数器输出减一,当计数器计数到0时,切换切换显示灯颜色,同时重置计数器为相应颜色的持续时间。
每个颜色的指示灯都会持续一段时间,可以取指示灯信号变化的上升沿作为状态转移的触发条件。上升沿的获取可以通过缓存一个时刻的数值,当当前时刻为1,前一时刻为0时,表示上升沿出现。

    reg p_red,p_yellow,p_green;        //用于缓存信号灯的前一时刻的数值,判断上升沿
always @(posedge clk, negedge rst_n) 
    begin
        if(!rst_n)
            begin
                p_yellow <= 1'd0;
                p_red <= 1'd0;
                p_green <&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值