有没有大神懂Verilog HDL 的,这个十一四人抢答器电路的程序,能不能给解释一下

有没有大神懂Verilog HDL 的,这个十一四人抢答器电路的程序,能不能给解释一下,第1张

/**********************************

(1)实现一四人抢答器,有人抢答成功后,其他人再抢答无效;

(2)通过蜂鸣器响1秒来提示抢答成功,并在数码管上显示抢答者的序号;

(3)主持人通过按键清除抢答信息,并开始 30 秒的答题倒计时,当倒计时

结束时,通过蜂鸣器响 1 秒来提示回答问题时间到,此时可以开始新一轮的抢答

************************************/

module qiangda(rst,clk,ina,inb,inc,ind,judge,clk_1hz,wei,duan,beep,wei1,duan1,clk_1khz)

input clk,clk_1hz

input ina,inb,inc,ind,judge

output[3:0] wei

output[7:0] duan

input rst,clk_1khz

output [3:0] wei1

output [7:0] duan1

output beep

reg[3:0] wei

reg[7:0] duan

reg flag

reg [5:0] shi,ge,data

reg [4:0] count

reg [3:0] wei1

reg [7:0] duan1

reg beep

reg yu

reg [1:0] count3

always @(posedge clk)

begin

if(!rst)    //系统复位,个人认为复位不够完整

begin

yu = 0

end

if(!judge) //主持人控制按键

begin

flag=0 //允许抢答

wei=4'b1111 //数码管全不亮

                      //【个人认为分成duan1和duan,wei1和wei的数码管数据总线不经济】

duan=8'hff

yu=1 //重新开始倒计时

end

else

begin

if(ge==6'b000000&&shi==6'b000000) //处于等待状态,实际上是等主持人按键(!judge),

else

begin

if(!ina) //若a抢答

begin

if(!flag) //若无人抢答成功

begin

wei=4'b1101

duan=8'hf9 //数码管显示1,代表a抢答成功

flag=1 //抢答标志位有效

end

end

else if(!inb) //b抢答处理电路

begin

if(!flag)

begin

wei=4'b1101

duan=8'ha4 //数码管显示2,代表b抢答成功

flag=1

end

end

else if(!inc)

begin

if(!flag)

begin

wei=4'b1101

duan=8'hb0 //数码管显示3

flag=1

end

end

else if(!ind)

begin

if(!flag)

begin

wei=4'b1101

duan=8'h99 //数码管显示4

flag=1

end

end

end

end

end

always@(posedge clk_1hz or negedge rst)

begin

if(!rst)

begin

count = 0

end

else if(count >= 5'd30) //计时达到30秒,停止计时

count = count

else if(yu==1) //触发条件yu=1时,重新开始计数【那不是变成从30开始数?感觉该段有些问题】

count = count+5'b1

end

//以下always过程块为shi和ge的译码电路,完成倒计时功能

always @(count)

begin

if(count>=5'b10101) //count>20时

begin

shi = 5'b00000 //shi=0

ge = 5'b11110-count //ge = 30-count

end

else if(count>=5'b01011) //10<count<=20时

begin

shi=5'b00001 //shi=1

ge=5'b10100-count //ge = 20-count

end

else if(count>=5'b00001) //0<count<=10时

begin

shi=5'b00010 //shi=2

ge=5'b01010-count //ge = 10-count

end

else //其它情况,i.e. count = 0

begin

shi=5'b00011 //shi=3

ge=5'b0 //ge = 0

end

end

//以下always过程块为蜂鸣器发声驱动电路

always@(posedge clk_1hz)

if(flag|(shi==0&&ge==0)) //flag==1,有人抢答成功

//shi==0&&ge==0,倒计时结束

begin //上述两种情况下蜂鸣器响一秒

if(count3==2'b1)

begin

beep<=0

count3<=count3

end

else

begin

beep<=1

count3<=count3+2'b1

end

end

else

begin

beep<=0

count3<=0

end

//以下always过程块是数码管动态刷新电路,动态显示倒计时信息(shi和ge)

always @(clk_1khz)

begin

if(!rst)

wei1 = 4'b0000

else if(clk_1khz)

begin

wei1=4'b0111

data=ge

end

else

begin

wei1=4'b1011

data=shi

end

end

always @(data) //数字显示译码,共阳极数码管(duan1)

begin

case(data)

6'b000000: duan1=8'b1100_0000

6'b000001: duan1=8'b1111_1001

6'b000010: duan1=8'b1010_0100

6'b000011: duan1=8'b1011_0000

6'b000100: duan1=8'b1001_1001

6'b000101: duan1=8'b1001_0010

6'b000110: duan1=8'b1000_0010

6'b000111: duan1=8'b1111_1000

6'b001000: duan1=8'b1000_0000

6'b001001: duan1=8'b1001_0000

default:duan1=8'b1111_1111

endcase

end

endmodule

一设计任务

数字式竞赛抢答器

二设计条件

本设计基于学校实验室Multisim8.0仿真软件和计算机.

三设计要求

1、设计制作一个可容纳4组的数字式抢答器,每组设置一个抢答按钮供抢答者使用。

2、根据数字式抢答器的功能和使用步骤,设计抢答者的输入抢答锁定电路、抢答者序号编码、译码和显示电路。

3、设计定时电路,声、光报警或音乐片驱动电路。

4、设计控制逻辑电路,启动、复位电路。

我的设计内容

1.设计思想

根据设计的要求分块设计抢答、锁存、计时、显示、和报警功能。

(1)抢答和锁存电路要求能够对信号进行存储和所定,可用触发器组成。

(2)对于显示部分就直接用编码器、七段数码管驱动译码器和七段数码管组成。

(3)计时电路是按秒进行倒计时,所以计时电路可以减法计数器、秒脉冲生成电路、和显示电路。由于电路对秒脉冲信号的占空比要求的不高所以可以用555定时器构成多谐振荡电路来实现.

(4)报警电路,按题目要求可采用声、光报警,光报警用发光二极管电路实现声报警用蜂鸣器来实现。

各个模块设计好后要把各个模块组合起来进行调试,主要是解决题目中要求的多个锁定问题:

(1)抢答后抢答电路的锁定功能。

(2)抢答后计时器的锁定功能。

(3)计时结束后无人抢答时抢答电路的锁定功能。

(4)计时结束后无人抢答时计时器的锁定功能

抢答器是通过设计电路,以实现如字面上意思的能准确判断出抢答者的电器。在知识竞赛、文体娱乐活动(抢答赛活动)中,能准确、公正、直观地判断出抢答者的座位号。更好的促进各个团体的竞争意识,让选手门体验到战场般的压力感。

传统抢答器只是大概判断出抢答成功或犯规选手台号,无法显示出每个选手的抢答时间。而今抢答器可以通过数据来说明裁决结果的准确性、公平性。使比赛大大增加了娱乐性的同时,也更加公平、公正。新增无线抢答器更是抢答器史上的一大改革。

搭配全新升级版软件,采用嵌入式PPT设计,可支持三种格式题库导入(文本文档、WORD、Excel),15O道题导入只需20秒,导入的题目直接以PPT方式展现,可直接在展现页面进行题目再修改。此款软件还提供多种背景模板,供客户选择使用,点击任何一款即可自动导入到题目中。非常简单便捷。

LIBRARY IEEE

USE IEEE.STD_LOGIC_1164.ALL

USE IEEE.STD_LOGIC_UNSIGNED.ALL

ENTITY qdq IS

PORT ( a1,a2,a3,a4,rest,clk : IN STD_LOGIC

s1  : OUT STD_LOGIC

LED7S: OUT STD_LOGIC_VECTOR(6 DOWNTO 0) )

end

ARCHITECTURE one OF qdq IS

SIGNAL d: STD_LOGIC_VECTOR(3 DOWNTO 0)

SIGNAL  f : STD_LOGIC

SIGNAL s2:  STD_LOGIC_VECTOR(2 DOWNTO 0) 

BEGIN

p1:PROCESS(a1,a2,a3,a4,rest,clk )

BEGIN

if(rest='1')then

f<='0' d<="0000"

elsif  rising_edge(clk)then

if ((a1='1')or(d(3)='1'))and not((d(0)='1' )or( d(1)='1') or (d(2)='1')) then d(3)<='1'

end if

if ((a2='1')or(d(2)='1'))and not((d(0)='1') or (d(1)='1' )or (d(3)='1')) then d(2)<='1'

end if

if ((a3='1')or(d(1)='1'))and not((d(0)='1') or (d(2)='1')or (d(3)='1')) then d(1)<='1'

end if

if ((a4='1')or(d(0)='1'))and not((d(1)='1') or (d(2)='1') or( d(2)='1'))then d(0)<='1'

end if

f<=a1 or a2 or a3 or a4

end if 

end process

s1<=f and clk

p2:PROCESS( d)

BEGIN

If d="1000"  then  LED7S <= "0000110" 

elsIf d="0100"  then  LED7S <= "1011011" 

elsIf d="0010"  then  LED7S <= "1001111" 

elsIf d="0001"  then  LED7S <= "1100110" 

Else LED7S <= "0111111" 

end process

end one


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11372729.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存