名称:红绿灯和等待信号时间显示的设计和实现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开发板如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
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
570