基于FPGA的四路抢答器的Verilog HDL代码

合集下载

verilog抢答器设计报告

verilog抢答器设计报告

湖北师范学院电工电子实验教学省级示范中心电子版实验报告抢答器一•任务解析用VerilOg硬件描述语言设计抢答器,实现:1、四人通过按键抢答,最先按下按键的人抢答成功,此后其他人抢答无效。

2、每次只有一人可获得抢答资格,一次抢答完后主持人通过复位按键复位,选手再从新抢答。

3、有从新开始游戏按键,游戏从新开始时每位选手有5分的初始分,答对加1分,答错扣1分,最高分不能超过9分,当选手得分减为0时取消该选手抢答资格。

4、选手抢答成功时其对应的分数闪烁。

•方案论证(画框图并分析)抢答部分(对应SnatCh模块)在quartusll下的仿真原理图如下所示:第2页,共6页抢答部分的代码如下:InOdUIe SnatCh(CLr F key,data j led,m) ;/∕≠⅛答慎块input clr;//主持人复J f立按键input[3:0] key;//四个技犍对应四竝选手input [15 :0] data^∕⅛i⅛手的分数反銀进来以取消0分选手抢答资格OUtPUt [3 : 0] Ied√ //四位选手抢答指示灯QUtPUt [2:0]町"存储抢答结果〔有没有人抢答及谁抢答:>reg C I q;reg[1:0] ≡;Wire out={key[0]fc{data[S:0]!=0))∣(key[l]&(data[7;4]1=0))Ifk已y[2]&(data[11:0]!=0}) I (⅛ey[3]盂{data [15 :12]1=0) };"选手分数减为零时取消其抢答资格Wire CIk=OUt⅛(Jq);assign In-{c,s};//⅛lways(⅛ {posedge Clk Or negedge CIr)if (!clr}begin q<=O;c<=O;end"主持人复位else begin c<=l;q<=J q;end//有i⅛手抢答时匸直1, q为D触发:器输出端Ialway≡&(p□≤edge CIk)case(key)rb0001zs<=2l b00r77检测到有人抢答时立即将选手抢答信息存入s4 ・b0010:s<=2'b01;4 ・b0100ιs<=2,b!0;4,blOOO≈3<=2t bll;default: s<=2,b??;//其他情况^为高阻值.endcaseassign l≡d- U-τ ≡ } --3 ' blOO ) ^4 ,b3301: 「矩答亍空芋J⅛τ⅛<Γ亮t{c f s}≡=3'blθl),b0010:f {c,s}=3,bllθ) ?4I bolO0: l(c13}=3,blll) 74τbiα00: 4τb0000;e JTidmodu Ie计分模块的代码如下:InQdUle StQre {star t小PrdowmSr q);"计分模圳input start J up r down;input [2:0] s;"通过S可以判断有没有人抢答21哪位选手抢答ClUtPUtr15-0] q;reg[15:0] q;/∕q[3: Ob q[7:41 J q[ll:81,q[15H21分别存放四位选手的分数LCELL aa (UP f CieIaylIP) , bb (down^ de laydown) ; ''∕i^ 用系统延时模块Wire clk=delayupIdelaydo⅛m;always0(posedge CIk Or POSedge start)if {start)q<=161h5555;//给抢答的四人毎人一个初始分数5分else if (up)//加按键按下时加1分case (S)3'blOO:if (q[3^J<⅛τh9)q[3 = 0]<=q[3r01+lτbl;//最高分不能超过93τbl01∑if (q[7z41<4τh9)q[7z4]<=q[7z4]+l l bl;//3*bllO:if (q[llιB]<4t h9)q∣[llι8]<=q[llι8]+l t bl;//3,blllzif(q[15:12]<4'h9)q(15:12]<=q[15:12]+1t bl;//endcaseelsecase (s)3τblOO=if(q[3=O]>O)q[3r{)]<^ι[3:Ol-I l b1;//最低分不能小于03,bl01=if (q[7 = 4]>0)q[7 = 4]<=q[7 = 4]-l l bl;//S1DllOiif(q[llzB]>O)q[11:0]<=q[11;B]-l'bl;//3l blllzif(q[15:12]>0)q[15:12]<=q[15:12]-l1bl;//endcase endmodule顶层模块的代码如下:module top (StaEt J Clr f CLkJ UPJ Idowlb key f⅛f b f c, Cb S l E 内*SeI J led}主槟块input start,clr f亡IlGUpr down;input[3:0] key;OUtPUt a f b f亡de,frg;OUtPUt[2:0] sei;OUtPUt[3:0] led;wire f lash f wup j WdDWr L;∏内部节点〔连线】Wire [2:0]fuck;Wire [3:0]out; Wire [15:0]Whore; deboυnced⅞bl(.clk(s) J-key_In (υp}…key_OUt (WUP))「"按⅛⅛⅛4⅛τd⅞⅛2(.clk(s) J-Ifey in{mod)…key-αut (WdOWn));"按键去抖动SCaIn SCan (.clk(s) J.q(sel)} J∕∕⅛⅛mux9 mux LaI (VhOre(S: 0]} r r a2 (4 ,ha} j r a3 (WhOre [7 : 4])…訥K ,ha) J+a5(w⅛0R[11:3]I,.a6{4rħa)I r,a7(Whore[15:12]) r,aS{4τha),-Bel{≤el)「”DdfuCk) J r clk{flash}. ”OUt{out});//4 rħa在CIeIed里定文为全熄deled CieIeelL in (out) t.a (a), ,b (b), .c (c) f.d(d) f.e (e) j. f (f) ,r.g{g)}数码管驱动Store SitOre (. Start (st⅛rt} f-UP (VrUP) f- CIawn (IJaoWn) f . 5 (fuck) ,r,q{wħαre)); //分⅛fc控制SnatCh Snatcħ {r clr (dr) J key {⅛ey) F -Cia t⅛ (WhOre) I- Ied (ISdI Z p jn(fυck)); /丿抢答控制div_cIk divclkl(.cifi(clk), .f (15,d4θθθ) Ir,cko(≤) H "分频CliVCI⅛2(. Cki (Clk)5.f (21d2), T C)co (flash));endιπodule•重难点解析抢答器的核心部分为巧妙地利用D触发器的反馈,在检测到第一个上升沿时将按键(未按下时接低电平)接入的与门锁住,以保证与门只有一个上升沿输出,从而实现“最先按下按键的人抢答成功,此后其他人抢答无效”。

基于FPGA的四路抢答器

基于FPGA的四路抢答器

北华航天工业学院《EDA技术综合设计》课程设计报告报告题目:竞赛抢答器作者所在系部:电子工程系作者所在专业:电子信息工程作者所在班级:B10212作者姓名:郭思华指导教师姓名:胡辉完成时间:2012-12-16内容摘要EDA技术是现代电子信息工程领域的一门新技术,他是先进的计算机工作平台上开发出来的一套电子系统设计的软硬件工具,并设计先进的电子系统设计方法。

本文介绍了以FPGA为基础的四路抢答器的设计,此次设计是一个有4组抢答输入,并具有抢答计时控制,到时报警以及时间显示等功能的通用型抢答器。

此次设计它以VHDL硬件描述为平台,结合动手实践完成。

该抢答器分为五个模块:抢答模块、计时模块、选择模块,位循环模块和译码模块。

利用QuartusⅡ工具软件完成率编译仿真验证。

关键词EDA、可编程逻辑器件、计数器、显示器目录一概述 (1)二方案设计与论证 (1)三单元电路程序设计及其功能验证 (2)(一)抢答锁存模块的设计 (2)(二)计时模块的设计 (4)(三)数据选择模块的设计 (5)(四)译码模块的设计 (6)(五)位循环模块的设计 (8)四完整电路设计与分析 (9)(一)主电路图 (9)(二)时序仿真图 (9)(三)芯片引脚分布图 (10)五性能测试与分析 (10)六实验设备 (10)七心得体会 (10)八参考文献 (11)课程设计任务书一、概述抢答器主要由抢答模块、计时模块、选择模块,位循环模块和译码模块组成。

在整个抢答器中主持人在抢答前设置好抢答时间,在复位开始按键按下后,抢答器开始倒计时,若在计时时间内无人抢答,则抢答器报警提示,若在计时过程中有人抢答,则数码管显示第一个抢答的人的编号,同时停止计时。

抢答器共有3个输出显示,选手代号、计数器的个位和十位,他们输出全都为BCD码输出,这样便于和显示译码器连接。

二、方案设计与论证将该任务分成五个模块进行设计,分别为:抢答器抢答模块、抢答器计时模块、位循环模块、译码模块和选择模块。

基于FPGA平台的四位抢答器设计

基于FPGA平台的四位抢答器设计

现代电子系统设计综合题目——抢答器班级:电子信息工程(4)班姓名:尹燕宁学号:07090403日期:2011-12-14合作者:王启俊按照抢答器的设计要求,本设计主要实现以下基本功能:(1) 抢答器可以容纳四组参赛队进行抢答。

(2)系统复位后进入抢答状态,抢答开始后20秒倒计时,20秒倒计时后无人抢答显示超时,并报警。

(3)能显示抢答台号,且一组抢答后,则不接纳其他组抢答。

根据其设计要求,经过仔细试验和比较开始时所设想的两种方案,采用了以下方案以满足要求:倒计时模块应用动态显示方法显示两位变化的数字,倒计时过程中无人抢答则在计时结束后触发bell 信号发出报警声表示超时,有人抢答时则首先按下按钮的人通过一个stop信号屏蔽掉其他人的抢答信号,且不再计时。

在具体实现方案时,根据给定的电子综合设计实验箱的模块和已有元件的限制,对方案进行了如下调整和补充:首先是进行时钟信号分频,由给定的50MHz的时钟分成1Hz,以实现按秒倒计时;其次是倒计时显示的两位数字,由于只有一个静态显示数码管且被用于显示抢答台号,所以必须运用动态显示来进行两位数字的显示和控制;最后是复位后的初值设定,以使上一次抢答的结果不会影响下一次的抢答过程,增加电路的稳定性。

经过仿真以及实验,本设计能够圆满完成设计要求,且具有电路简洁、方案易懂、操作方便、抗干扰性强等特点,经过适当的轻微改造即可作为实际比赛时的四组抢答器,效果良好。

第一章方案的论证与设计第二章理论计算第三章电路图及相关设计文件第四章仿真与测试分析第五章设计总结第六章参考文献第七章附件(含完整电路图、VHDL设计文件)第一章方案的论证与设计为便于进行电路的方案设计和模块化设计,首先根据要求画出实现抢答器功能的系统框图如下所示:根据其设计要求,按照现有的知识水平和实验设备,提出了以下两种实现抢答器的方案:(一)倒计时部分采用静态显示,方便简单。

四人抢答部分根据抢答信号的高低来判断是否继续倒计时并且屏蔽掉其他后来的抢答信号。

verilog--4路抢答器设计-带30s倒计时

verilog--4路抢答器设计-带30s倒计时

四路抢答器一、程序module qiangda4(clr,clk,input1,input2,input3,input4,seg,clockin,scan,LED);input clr,clk,input1,input2,input3,input4;output [7:0] seg; //7段数码管数据output [7:0] scan; //数码管位选output [3:0] LED; //输出LED灯指示output clockin; //蜂鸣器reg [7:0] seg;reg [7:0] scan;reg [3:0] LED;reg clockin;reg [3:0] data;reg input_flag,count_flag;reg [14:0] count1;reg [8:0] count2;reg [3:0] LED_N;//reg clock_flag;reg div1khz,div1hz;reg [2:0] cnt;reg [3:0] dat;//reg [7:0] data_count;reg [3:0] count_one,count_ten;initial count_one='d0; //初始化initial count_ten='d3;initial data=4'b0000;initial LED_N=4'b1111;//-------------fenping分频1khz-----------------------------------always @(posedge clk )beginif(count1=='d25000)begin div1khz<=~div1khz;count1<=0;endelsebegin count1<=count1+1'b1;endend//-------------fenping--1hz-------------------------------always @(posedge div1khz)beginif(count2=='d500)begin div1hz<=~div1hz;count2<=0;endelsebegin count2<=count2+1'b1;endend//----------------------------------------------------------always @(posedge div1hz or negedge clr)beginif(!clr)begincount_one<='d0;count_ten<='d3;count_flag<=1'b0;endelse if((!input_flag)&(!count_flag))begin if(count_one=='d0&&count_ten=='d0)begin count_flag<=1'b1;endelse if(count_one=='d0)begin count_one<=4'b1001;count_ten<=count_ten-1'b1;endelsebegin count_one<=count_one-1'b1;endendelsebegin count_one<=count_one;count_ten<=count_ten;endend//-----------------------------------------------------------always @(posedge clk ) //or input1 or input2 or input3 or input4 beginif(!clr)beginLED_N<=4'b1111;//clock_flag<=1'b0;input_flag<=1'b0;data<=4'b0000;endelse if((!input_flag)&(!count_flag))beginif(input1==0)begindata<=4'b0001;LED_N<=4'b0111;input_flag<=1'b1;endelse if(input2==0)begindata<=4'b0010;LED_N<=4'b1011;input_flag<=1'b1;endelse if(input3==0)begindata<=4'b0011;LED_N<=4'b1101;input_flag<=1'b1;endelse if(input4==0)begindata<=4'b0100;LED_N<=4'b1110;input_flag<=1'b1;endelsebegindata<=data;LED_N<=LED_N;input_flag<=input_flag;endendend//-------------led灯及蜂鸣器--------------------------------------------------- always @(posedge clk)beginLED<=LED_N;clockin<=div1khz&(input_flag|count_flag);//dat<=data;end//--------------shu ma guan sao miao数码管扫描--------------------------------- always @(posedge div1khz)beginif(cnt=='d3)begin cnt<=0;endelsebegin cnt<=cnt+1'b1;endend//-----------------------------------------------------always @(cnt,data,count_one,count_ten)begincase(cnt)//3'b000 : begin scan<=8'b01111111;end3'b001 : begin scan<=8'b10111111;dat<=data;end //选手编号3'b010 : begin scan<=8'b11011111;dat<=count_one;end //倒计时3'b011 : begin scan<=8'b11101111;dat<=count_ten;enddefault : begin scan<=8'bx;dat<=4'bx;endendcaseend//--------------------------------------------------------always @(dat)begincase(dat)4'b0000 : seg[7:0]<=8'b11000000;4'b0001 : seg[7:0]<=8'b11111001;4'b0010 : seg[7:0]<=8'b10100100;4'b0011 : seg[7:0]<=8'b10110000;4'b0100 : seg[7:0]<=8'b10011001;4'b0101 : seg[7:0]<=8'b10010010;4'b0110 : seg[7:0]<=8'b10000010;4'b0111 : seg[7:0]<=8'b11111000;4'b1000 : seg[7:0]<=8'b10000000;4'b1001 : seg[7:0]<=8'b10010000;4'b1010 : seg[7:0]<=8'b10001000;4'b1011 : seg[7:0]<=8'b10000011;4'b1100 : seg[7:0]<=8'b11000110;4'b1101 : seg[7:0]<=8'b10100001;4'b1110 : seg[7:0]<=8'b10000110;4'b1111 : seg[7:0]<=8'b10001110;default : seg[7:0]<=8'bx;endcaseendendmodule二、框图三、设计思路四路抢答,有30s倒计时,当有人抢答时,数码管显示对应选手编号,同时对应LED灯亮,蜂鸣器响起,此时其他选手抢答无效。

verilog_hdl_fpga抢答器

verilog_hdl_fpga抢答器

FPGA期末结业论文基于FPGA&VerilogHDL的四路抢答器院系:物理与电子学院专业:电子信息科学与技术任课教师:学号:姓名:2013年12月目录(0)摘要 (2)(1)引言 (3)1.1关于课程设计 (3)1.1.1课程设计目的 (3)1.1.2课程设计内容 (3)1.2开发工具简介 (4)1.2.1 EDA技术 (4)1.2.2 硬件描述语言-Verilog HDL (4)1.2.3 Verilog HDL设计流程 (5)1.2.4 FPGA基本特点 (5)1.2.5 FPGA工作原理 (5)(2)概述 (5)2.1 设计过程 (5)2.1.1系统设计要求 (5)2.1.2系统设计方案 (6)(3)系统设计 (6)3.1系统组图 (6)3.2系统主源程序 (8)(4)仿真综合 (10)(5)结论 (13)(6)参考文献 (13)(7)附录 (13)0摘要抢答器是在竞赛、文体娱乐活动(抢答活动)中,能准确、公正、直观地判断出抢答者的机器。

电子抢答器的中心构造一般都是由抢答器由单片机以及外围电路组成。

本设计是以四路抢答为基本概念。

从实际应用出发,利用电子设计自动化( EDA)技术,用可编程逻辑器件设计具有扩充功能的抢答器。

它以Verilog HDL硬件描述语言作为平台,结合动手实验而完成的。

它的特点是电路简单、制作方便、操作简单、方便、性能可靠,实用于多种智力竞赛活动。

本抢答器的电路主要有四部分组成:鉴别锁存电路、FPGA主芯片EP1C3T144C8电路、计分电路以及扫描显示模块的电路,并利用Quartus II工具软件完成了Verilog HDL源程序编写和硬件下载。

这个抢答器设计基本上满足了实际比赛应用中的各种需要。

在实际中有很大的用途。

关键词:抢答器 Quartus II Verilog HDL EP1C3T144C81引言硬件描述语言 Hardware Description Language 是硬件设计人员和电子设计自动化 EDA 工具之间的界面。

基于XILINX FPGA的抢答器设计

基于XILINX FPGA的抢答器设计

基于XILINX FPGA的抢答器设计电子科技大学微电子与固体电子学院吴洪天2603001018目录一、摘要 (2)二、任务要求 (3)三、总体设计方案 (4)四、各模块实现过程与仿真结果 (6)(一)选手编码锁存器模块 (6)(二)分频器模块 (9)(三)蜂鸣器模块 (11)(四)定时器模块 (15)(五)显示译码模块 (18)(六)顶层模块 (21)五、下载和调试 (26)六、总结 (27)一、摘要FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,通过它可以实现各种数字逻辑电路。

随着微电子技术的发展,FPGA内部集成了越来越多的门电路单元,利用FPGA可实现的系统也越来越复杂。

为了实现对FPGA 的编程配置,需要使用硬件描述语言,最常用的硬件描述语言有VHDL和Verilog hdl两种,由于Verilog语法简单,且接近于C语言,使用也相对较灵活,因此这里选择使用Verilog进行编程。

在这里,我们要用FPGA实现一个四个选手的抢答器。

抢答器是一种典型的异步时序逻辑电路,因此整个系统不受同步时钟的控制。

在进行系统设计时,采用自顶而下的设计思路,先根据系统的整体功能构思出顶层模块的功能,再根据具体的功能分成各种子模块进行设计。

在用硬件描述语言进行描述时,可以有两种描述方式,一种是行为描述,另一种是结构描述。

行为描述方式按照模块要实现功能用描述性语句描述模块输入对模块输出的影响,这种描述方式简单灵活,可以不用过多考虑具体的电路结构,然而,这样也可能存在所描述的电路无法实现的情况,造成综合工具无法综合;结构描述方式类似于传统构建电路的方法,利用各种已经构造好的模块或元件直接相连形成新的模块,这种描述方式需要考虑电路的具体结构,因此设计起来也相对较麻烦,但可综合率较高。

在这个系统的设计中,各个子模块采用行为描述方式进行构造,以提高效率,但需要时刻考虑所描述的语句是否可综合,顶层模块采用结构描述语句,由于顶层模块只需简单地将各个子模块连接在一起,无需考虑电路的工作的过程和原理,因此采用结构描述方式也很容易。

用VerilogHDL编写四路抢答器

用VerilogHDL编写四路抢答器
input wire [3:0]qiang_da; reg [2:0]bian_ma; wire suo; input wire qing_ling; input wire fankui; output reg [2:0]bian_ma_cun; output wire suo_1;
always@(*) begin case(qiang_da) 1:bian_ma=3'b001; 2:bian_ma=3'b010; 4:bian_ma=3'b011; 8:bian_ma=3'b100; default:bian_ma=3'b000; endcase end
assign suo=(~bian_ma_cun[0])&(~bian_ma_cun[1])&(~bian_ma_cun [2]);
assign suo_1=suo&fankui;
always@(*) begin if(qing_ling==1) bian_ma_cun<=3'b000; else if(suo_1==0) bian_ma_cun<=bian_ቤተ መጻሕፍቲ ባይዱa_cun; else bian_ma_cun<=bian_ma; end
output wire [6:0]a_to_g; output wire [3:0]A_TO_D; input wire clk;//50MHz时钟 wire [3:0]qian; wire [3:0]bai; wire [2:0]shi; wire [2:0]ge; wire cp;//1s时钟 input wire [3:0]qiang_da; input button; wire suo_1; wire [2:0]bian_ma_cun; wire fankui; output wire xuan; shumaguan shumaguan0(a_to_g,A_TO_D,clk,qian,bai,shi,ge); cp_1s cp_1s0(clk,cp); xuan_shou xuan_shou0(qiang_da,button,suo_1,bian_ma_cun,fankui); wei_xuan wei_xuan0(bian_ma_cun,xuan,shi,ge); fuwei_kongzhi fuwei_kongzhi0(button,xuan); jishu_kongzhi jishu_kongzhi0(bai,qian,cp,suo_1,xuan,fankui); endmodule

数字电子技术实验报告——基于FGPA的4位智能抢答器(verilog HDL)

数字电子技术实验报告——基于FGPA的4位智能抢答器(verilog HDL)

基于FPGA的4位智能抢答器一、设计任务要求基于E DA/SOPC 系统开发平台,运用Q uartusⅡ可编程逻辑器件开发软件,设计一个4位智能抢答器,在开发箱上,本系统使用频率为1000 赫兹的时钟脉冲。

要求如下:1、可以同时供4名选手抢答,其编号分别为1、2、3、4,各用抢答按键S1、S2、S3、S4,按键编号与选手编号对应。

主持人设置有一个“开始”按键S5,一个“复位”按键S6,用于控制抢答的开始和系统的复位;各个按键按下为“0”,弹起为“1”;2、系统上电和按下“复位”按键后4位数码管显示“0000”,此时只有“开始”按键有效,其他按键不起作用;3、当主持人按下“开始”按键后,开始计时,数码管左边两位显示计时的时间,单位为“秒”;如果有选手按下抢答按键,定时器停止工作,数码管显示器上左边两个数码管显示抢答时刻的时间;选手编号立即锁存并显示在右边的两个数码管上,同时封锁输入电路,禁止其他选手抢答;此状态一直保持到主持人将系统复位为止;4、抢答的有效时间为10 秒,如果定时抢答的时间已到而没有选手抢答,本次抢答无效,封锁输入电路,禁止抢答,数码管左边显示“10”,右边显示“00”;此状态一直保持到主持人将系统复位为止;5、附加提高:在主持人未按下开始按键时,如果有人抢答则犯规,在数码管上右边两位闪烁犯规选手的编号,闪烁频率为0.5H Z,左边两位显示“00”;此状态一直保持到主持人将系统复位为止。

二、设计步骤本次设计主要采用V erilog HDL 语言,总体编程思路采用模块化设计方式,主要分为3 个模块,一个主控制及按键输入模块,一个计时显示模块,一个抢答组号显示模块,分别对这3个子模块进行独立编程设计,编译仿真通过并生成元件,在顶层使用原理图或者Verilog HDL 语言的方式将3个模块连接起来完成整个设计。

锁定管脚并编译仿真通过,下载到开发箱进行测试。

三、模块设计思路对于这个任务来说,计时显示模块和抢答组号显示模块的模块并不复杂,复杂的模块是主控制及按键输入模块,所以我决定再将主控制模块拆分成两个小的模块——按键输入模块、按键输入判断输出模块。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

moduleqiangda4(clk,clr,inputEn,add,stu,inputL1,inputL2,inputL3,inputL4,Led1,Led2,Led3,B uzzer);// 开始声明各个端口//输入口input clk,clr,inputEn,add,stu,inputL1,inputL2,inputL3,inputL4;//输出口output [0:7] Led1; //倒计时时使用的LED控制端output [0:7] Led2; //数码管控制端output [0:7] Led3; //分数显示数码管控制端output Buzzer; //蜂鸣器//各个寄存器变量声明reg [0:7] Led1;reg [0:7] Led2;reg [0:7] Led3;reg cnt=32'b0;reg Buzzer;reg score=4’hf;//分数显示寄存器//配置寄存器,EnFlat是表明开始抢答的标志位reg EnFlat=1'b0;//BuClk是蜂鸣器的标志位reg BuClk=1'b0;//BuL是做蜂鸣器的延时用reg [0:7]BuL=8'd0;//抢答选手标志位reg answer=3’d0;//各组分数标志位reg score1=4’d5;reg score2=4’d5;reg score3=4’d5;reg score4=4’d5;//------------初始化模块---------------always @ (posedge clk)//捕捉时钟begin//初始化各按键并开始抢答beginif(inputEn==1'b0)begin//初始化各个标志位和参数EnFlat=1'b1;//倒计时开始时8个Led灯全亮Led1=8'b11111111;//组号显示静态数码管(数码管为共阳极)的控制端,有8位Led2=8'b11111111;//分数显示数码管控制端Led3=8'b11111111;//蜂鸣器标志位BuClk=1'b0;//蜂鸣器的控制管脚,低电平为发声音Buzzer=1'b1;endend//--------抢答模块-------beginif(EnFlat==1'b1)begin//如果按键1按下if(inputL1==1'b0)begin//禁止其他选手抢答EnFlat=1'b0;//选手标志位改变,用于加减分数模块answer=3’d1;//静态数码管显示序号'1' ,及显示选手对应的组号Led2=8'hf9;//指示蜂鸣器发声BuClk=1'b1;end//如果按键2按下else if(inputL2==1'b0)begin//禁止其他选手抢答EnFlat=1'b0;answer=3’d2;Led2=8'ha4;BuClk=1'b1;end//如果按键3按下else if(inputL3==1'b0)begin//禁止其他选手抢答EnFlat=1'b0;answer=3’d3;Led2=8'hb0;BuClk=1'b1;end//如果按键4按下else if(inputL4==1'b0)begin//禁止其他选手抢答EnFlat=1'b0;answer=3’d4;Led2=8'h99;BuClk=1'b1;endendend//-------------------加减分数模块----------------//第一组加减分if(answer ==3’d1)beginif(add)score1=score1+1;//当主持人判定选手的回答正确时,按下add键进行加分操作elseif(stu)score1=score1-1;//当主持人判定选手的回答错误时,按下stu键进行减分操作score=score1;//把第一组的分数赋值给分数寄存器end//第二组加减分if(answer ==3’d2)beginif(add)score2=score2+1;//当主持人判定选手的回答正确时,按下add键进行加分操作elseif(stu)score2=score2-1;//当主持人判定选手的回答错误时,按下stu键进行减分操作score=score2;end//第三组加减分if(answer ==3’d3)beginif(add)score3=score3+1;//当主持人判定选手的回答正确时,按下add键进行加分操作elseif(stu)score3=score3-1;//当主持人判定选手的回答错误时,按下stu键进行减分操作score=score3;end//第四组加减分if(answer ==3’d4)beginif(add)score4=score4+1;//当主持人判定选手的回答正确时,按下add键进行加分操作elseif(stu)score4=score4-1;//当主持人判定选手的回答错误时,按下stu键进行减分操作score=score4;end//-----------------倒计时模块--------------------beginif(EnFlat==1'b1)beginif(cnt!=32'd4*******)//计时实现1HZ分频cnt=cnt+32'd1;elsebegincnt=32'd0;Led1=8'b11111111<<1'b1;//Led1左移一个单位,实现一秒的倒计时endendif(Led1==8'b0)//倒计时结束还没有按键按下,则抢答停止且蜂鸣器响EnFlat=1'b0;BuClk=1'b1;end//----------蜂鸣器模块-----------------//当蜂鸣器标志位置1时//进入此蜂鸣器处理程序beginif(BuClk==1'b1)begin//蜂鸣器发声Buzzer=1'b0;//延时变量加1BuL = BuL + 8'd1;//当到达延时的时间时关掉蜂鸣器if(BuL==8'd255)begin//延时变量复位BuL=8'd0;//蜂鸣器标志位复位BuClk=1'b0;//蜂鸣器停掉Buzzer=1'b1;endendend//-------------重置模块----------------//按下clr键以后各组参数重置,整个比赛重新开始if(clr)begin//重置各个标志位和参数EnFlat=1'b1;//重置时8个Led灯全亮Led1=8'b11111111;//选手号静态数码管的控制端,有8位Led2=8'b11111111;//选手分数显示数码管重置Led3=8'b11111111;//蜂鸣器标志位重置BuClk=1'b0;//蜂鸣器的控制管脚重置,低电平为发声音Buzzer=1'b1;//各组分数重置score1=4’d5;score2=4’d5;score3=4’d5;score4=4’d5;//分数显示寄存器重置answer=8’hff;end//-----------数码显示模块------------begincase(score)4'h0: Led3 = 8'hc0; //显示04'h1: Led3 = 8'hf9; //显示14'h2: Led3 = 8'ha4; //显示24'h3: Led3 = 8'hb0; //显示34'h4: Led3 = 8'h99; //显示44'h5: Led3 = 8'h92; //显示54'h6: Led3 = 8'h82; //显示64'h7: Led3 = 8'hf8; //显示74'h8: Led3 = 8'h80; //显示84'h9: Led3 = 8'h90; //显示94'ha: Led3 = 8'hbf; //显示-default:Led3 = 8'hff; //不显示endcaseendendendmodule。

相关文档
最新文档