Verilog HDL抢答器设计

设计的内容

1 用EDA实训仪的I/O设备和PLD芯片实现智能电子抢答器的设计
2 智能电子抢答器可容纳4组参赛者抢答,每组设一个抢答器
3 电路具有第一抢答信号的鉴别和锁存功能。在主持人将复位按钮按下后开始抢答,并用EDA实训仪上面的八段数码管显示抢答者的序号,同时扬声器发出“嘟嘟”的响声,并维持3秒钟,此时电路自锁,不再接受其他选手的抢答信号
4 设置计分电路,每组开始时设置为6分,抢答后由主持人计分,答对一次加1分,错一次减1分。

系统设计要求
本设计的具体要求是:
(1) 设计制作一个可容纳四组参赛者的数字智力抢答器,每组设置一个抢答按钮。
(2) 电路具有第一抢答信号的鉴别和锁存功能。在主持人按下复位按钮后,若参加者按抢答开关,则该组指示灯亮。此时,电路应具备自锁功能,使别组的抢答开关不起作用。
(3)自锁后,用八段数码管显示抢答者的序号,同时扬声器发出“嘟嘟”并且持续3秒。
(4) 设置计分电路。 每组在开始时预置成6,抢答后由主持人计分,答对一次加1,否则减1分 。

4.2 系统设计方案
根据系统设计要求可知,系统的输入信号有:各组的抢答按钮1、2、3、4,系统清零信号CLR,系统时钟信号CLK,计分复位端RST,加分按钮端ADD,计时预置控制端LDN,计时使能端EN,计时预置数据调整按钮TA、TB;系统的输出信号有:四个组抢答成功与否的指示灯控制信号输出口LEDA、LEDB、LEDC、LEDD,四个组抢答时的计时数码显示控制信号若干,抢答成功组别显示的控制信号若干,各组计分动态显示的控制信号若干。本系统应具有的功能有:第一抢答信号的鉴别和锁存功能;数码管显示;计分控制。
根据以上的分析,我们可将整个系统分为四个主要模块:抢答鉴别模块;抢答计分模块;显示译码模块;EP1C3T144C8 接口模块。

                     抢答 原理图

                  显示 蜂鸣 原理图





                 计分显示模块(由于板大小限制,只显示两组)pcb


                          EP1C3T144C8 接口原理图

系统的工作原理如下:当主持人按下使能端EN时,抢答器开始工作,1、2、3、4四位抢答者谁最先抢答成功则此选手的台号灯(LED1~LED4)将点亮,并且主持人前的组别显示数码管讲显示出抢答成功者的台号;接下来主持人提问,若回答正确,主持人按加分按钮,抢答积分模块将给对应的组加分,并将组的总分显示在对应的选手计分数码管上。在此过程中。完成第一轮抢答后,主持人清零,接着重新开始,步骤如上。

4.3 主要VHDL源程序

在这里插入代码片module YangLu(clk,inputEn,inputL1,inputL2,inputL3,inputL4,Sig1,Sig2,Sig3,Sig4,Led,Buzzer);
            // 一开始时声明有哪些端口  
//输入口
input clk,inputEn,inputL1,inputL2,inputL3,inputL4;
//输出口
output Sig1,Sig2,Sig3,Sig4;
output [0:7]Led; 
output Buzzer;

//在输出口配置个寄存器,以便运算
reg Sig1=1'b1,Sig2=1'b1,Sig3=1'b1,Sig4=1'b1;
reg [0:7]Led;
reg Buzzer;

//配置寄存器,EnFlat是表明开始抢答的标志位
reg EnFlat=1'b0;
//BuClk是蜂鸣器的标志位
reg BuClk=1'b0;
//BuL是做蜂鸣器的延时用
reg [0:7]BuL=8'd0;

always @ (posedge clk)//捕捉时钟
begin

	//初始化各按键并开始抢答
	if(inputEn==1'b0)
	begin
	
		//初始化各个标志位和参数
		EnFlat=1'b1;
		
		//各个按键对应的LED控制端
		Sig1=1'b1;
		Sig2=1'b1;
		Sig3=1'b1;
		Sig4=1'b1;
		
		//静态数码管的控制端,有8位
		Led=8'b11111111;
		
		BuClk=1'b0;
		
		//蜂鸣器的控制管脚,低电平为发声音
		Buzzer=1'b1;
	
	end
	
	//开始抢答
	if(EnFlat==1'b1)
	begin
	
		//如果按键1按下
		if(inputL1==1'b0)
		begin
		
			//禁止其他选手抢答
			EnFlat=1'b0;
			
			//对应的LED点亮
			Sig1=1'b0;
			
			//静态数码管显示序号'1'
			Led=8'b01101111;
			
			//指示蜂鸣器发声
			BuClk=1'b1;
		
		end  //如果按键2按下
		else if(inputL2==1'b0)
		begin
		
			//禁止其他选手抢答
			EnFlat=1'b0;
			Sig2=1'b0;
			
			Led=8'b00011010;
			
			BuClk=1'b1;
		
		end  //如果按键3按下
		else if(inputL3==1'b0)
		begin
		
			//禁止其他选手抢答
			EnFlat=1'b0;
			Sig3=1'b0;
			
			Led=8'b01001010;
			
			BuClk=1'b1;
		
		end  //如果按键4按下
		else if(inputL4==1'b0)
		begin
		
			//禁止其他选手抢答
			EnFlat=1'b0;
			Sig4=1'b0;
			
			Led=8'b01101001;
			
			BuClk=1'b1;
		
		end
	
	end
	
	//当蜂鸣器标志位置1时
	//进入此蜂鸣器处理程序
	if(BuClk==1'b1)
	begin
	
		//蜂鸣器发声
		Buzzer=1'b0;
	
		//延时变量加1
		BuL = BuL + 8'd1;
		
		//当到达延时的时间时关掉蜂鸣器
		if(BuL==8'd255)
		begin
		
			//延时变量复位
			BuL=8'd0;
			
			//蜂鸣器标志位复位
			BuClk=1'b0;
			
			//蜂鸣器停掉
			Buzzer=1'b1;
		
		end
	
	end

end

endmodule


相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页