抢答器设计Verilog代码VIVADO仿真

名称:抢答器设计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
源代码

 扫描文章末尾的公众号二维码

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Verilog是硬件描述语言之一,常用于数字电路设计与逻辑仿真。四人抢答器是一种用于竞赛或考试中的设备,可以实现四个人同时参与抢答的功能。 在使用Verilog设计四人抢答器时,我们可以根据需求定义输入输出和控制信号,以实现正确的功能。首先,需要定义四个输入信号,代表四个参赛者按下抢答器按钮的动作。这四个信号可以使用二进制编码表示,例如0001表示参赛者1按下按钮,1000表示参赛者4按下按钮,以此类推。 接下来,我们需要定义一个输出信号,用于指示哪个参赛者首先按下了抢答器。这个输出信号可以使用二进制编码或者十进制数字来表示,例如0001表示参赛者1抢答成功,0010表示参赛者2抢答成功,以此类推。 为了实现四人抢答的功能,需要使用Verilog中的逻辑门、时钟信号和状态机等元素。可以使用逻辑门来判断哪个参赛者首先按下了按钮,利用时钟信号对输入进行采样,以确保信号传递正确。同时,可以通过状态机的设计,使得抢答器在一个周期内只有一个参赛者抢答成功。 设计Verilog代码后,可以通过硬件仿真软件对其进行验证,以确保功能的正确性。如果仿真结果符合预期,就可以将代码下载到FPGA等可编程硬件上实现四人抢答器的功能。 总结起来,利用Verilog可以设计出四人抢答器的硬件电路,在设计过程中需要定义输入输出和控制信号,使用逻辑门、时钟信号和状态机等元素实现功能,并进行硬件仿真验证。通过Verilog设计,我们可以实现一个能够同时支持四人参与抢答的抢答器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值