扫码加入

  • 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

红绿灯和等待信号时间显示的设计和实现Verilog代码vivado basys3开发板

2025/06/16
570
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-231230131209423.doc

共1个文件

名称:红绿灯和等待信号时间显示的设计和实现Verilog代码vivado  basys3开发板

软件:vivado

语言:Verilog

代码功能:

红绿灯和等待信号时间显示的设计和实现

•端口:红灯控制信号red(输出),绿灯控制信号green(输出),黄灯控制信号yellow(输出),强制控制端 pass(输入),其他端口可自定义。

•红灯10s->绿灯10s->红灯 反复交替。

•强制控制端pass 功能为当前灯为红灯时pass置1则红灯保持3s后变绿灯(模拟过马路灯)

•选择一个7段码显示管显示红灯或绿灯剩下的等待时间。

任意选择两个led灯当做绿灯,红灯。选择任意一个按键当做pass。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在 basys3开发板验证, basys3开发板如下,其他开发板可以修改管脚适配:

basys3开发板.png

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. 管脚约束

部分代码展示:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2019/11/30 17:30:21
// Design Name: 
// Module Name: red_green_light
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////
module red_green_light(
    input clk_100M,//100M时钟
    input pass_key,//中间按键
    output reg red_led,
    output reg green_led,
    output [3:0] bit_select,//数码管位选
    output reg [7:0] lednum_select//数码管段选
    );
//100M分频到1s
reg [31:0] data_cnt=32'd0;
reg clk_1Hz=0;
always@(posedge clk_100M)
    if(data_cnt>=32'd100_000_000)//100MHz计数到100_000_000就是1s
        data_cnt<=32'd0;
    else
        data_cnt<=data_cnt+32'd1;
always@(posedge clk_100M)
    if(data_cnt>=32'd50_000_000)
        clk_1Hz<=0;//1Hz时钟
    else
        clk_1Hz<=1;
//time_cnt为19~10为红灯,9~0为绿灯,数码管显示time_cnt的个位
reg [4:0] time_cnt=5'd19;
always@(posedge clk_1Hz or posedge pass_key)
    if(pass_key==1)//pass_key按下
        time_cnt<=5'd13;//红灯3秒
    else
        if(time_cnt==5'd0)//计时到0后回到19
            time_cnt<=5'd19;
        else
            time_cnt<=time_cnt-5'd1;//减1,倒计时
//红灯
always@(*)
    if(time_cnt>5'd9 && time_cnt<5'd20)//time_cnt为19~10为红灯
        red_led<=1;
    else
        red_led<=0;
//绿灯
always@(*)
    if(time_cnt<5'd10)//time_cnt为9~0为绿灯
        green_led<=1;
    else
        green_led<=0;
assign bit_select=4'b1110;
//数码管显示
always@(*)
begin
case(time_cnt%10)//除以10取余得到个位
0 : lednum_select= (8'hc0); //数码管段选
1 : lednum_select= (8'hf9); 
2 : lednum_select= (8'ha4); 
3 : lednum_select= (8'hb0); 
4 : lednum_select= (8'h99); 
5 : lednum_select= (8'h92);
6 : lednum_select= (8'h82); 
7 : lednum_select= (8'hf8); 
8 : lednum_select= (8'h80); 
9 : lednum_select= (8'h90); 
endcase
end
endmodule

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=460

  • 2-231230131209423.doc
    下载

相关推荐