Verilog实现八人抢答器

  • 一设计需求
  • 二模块划分和代码
    • 1、抢答模块
    • 2、倒计时模块
    • 3、分频模块
    • 4、扫描显示模块
    • 5、蜂鸣器
  • 三、顶层
  • 四、一些问题及总结

一设计需求

抢答器由FPGA中verilog语言编写,一共有六个模块,分别为:daojishi,divscandisplay,fmq2,shuju,qqddqq组成,可实现八人抢答功能,并实现30s倒计时,当倒计时时间为0时无人抢答会使蜂鸣器报警,当有人成功抢答时会显示抢答选手序号并产生报警。qqddqq为顶层文件,级联各个模块

二模块划分和代码

1、抢答模块

为实现八人抢答功能模块,选手成功抢答会显示序号并产生报警

module shuju(clk,start,xuan,answer,EnFlat);
input start,clk;
input[7:0] xuan;
output reg EnFlat;
output reg [3:0] answer;always@(posedge clk)
beginif(start==1'b0)beginEnFlat=1'b1;//锁存置高endelse if(EnFlat)begincase(xuan)//选手抢答,选手按下时输出自己序号,并使锁存置0达到锁存效果8'b00000001:beginEnFlat<=1'b0;answer<=8'b00000001;end8'b00000010:beginEnFlat<=1'b0;answer<=8'b00000010;end8'b00000100:beginEnFlat<=1'b0;answer<=8'b00000011;end8'b00001000:beginEnFlat<=1'b0;answer<=8'b00000100;end8'b00010000:beginEnFlat<=1'b0;answer<=8'b00000101;end8'b00100000:beginEnFlat<=1'b0;answer<=8'b00000110;end8'b01000000:beginEnFlat<=1'b0;answer<=8'b00000111;end8'b10000000:beginEnFlat<=1'b0;answer<=8'b00001000;enddefault:answer<=0;endcaseend
end
endmodule

2、倒计时模块

实现30s倒计时模块

module daojishi (q,qout,reset,cout,clk);
output reg [7:0] qout;
output cout;
reg cout;
input reset,clk,q;
always@(posedge clk or negedge reset )beginif(!reset) beginqout <= 8'h30;cout <=0;endelse if(q)beginif(qout[3:0]==0) //判断十位是否为0beginif(qout[7:4]==0)  //判断个位是否为0begincout <=1;//全为0时给一个cout信号给蜂鸣器qout <=0;//使倒计时一直为0endelsebeginqout[3:0]<=9;//个位为0,十位不为0,让个位为9qout[7:4]<=qout[7:4]-1;//让十位减一endendelse beginqout[3:0]<= qout[3:0]-1;//若都不为0,让个位减1endend
end
endmodule

3、分频模块

module div(rst_n,clk_in,clk_out);parameter period=5,duty=2;input rst_n,clk_in;output reg clk_out;reg [25:0] counter;always@(posedge clk_in or negedge rst_n)beginif(!rst_n)begincounter<=0;clk_out<=0;endelse  beginif(counter>=period)counter<=0;elsecounter<=counter+1;if(counter>duty)clk_out<=1;elseclk_out<=0;endend
endmodule

4、扫描显示模块

为扫描显示模块,一个用了四个数码管显示,一个显示选手抢答序号,两个分别显示倒计时十位和个位,一个显示横杠分开选手序号和倒计时

module scandisplay(clk,mdata0,ddata0,ddata1,seg_sel,seg7);input clk;input[3:0]mdata0,ddata1,ddata0;output reg[2:0] seg_sel;output reg[7:0] seg7;reg[3:0] data;reg cnt;always@(posedge clk)beginif(seg_sel<3)seg_sel<=seg_sel+1;elseseg_sel<=0;endalways@(seg_sel)begincase(seg_sel)0:  data<=ddata0;//显示倒计时的个位1:  data<=ddata1;//显示倒计时的十位2:  data<=11;//一个横杆3:  data<=mdata0;//选手号码default:data<=0;endcaseendalways@(data)begincase(data)0:seg7<=8'b00111111;1:seg7<=8'b00000110;     2:seg7<=8'b01011011;3:seg7<=8'b01001111;4:seg7<=8'b01100110;5:seg7<=8'b01101101;6:seg7<=8'b01111101;7:seg7<=8'b00000111;8:seg7<=8'b01111111;9:seg7<=8'b01101111;default:seg7<=8'b01000000;endcaseendendmodule

5、蜂鸣器

module fmq2(q,clk,cout,beep);
input clk,q;
input cout;
output reg beep;always @ (posedge clk)beginif(cout==1||q==1) beep=0;//蜂鸣器为低时响else beep=1;end
endmodule

三、顶层

module qqddqq(xuan,seg7,clk,start,z,seg_sel,res);
input start;
input clk;
input[7:0] xuan;
wire [7:0] xuan;
input wire res;
wire[7:0] sout;
wire carry_s;
wire clk_100;
wire clk_1;
output wire[7:0] seg7;
output wire[2:0] seg_sel;
output z;
reg EnFlat=1'b0;
reg [3:0]answer=4'b0;
wire [7:0]ans;
wire en;div #(2999,1499) div_u1(res,clk,clk_100);
div #(1999,999) div_u2(res,clk_100,clk_1);shuju(
.clk        (clk_100),
.start  (start),//start为总开关,控制选手抢答和倒计时开始
.xuan       (xuan),
.answer (ans),
.EnFlat (en)
);scandisplay scandisp_u1(clk_100,ans[3:0],sout[3:0],sout[7:4],seg_sel,seg7);daojishi(
.q              (en),
.qout           (sout),
.reset      (start),
.cout       (carry_s),
.clk            (clk_1)
);fmq2(.q       (!en),.clk      (clk_1),.cout   (carry_s),.beep (z)
);endmodule

四、一些问题及总结

1、第一次完成fpga编写,完成八人抢答器,其中一些变量命名中英文混合,可能看的有点恶心。
2、写代码时一些逻辑问题经过多次改进才最终实现目标。

Verilog实现八人抢答器相关推荐

  1. 三人表决器与八人抢答器实验

    三人表决器与八人抢答器实验 三人表决器实验报告 一.实验目的 1.辨识数字IC功能说明. 2.测试数字集成门电路,掌握输出故障排除.使用注意事项. 3.掌握逻辑函数搭建三人表决器. 二.实验资源 1. ...

  2. 单片机六位抢答器c语言程序,单片机八人抢答器程序设计

    有一个<单片机八人抢答器程序设计>的题目. 设计要求: 利用 KEIL 软件编制控制程序. 利用 PROTEUS 仿真软件,绘制单片机控制系统: P1 口接 8 个按钮,编号为1.2.3. ...

  3. 八人抢答器讲解_八人抢答器

    有一个<单片机八人抢答器程序设计>的题目.设计要求:利用 KEIL 软件编制控制程序.利用 PROTEUS 仿真软件,绘制单片机控制系统:P1 口接 8 个按钮,编号为1.2.3....7 ...

  4. HNU工训中心: 三人表决器及八人抢答器实验报告

    工训中心的牛马实验 三人表决器: 实验目的 1) 辨识数字IC功能说明. 2) 测试数字集成门电路,掌握输出故障排除.使用注意事项. 3) 掌握逻辑函数搭建三人表决器. 2.实验资源 HBE硬件基础电 ...

  5. 八人抢答器讲解_课程设计题一:八人抢答器

    要求: 1.八人抢答逻辑:只有一个最先抢答有效. 2.在主持人控制下,10秒内抢答有效. 3.采用数码管显示抢答10秒倒计时,若有抢答直接结束,显示结果. 4.抢答结束后用数码管显示抢答结果:抢答有效 ...

  6. 课程设计题一:八人抢答器

    要求: 1.八人抢答逻辑:只有一个最先抢答有效. 2.在主持人控制下,10秒内抢答有效. 3.采用数码管显示抢答10秒倒计时,若有抢答直接结束,显示结果. 4.抢答结束后用数码管显示抢答结果:抢答有效 ...

  7. 八人抢答器讲解_8人抢答器的制作原理和过程说明是怎样的?

    展开全部 具有定时功能的八路数显抢答器的设计 (中国地质大学(武汉)信息62616964757a686964616fe4b893e5b19e31333238653838工程学院,武汉 430074) ...

  8. 51单片机八人抢答器c语言,抢答器 - 基于51单片机 - 8人有程序较完整.doc

    抢答器 - 基于51单片机 - 8人有程序较完整 课程题目: 基于单片机---8路抢答器 学 院: 职业技术学院 专 业: 电子信息科学与技术 年 级: 091 学 号: 0920020088 学生姓 ...

  9. 八人抢答器讲解_八人智力竞赛抢答器

    1 摘 要 本报告设计的八路智力竞赛抢答器电路主要采由 74 系列常用集成电路组成,涉及到触 发器.编码器.加法器.译码器和 RC 电路组成的多谐振荡电路.该抢答器具有基本的抢答 功能, 通过共阴极数 ...

最新文章

  1. django中使用celery简单介绍
  2. python 最快 因式分解_python中怎么对一个数进行因式分解?
  3. 表示层 业务逻辑层 数据层(UI BLL DAL)
  4. STM32学习笔记(七) ADC模数转换测电平(普通和DMA模式)
  5. Linux环境用Sendmail架设Mail服务器
  6. Docker 比较好的新入门教程
  7. 学习韩顺平java基础笔记 (自用)
  8. 身份证地址码码表MySQL
  9. 【滤波器】基于多种滤波器实现信号去噪含Matlab源码
  10. IDEA将后端代码上传至远程服务器
  11. Game Master(思维 + 贪心)
  12. 酵素果冻在快手火了!三个品牌单品一周卖出5000万背后的秘密是什么?
  13. 深度学习21天——卷积神经网络(CNN):实现mnist手写数字识别(第1天)
  14. 量子计算机平行宇宙,【宇宙探秘】量子永生?量子纠缠可以推断出平行宇宙,再无真正意义上的死亡?...
  15. python调用tecplot
  16. docker安装和启动
  17. CMOS器件与TTL器件CMOS电平与TTL电平
  18. 使用 strace、tcpdump、nlmon、wireshark 探索 ethtool netlink 框架的原理
  19. Android微信支付订单支付失败的问题
  20. 集音频和视频播放功能于一身的简易播放器

热门文章

  1. 从 hybrid开发----》微前端
  2. Android仿微信实现快速索引选择联系人
  3. 总结人人开源前端renren-fast-vue项目npm install报错
  4. 如何打开安卓手机的开发者模式/开发者选项,进行安卓开发真机调试
  5. IDEALENS K2亮相北京,被现场试用者称为佩戴最舒适的VR产品
  6. Numpy生成随机数及服从常见分布的随机数
  7. 佩奇(社会人)大学初探——联迪商用实习小结(2018-4至2018-6)
  8. openstack使用1——windows7镜像的制作
  9. 怎么把pdf图片转换成cad呢?两种简单方法
  10. python java驾校报名考试信息管理系统Vue+Elementui