名称:抢答器设计Verilog代码VIVADO仿真(文末获取)
软件:VIVADO
语言:Verilog
代码功能:
抢答器设计要求:
三人参赛每人一个按钮,主持人一个按钮,按下就开始
每人一个发光二极管,抢中者灯亮
有人抢答时,显示器显示其序号两秒
答题时限为10秒钟,从有人抢答开始,用数码管倒计时间,10、9、8…1、0
倒计时到0的时候,然后显示四个0两秒
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 程序仿真
整体仿真
分频模块仿真
抢答器控制模块仿真
数码管显示模块仿真
部分代码展示:
//抢答器控制模块 module responder_ctrl ( input clk,//100Hz input clk_1Hz,//1Hz使能信号 input reset,//高电平有效 input key_main_in,//主控,按键输入 input key_1_pos,//抢答按键输入1 input key_2_pos,//抢答按键输入2 input key_3_pos,//抢答按键输入3 output reg LED_1,//LED抢答指示灯 output reg LED_2,//LED抢答指示灯 output reg LED_3,//LED抢答指示灯 output [2:0] state_O,//当前状态 output reg [3:0] responder_num,//抢答指示1~3 output [3:0] downcnt_O//输出倒计时 ); parameter s_idle=3'd0;//空闲状态 parameter s_start=3'd1;//开始 parameter s_qiangda=3'd2;//抢答状态 parameter s_downcnt=3'd3;//倒计时10~0 parameter s_zero=3'd4;//显示4个0,2秒 parameter s_end=3'd5;//抢答结束,计分状态 reg [2:0] state=3'd0; assign state_O=state;//当前状态 reg [3:0] downcnt=4'd10; reg [3:0] zerocnt=4'd0; assign downcnt_O=downcnt;//输出倒计时 //倒计时控制 always@(posedge clk) if(reset) downcnt<=4'd10; else if(state==s_downcnt && clk_1Hz)//倒计时10~0 downcnt<=downcnt-4'd1;//倒计时 else if(state==s_zero) downcnt<=4'd10; //显示2秒0计时 always@(posedge clk) if(reset) zerocnt<=4'd0; else if(state==s_zero && clk_1Hz)//显示2秒0计时 zerocnt<=zerocnt+4'd1;// else if(state==s_end) zerocnt<=4'd0; always@(posedge clk) if(reset) state<=s_idle;//空闲状态 else case(state) s_idle: if(key_main_in)//主控,按键输入 state<=s_start;//开始状态 else state<=s_idle;//空闲状态 s_start: state<=s_qiangda;//抢答状态 s_qiangda://抢答状态 if(key_1_pos | key_2_pos | key_3_pos ) state<=s_downcnt;//倒计时10~0 else state<=s_qiangda;//抢答状态 s_downcnt://倒计时10~0 if(downcnt==0 && clk_1Hz) state<=s_zero; else state<=s_downcnt; s_zero://显示0,2秒 if(zerocnt==2) state<=s_end; else state<=s_zero; s_end: if(key_main_in)//主控,按键输入 state<=s_start;//开始状态 else state<=s_end;//结束 default:state<=s_idle;//空闲状态 endcase //输出抢答者编号responder_num always@(posedge clk) if(reset)begin responder_num<=4'd0; LED_1<=0; LED_2<=0; LED_3<=0; end else if(state==s_qiangda) if(key_1_pos)begin responder_num<=4'd1;//1号抢答 LED_1<=1; end else if(key_2_pos)begin responder_num<=4'd2;//2号抢答 LED_2<=1; end else if(key_3_pos)begin responder_num<=4'd3;//3号抢答 LED_3<=1; end else ; else if(state==s_start || state==s_zero)begin responder_num<=4'd0; LED_1<=0; LED_2<=0; LED_3<=0; end else ; endmodule
源代码
扫描文章末尾的公众号二维码