当前位置:文档之家› verilog HDL抢答器(两个程序)

verilog HDL抢答器(两个程序)

verilog HDL抢答器(两个程序)
verilog HDL抢答器(两个程序)

一、设计任务

智力竞赛抢答器Verilog HDL要求有6位参赛者进行抢答,有六个抢答信号

进行抢答。当有抢答选手按下抢答键后系统能够快速准确的判断是那一组选手按

下了抢答信号,由于系统比较小,速度比较快一般不会有同时按下的可能,所以

只有六种状态,然后系统能够根据这六种状态进行适时的显示和提示。当有选手

按下以后就对抢答信号进行锁存,其他选手的输入无效。然后就是对抢答进行时

间限制了,根据设定的时间进行倒计时,当倒计时完成还没有人抢答的时候系统

发出警报声音提示时间已经到了。当有选手在主持人未按下抢答键抢答时视为超

前抢答,系统显示该选手号,同时蜂鸣器响,该抢答无效。还有清除复位键,抢

答完成以后按复位键即可清除已有的状态。通过Verilog HDL程序代码实现系统

的各个功能。

二、设计目的与要求

目的:理论联系实际,巩固和运用所学课程,提高分析、解决计算机技术实际问题的独立工作能力,培养学生正确的设计思想,严肃认真、实事求是的科学态度和勇于探索的创新精神。通过对一个智力抢答器的设计,进一步加深对计算机原理以及数字电路应用技术方面的了解与认识,进一步熟悉数字电路系统设计、制作与调试的方法和步骤,通过Verilog 程序的编写,进一步熟悉Verilog HDL 的语法知识;规范化训练学生撰写技术研究报告,提高书面表达能力。

要求:

掌握FPGA设计系统的一般方法。

熟练掌握使用modelsim软件设计较复杂的数字逻辑电路。

培养学生独立分析问题和解决实际问题的能力。

三、课程设计的内容

设计一抢答器,要求如下:

(1)抢答台数为6;

(2)具有抢答开始后20s倒计时,20秒倒计时后6人抢答显示超时,并报警;

(3)能显示超前抢答台号并显示犯规报警;

(4)系统复位后进入抢答状态,当有一路抢答按键按下,该路抢答信号将其

余各路抢答信号封锁,同时铃声响起,直至该路按键松开,显示牌显示该路抢答台号。

四、系统设计方案

根据系统设计要求可知,系统的输入信号有:主持人按钮inputEn,各选手的

抢答按钮分别是inputL1、inputL2、inputL3、inputL4,inputL5,inputL6,主

持人和选手抢答按钮都是低电平有效,系统复位信号clr(高电平有效),系统时钟信号clk,系统的输出信号有:六个人抢答成功与否的指示灯控制信号输出口Led2,犯规抢答时报警器Buzzer(低电平有效)。本系统应具有的功能有:能够准确的判断出是哪位抢答者,当主持人没按抢答时,有人抢答了则蜂鸣器报警,并显示该选手号,当主持人按了抢答键时有人抢答了,同时封锁抢答信号,其他选手抢答无效,不显示该选手号。

五、仿真过程与仿真结果

仿真过程:使用ModelSim进行功能测试,首先在里面进行相应的设置,在工程文件夹下面会新建一个modelsim的文件夹,然后编写实现功能的程序和测试文件,最后保存编译执行就可以进行功能仿真了。

仿真结果:

结果分析与讨论:可以看到0时刻系统复位状态,2s时2号超前抢答(inputEn 为高电平,inputL2为低电平),系统显示2蜂鸣器并犯规报警(Buzzer为低电平),8s时系统复位状态,12s时4号选手先抢答成功(inputL4为低电平)显示4,14s 时3号选手后抢答,不显示3,20s时系统复位。

六、总结

通过本次合成设计,我又一遍熟悉了Verilog HDL语言进行建模,并且通过实际操作学会了怎么使用Modelsim这个软件来完成一个完整的课程设计。以及对基于FPGA的系统开发流程有了一个整体认识,我越来越认识到一点,编程对

项目实现有着至关重要的,我们在硬件开发的过程中更应该重视编程,将编程看作是完善开发的不可缺少的一部分。虽然题目简单,但这也磨练了我的意志。第一次做的太复杂了,然后一次次修改,做成最简单功能的。在一次次的反复设计、论证和测试中,提高了逻辑分析能力、全面分析问题的能力以及发现问题、解决问题的能力。通过对各方面资料的收集,我的知识面也进一步拓宽了。同时,我也发现了自己的不足,像语言表达还比较差,不能更清楚地表达自己的意思,逻辑分析能力和编程能力有待提高,有些预先的想法都未能实现。在系统的结构设计上也还有很长的路需要走,这是需要时间去积累的。在今后的学习中我还得加以改进。

七、程序

系统主要Verilog HDL源程序:

module QiangDaQi

(clk,clr,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6,Led2,Buzze r); //一开始声明有哪些端口

input clk,clr,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6;

output [0:7]Led2;//Led2显示选手号

output Buzzer;//低电平时蜂鸣器发出声音

reg EnFlat=1'b0;//EnFlat为高电平时开始抢答

reg [0:2]Led2=3'd0;

reg Buzzer=1'b1;

always @ (posedge clk)//时钟上升沿

begin

if(inputEn==1)//如果主持人没按按钮就有人抢答

begin

if(inputL1==0)

begin Led2=3'd1;Buzzer=1'b0;end

if(inputL2==0)

begin Led2=3'd2;Buzzer=1'b0;end

if(inputL3==0)

begin Led2=3'd3;Buzzer=1'b0;end

if(inputL4==0)

begin Led2=3'd4;Buzzer=1'b0;end

if(inputL5==0)

begin Led2=3'd5;Buzzer=1'b0;end

if(inputL6==0)

begin Led2=3'd6;Buzzer=1'b0;end

end

if(inputEn==1'b0)//为低电平时表示主持人按下抢答按钮开始抢答

begin

EnFlat=1'b1;

if(EnFlat==1'b1)

begin

if(inputL1==1'b0)//一号选手抢答

begin

Led2=3'd1;

EnFlat=1'b0;//为低电平禁止其他选手抢答

Buzzer=1'b1;

end

else //一开始没加else发现仿真结果随着输入数据变化而变化 if(inputL2==1'b0)//二号选手抢答

begin

Led2=3'd2;

EnFlat=1'b0;

Buzzer=1'b0;

end

else

if(inputL3==1'b0)//三号选手抢答

begin

Led2=3'd3;

EnFlat=1'b0;//为低电平禁止其他选手抢答

Buzzer=1'b1;

end

else

if(inputL4==1'b0)//四号选手抢答

begin

Led2=3'd4;

EnFlat=1'b0;//为低电平禁止其他选手抢答

Buzzer=1'b1;

end

else

if(inputL5==1'b0)//五号选手抢答

begin

Led2=3'd5;

EnFlat=1'b0;//为低电平禁止其他选手抢答

Buzzer=1'b1;

end

else

if(inputL6==1'b0)//六号选手抢答

begin

Led2=3'd6;

EnFlat=1'b0;//为低电平禁止其他选手抢答

Buzzer=1'b1;

end

end

end

if(clr)//按下clr键以后各组参数重置,整个比赛重新开始

begin

EnFlat=1'b0;

Led2=3'd0;//为低电平时,选手前的灯点亮

Buzzer=1'b1;//为高电平不响

end

end

endmodule

测试程序

`timescale 1s/1s

module qiangdaqi_test();

reg clk,clr,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6;//输入口 wire [0:7]Led2;//Led2显示选手号

wire Buzzer;//低电平时蜂鸣器发出声音

QiangDaQi

u1(clk,clr,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6,Led2,Buzzer) ;

initial

begin

#0

clk=1;clr=0;inputEn=1;inputL1=1;inputL2=1;inputL3=1;inputL4=1;inputL5=1;inputL6 =1;

#2 inputL2=0;//二号选手超前抢答

#4 clr=1;inputL2=1;//复位

#2 clr=0;

#4 inputEn=0;inputL4=0;//四号选手先抢答显示4

#2 inputL3=0;//三号选手后抢答不显示3

#4 clr=1;inputEn=1;inputL3=1;inputL4=1;

#2 clr=0;

end

always #1 clk=~clk;

endmodule

程序二

module QiangDaQi

(clk,clr,add,stu,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6,Led1,L ed2,Led3,Buzzer);

//一开始声明有哪些端口

input

clk,clr,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6,add,stu;//输入口

output [0:5]Led1;//对应参赛选手前的灯

output [0:7]Led2,Led3;//Led2显示选手号Led3显示选手分数

output Buzzer;//低电平时蜂鸣器发出声音

reg EnFlat=1'b1;//EnFlat为高电平时开始抢答

reg BuClk=1'b0;//为高电平时进入蜂鸣器处理程序

//reg add,stu;//add答题正确加一分stu答题错误减一分

//reg clr=0;//重置键

reg [0:5]Led1=6'b111111;

reg [0:2] answer=3'd0;

reg[0:3] score=4'd0,score1=4'd0,score2=4'd0;

reg[0:3] score3=4'd0,score4=4'd0,score5=4'd0,score6=4'd0;//各选手分数计算reg Buzzer=1;

reg [0:4] daojishi=5'd20;//用于产生20s倒计时

reg [0:7]Led2=8'b11111111,Led3=8'b11111111;

always @ (posedge clk)//时钟上升沿

begin

if(inputEn==1)//如果主持人没按按钮就有人抢答

begin

if(inputL1==0)

begin Led1=6'b111110;answer=3'd1;BuClk=1'b1;end

if(inputL2==0)

begin Led2=6'b111101;answer=3'd2;BuClk=1'b1;end

if(inputL3==0)

begin Led2=6'b111011;answer=3'd3;BuClk=1'b1;end

if(inputL4==0)

begin Led2=6'b110111;answer=3'd4;BuClk=1'b1;end

if(inputL5==0)

begin Led2=6'b101111;answer=3'd5;BuClk=1'b1;end

if(inputL6==0)

begin Led2=6'b011111;answer=3'd6;BuClk=1'b1;end

end

if(inputEn==1'b0)//为低电平时表示主持人按下抢答按钮开始抢答begin

Led1=6'b111111;//为低电平时,选手前的灯点亮

BuClk=1'b0;

Buzzer=1'b1;//为高电平不响

end

if(EnFlat==1'b1)

begin

begin

if(inputL1==1'b0)//一号选手抢答

begin

EnFlat=1'b0;//为低电平禁止其他选手抢答

answer=3'd1;//为高电平时转到对应选手加减分程序中去

BuClk=1'b1;//转到蜂鸣器程序

end

if(inputL2==1'b0)//二号选手抢答

begin

EnFlat=1'b0;

answer=3'd2;

BuClk=1'b1;

end

if(inputL3==1'b0)//三号选手抢答

begin

EnFlat=1'b0;

answer=3'd3;

BuClk=1'b1;

end

if(inputL4==1'b0)//四号选手抢答

begin

EnFlat=1'b0;

answer=3'd4;

BuClk=1'b1;

end

if(inputL5==1'b0)//五号选手抢答

begin

EnFlat=1'b0;

answer=3'd5;

BuClk=1'b1;

end

if(inputL6==1'b0)//六号选手抢答

begin

EnFlat=1'b0;

answer=3'd6;

BuClk=1'b1;

end

end

begin

if(daojishi!=5'd0)//用于1Hz信号

daojishi=daojishi-1;

else//倒计时结束抢答器还没按下则抢答停止且蜂鸣器响 begin

daojishi=5'd20;

EnFlat=1'b0;

BuClk=1'b1;

end

end

begin

if(BuClk==1'b1)//当蜂鸣器标志为1时

Buzzer=1'b0;//蜂鸣器发声

end

begin

if(answer ==3'd1)//第一组加减分

begin

Led1=6'b111110;//点亮该选手前的LED灯

Led2=8'hf9;//选手号数码管显示1

if(add)

score1=score1+1;//当主持人判定选手的回答正确时,按下add键进行加分操作

else

if((stu||inputEn)&&(score1!=0))

score1=score1-1;//当主持人判定选手的回答错误时,按下stu键进行加分操作

else score1=0;

score=score1;//把第一组的分数赋值给分数寄存器

end

if(answer ==3'd2)//第二组加减分

begin

Led1=6'b111101;Led2=8'ha4;

if(add)

score2=score2+1;//当主持人判定选手的回答正确时,按下add键进行加分操作

else

if((stu||inputEn)&&(score2!=0))

score2=score2-1;//当主持人判定选手的回答错误时,按下stu键进行加分操作

else score2=0;

score=score2;//把第一组的分数赋值给分数寄存器

end

if(answer ==3'd3)//第三组加减分

begin

Led1=6'b111011;Led2=8'hb0;

if(add)

score3=score3+1;//当主持人判定选手的回答正确时,按下add键进行加分操作

else

if((stu||inputEn)&&(score3!=0))

score3=score3-1;//当主持人判定选手的回答错误时,按下stu键进行加分操作

else score3=0;

score=score3;//把第一组的分数赋值给分数寄存器

end

if(answer ==3'd4)//第四组加减分

begin

Led1=6'b110111;Led2=8'h99;

if(add)

score4=score4+1;//当主持人判定选手的回答正确时,按下add键进行加分操作

else

if((stu||inputEn)&&(score4!=0))

score4=score4-1;//当主持人判定选手的回答错误时,按下stu键进行加分操作

else score4=0;

score=score4;//把第一组的分数赋值给分数寄存器

end

if(answer ==3'd5)//第五组加减分

begin

Led1=6'b101111;Led2=8'h92;

if(add)

score5=score5+1;//当主持人判定选手的回答正确时,按下add键进行加分操作

else

if((stu||inputEn)&&(score5!=0))

score5=score5-1;//当主持人判定选手的回答错误时,按下stu键进行加分操作

else score5=0;

score=score5;//把第一组的分数赋值给分数寄存器

end

if(answer ==3'd6)//第六组加减分

begin

Led1=6'b011111;Led2=8'h82;

if(add)

score6=score6+1;//当主持人判定选手的回答正确时,按下add键进行加分操作

else

if((stu||inputEn)&&(score6!=0))

score6=score6-1;//当主持人判定选手的回答错误时,按下stu键进行加分操作

else score6=0;

score=score6;//把第一组的分数赋值给分数寄存器

end

begin

case(score)//???????

4'd0:Led3=8'hc0;4'd1:Led3=8'hf9;4'd2:Led3=8'ha4;

4'd3:Led3=8'hb0;4'd4:Led3=8'h99;4'd5:Led3=8'h92;

4'd6:Led3=8'h82;4'd7:Led3=8'hf8;4'd8:Led3=8'h80;

4'd9:Led3=8'h90;default:Led3=8'hff;

endcase

end

end

end

if(clr)//按下clr键以后各组参数重置,整个比赛重新开始

begin

EnFlat=1'b1;

daojishi=5'd20;

Led1=6'b111111;//重置时六个Led全灭

Led2=8'b11111111;//熄灭选手号静态数码管

Led3=8'b11111111;//熄灭分数显示数码管

BuClk=1'b0;//蜂鸣器标志位重置

Buzzer=1'b1;//蜂鸣器控制管脚重置

score=0;

//score1=4'd0;score2=4'd0;score3=4'd0;

//score4=4'd0;score5=4'd0;score6=4'd0;

answer=3'd0;

end

end

endmodule

测试程序

`timescale 1s/1s

module qiangdaqi_test();

reg clk,clr,add,stu,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6; //reg clr;//重置键

//reg add,stu;//add答题正确加一分stu答题错误减一分

wire [0:5]Led1;//对应参赛选手前的灯

wire [0:7]Led2,Led3;//Led2显示选手号Led3显示选手分数

wire Buzzer;//低电平时蜂鸣器发出声音

QiangDaQi

u1(clk,clr,add,stu,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6,Led1 ,Led2,Led3,Buzzer);

initial

begin

#0

clk=1;add=0;stu=0;clr=0;inputEn=1;inputL1=1;inputL2=1;inputL3=1;inputL4=1;input L5=1;inputL6=1;

#2

inputEn=0;inputL1=1;inputL2=0;inputL3=1;inputL4=1;inputL5=1;inputL6=1;add=1; #2

clr=1;add=0;stu=0;inputEn=1;inputL1=1;inputL2=1;inputL3=1;inputL4=1;inputL5=1;i nputL6=1;

#2 clr=0;

#2

inputEn=0;inputL1=1;inputL2=0;inputL3=1;inputL4=1;inputL5=1;inputL6=1;add=1; #1 inputL3=0;add=1;

#2

clr=1;add=0;stu=0;inputEn=1;inputL1=1;inputL2=1;inputL3=1;inputL4=1;inputL5=1;i nputL6=1;

#2 clr=0;

#2 inputEn=1;inputL1=1;inputL2=0;inputL3=1;inputL4=1;inputL5=1;inputL6=1; #2

clr=1;add=0;stu=0;inputEn=1;inputL1=1;inputL2=1;inputL3=1;inputL4=1;inputL5=1;i

nputL6=1;

#2 clr=0;

#2 inputEn=0;inputL1=1;inputL2=1;inputL3=1;inputL4=1;inputL5=1;inputL6=1; #40 inputEn=0;inputL1=1;inputL2=1;inputL3=1;inputL4=1;inputL5=1;inputL6=1; #2

clr=1;add=0;stu=0;inputEn=1;inputL1=1;inputL2=1;inputL3=1;inputL4=1;inputL5=1;i nputL6=1;

#2 clr=0;

#2

inputEn=0;inputL1=0;inputL2=1;inputL3=1;inputL4=1;inputL5=1;inputL6=1;add=1; #2

clr=1;add=0;stu=0;inputEn=1;inputL1=1;inputL2=1;inputL3=1;inputL4=1;inputL5=1;i nputL6=1;

#2 clr=0;

#2

inputEn=0;inputL1=0;inputL2=1;inputL3=1;inputL4=1;inputL5=1;inputL6=1;stu=1; #2

clr=1;add=0;stu=0;inputEn=1;inputL1=1;inputL2=1;inputL3=1;inputL4=1;inputL5=1;i nputL6=1;

#2 clr=0;

end

always #1 clk=~clk;

endmodule

Verilog~HDL~电梯程序

这个程序不需要你再添加任何的程序,你只需要添加楼层数就可以成功控制6层以上电梯,另外你必须得读懂每一块程序的作用,才能对这个程序有更好的应用 module dtsj(clk,reset,up1,up2,up3,up4,up5,dn2,dn3, dn4,dn5,dn6,d1,d2,d3,d4,d5,d6,overw,pro,led,hex,Buzzer1,lig); input clk,reset; //reset键使用key input overw,pro,up1,up2,up3,up4,up5,dn2,dn3,dn4,dn5,dn6,d1,d2,d3,d4,d5,d6; //故障警报键 output[6:0] hex,lig; //light和led用数码管 output[5:0] led; output Buzzer1; reg Buzzer1,door; reg[6:0] hex,lig; reg[2:0]state,next_state,count; reg[5:0] d,up,dn,now_f,curr,led; //d是部按键,up外部上升按键,dn是外部下降按键, //now_f是当前楼层,curr是当前楼层的另外一个变量 reg[1:0] ud_f; //上升下降标志位 reg light; //reg[29:0] counter; //regclkout; parameter idle_state=3'b001,open_state=3'b010,close_state=3'b011, up_state=3'b100,down_state=3'b101,sleep_state=3'b110, alarm_state=3'b111,f1=6'b000001,f2=6'b000010,f3=6'b000100,f4=6'b001000 ,f5=6'b010000,f6=6'b100000,up_f=2'b01,dn_f=2'b10,idle=2'b00; //jiuzhongzhuangtai he shang sheng zhuang tai 'shang sheng zhuang tai he xiajiazhuang tai initial begin state<=idle_state; end always (posedgeclk or posedge reset) if(reset) state<=idle_state; else state<=next_state; always (state or up or dn or d or now_f or count or ud_f) case(state) open_state: begin if(count<5)

抢答器(-Verilog-HDL实现)

抢答器(-Verilog-HDL实现)

桂林电子科技大学信息科技学院《EDA技术与应用》实训报告 学号0952100110 姓名赵万里 指导教师:江国强杨艺敏 2011年04月20日

实训题目:智能电子抢答器 1.系统设计 1.1 设计要求 1.1.1 设计任务 设计并制作一台智能电子抢答器。 1.1.2 技术要求 ①用EDA实训仪的I/O设备和PLD芯片实现智能电子抢答器的设计。 ②智能电子抢答器可容纳4组参赛者抢答,每组设一个抢答钮。 ③电路具有第一抢答信号的鉴别和锁存功能。在主持人将复位按钮按下后开始抢答,并用EDA实训仪上的八段数码管显示抢答者的序号,同时扬声器发出“嘟嘟”的响声,并维持3秒钟,此时电路自锁,不再接受其他选手的抢答信号。 ④设计一个计分电路,每组在开始时设置为100分,抢答后由主持人计分,答对一次加10分,答错一次减10分。 ⑤设计一个犯规电路,对提前抢答和超时抢答者鸣喇叭示警,并显示犯规的组别序号。 1.2 方案比较 (1) 设计制作一个可容纳四组参赛者的数字智力抢答器,每组设置一个抢答按钮。 (2) 电路具有第一抢答信号的鉴别和锁存功能。在主持人按下复位按钮后,若参加者按抢答开关,则该组指示灯亮。此时,电路应具备自锁功能,使别组的抢答开关不起作用。

(3)自锁后,用八段数码管显示抢答者的序号,同时指示灯亮。(4) 设置计分电路。每组在开始时预置成100,抢答后由主持人计分,答对一次加10,否则减10分。 (5)电路具有淘汰功能,当每组的100分减少到0时,该组被淘汰,以后每次抢答,该组抢答按钮都无效。 1.3 方案论证 1.3.1 总体思路 总体分为四部分:倒计时模块、计分模块、抢答模块和分屏显示模块。 倒计时模块用一个20000000分频。产生一个进位,连接一个30的减法计数器构成。 计分模块中分为两部分,一部分用于计分,另一部分用于处理计数器的进制问题,当加到A时自动向前进位,并且把A变为0。当减少到F时,向前借位,并且把F变为9。这就实现了把十六进制变成一般用的十进制。 抢答模块分两部分,复位模块和抢答模块,每次抢答都要初始化按键。抢答模块又分为误抢,无人抢答和正确抢答。每次抢答,当有一组按下抢答,立即锁定,亮相应的分数和组号,并且亮起各种抢答所对应的灯信号。(即所要求的蜂鸣器) 分屏显示模块中用每次抢答的组号作为输入,当抢答后立即换屏显示其组号分数。 1.3.2 设计方案 (1)根据设计要求需要一个时钟的接入端clk,清除端clrn,使倒

verilog-HDL抢答器(两个程序)

一、设计任务 智力竞赛抢答器Verilog HDL要求有6位参赛者进行抢答,有六个抢答信号进行抢答。当有抢答选手按下抢答键后系统能够快速准确的判断是那一组选手按下了抢答信号,由于系统比较小,速度比较快一般不会有同时按下的可能,所以只有六种状态,然后系统能够根据这六种状态进行适时的显示和提示。当有选手按下以后就对抢答信号进行锁存,其他选手的输入无效。然后就是对抢答进行时间限制了,根据设定的时间进行倒计时,当倒计时完成还没有人抢答的时候系统发出警报声音提示时间已经到了。当有选手在主持人未按下抢答键抢答时视为超前抢答,系统显示该选手号,同时蜂鸣器响,该抢答无效。还有清除复位键,抢答完成以后按复位键即可清除已有的状态。通过Verilog HDL程序代码实现系统的各个功能。 二、设计目的与要求 目的:理论联系实际,巩固和运用所学课程,提高分析、解决计算机技术实际问题的独立工作能力,培养学生正确的设计思想,严肃认真、实事求是的科学态度和勇于探索的创新精神。通过对一个智力抢答器的设计,进一步加深对计算机原理以及数字电路应用技术方面的了解与认识,进一步熟悉数字电路系统设计、制作与调试的方法和步骤,通过Verilog 程序的编写,进一步熟悉Verilog HDL 的语法知识;规范化训练学生撰写技术研究报告,提高书面表达能力。 要求: 掌握FPGA设计系统的一般方法。 熟练掌握使用modelsim软件设计较复杂的数字逻辑电路。 培养学生独立分析问题和解决实际问题的能力。 三、课程设计的内容 设计一抢答器,要求如下: (1)抢答台数为6; (2)具有抢答开始后20s倒计时,20秒倒计时后6人抢答显示超时,并报警; (3)能显示超前抢答台号并显示犯规报警; (4)系统复位后进入抢答状态,当有一路抢答按键按下,该路抢答信号将其余 各路抢答信号封锁,同时铃声响起,直至该路按键松开,显示牌显示该路抢答台号。 四、系统设计方案 根据系统设计要求可知,系统的输入信号有:主持人按钮inputEn,各选手的抢答按钮分别是inputL1、inputL2、inputL3、inputL4,inputL5,inputL6,主

数电实验考试 verilogHDL语言及参考程序

题目一:表决器电路设计 一、设计任务及原理:所谓表决器就是对于一个行为,由多个人投票,如果同意的票数过半,就认为此行为可行;否则如果否决的票数过半,则认为此行为无效。 七人表决器顾名思义就是由七个人来投票,当同意的票数大于或者等于4时,则认为同意;反之,当否决的票数大于或者等于4时,则认为不同意。实验中用7个拨动开关来表示七个人,当对应的拨动开关输入为‘1’时,表示此人同意;否则若拨动开关输入为‘0’,则表示此人反对。表决的结果用一个LED表示,若表决的结果为同意,则LED被点亮;否则,如果表决的结果为反对,则LED不会被点亮。同时,数码管上显示通过的票数。 二、具体要求: 本实验就是利用实验系统中的拨动开关模块和LED模块以及数码管模块来实现一个简单的七人表决器的功能。拨动开关模块中的K1~K7表示七个人,当拨动开关输入为‘1’时,表示对应的人投同意票,否则当拨动开关输入为‘0’时,表示对应的人投反对票;LED模块中LED1表示七人表决的结果,当LED1点亮时,表示此行为通过表决;否则当LED1熄灭时,表示此行为未通过表决。同时通过的票数在数码管上显示出来。 在此实验中数码管、LED、拨动开关与FPGA的连接电路和管脚连接使用模块 信号 对应FPGA 管脚 说明

在以前的实验中都做了详细说明,这里不在赘述。端口名 S1 按键开关 S1 R16 表示1号抢 答者 S2 按键开关 S2 P14 表示2号抢 答者 S3 按键开关 S3 P16 表示3号抢 答者 S4 按键开关 S4 P15 表示4号抢 答者 S5 按键开关 S5 M15 表示5号抢 答者 S6 按键开关 S6 N16 表示6号抢 答者 S7 按键开关 S7 N15 表示7号抢 答者 DOUT0 LED模块D1 L14 表决结果 亮为通过 LEDAG0 数码管模 块A段N4 抢答成功 者 号码显示 LEDAG1 数码管模 块B段 G4

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 ) begin if(count1=='d25000) begin div1khz<=~div1khz;count1<=0;end else begin count1<=count1+1'b1;end end //-------------fenping--1hz-------------------------------

VerilogHDL经典程序非常适合新手

一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0; 2'b01:y=i1; 2'b10:y=i2; 2'b11:y=i3; default:y=0; 一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0;

抢答器VerilogHDL实现

抢答器(-Verilog-HDL实现)

————————————————————————————————作者:————————————————————————————————日期:

桂林电子科技大学信息科技学院《EDA技术与应用》实训报告 学号0952100110 姓名赵万里 指导教师:江国强杨艺敏 2011年04月20日

实训题目:智能电子抢答器 1.系统设计 1.1 设计要求 1.1.1设计任务 设计并制作一台智能电子抢答器。 1.1.2 技术要求 ①用EDA实训仪的I/O设备和PLD芯片实现智能电子抢答器的设计。 ②智能电子抢答器可容纳4组参赛者抢答,每组设一个抢答钮。 ③电路具有第一抢答信号的鉴别和锁存功能。在主持人将复位按钮按下后开始抢答,并用EDA实训仪上的八段数码管显示抢答者的序号,同时扬声器发出“嘟嘟”的响声,并维持3秒钟,此时电路自锁,不再接受其他选手的抢答信号。 ④设计一个计分电路,每组在开始时设置为100分,抢答后由主持人计分,答对一次加10分,答错一次减10分。 ⑤设计一个犯规电路,对提前抢答和超时抢答者鸣喇叭示警,并显示犯规的组别序号。 1.2方案比较 (1)设计制作一个可容纳四组参赛者的数字智力抢答器,每组设置一个抢答按钮。 (2)电路具有第一抢答信号的鉴别和锁存功能。在主持人按下复位按钮后,若参加者按抢答开关,则该组指示灯亮。此时,电路应具

备自锁功能,使别组的抢答开关不起作用。 (3)自锁后,用八段数码管显示抢答者的序号,同时指示灯亮。(4)设置计分电路。每组在开始时预置成100,抢答后由主持人计分,答对一次加10,否则减10分。 (5)电路具有淘汰功能,当每组的100分减少到0时,该组被淘汰,以后每次抢答,该组抢答按钮都无效。 1.3 方案论证 1.3.1 总体思路 总体分为四部分:倒计时模块、计分模块、抢答模块和分屏显示模块。 倒计时模块用一个20000000分频。产生一个进位,连接一个30的减法计数器构成。 计分模块中分为两部分,一部分用于计分,另一部分用于处理计数器的进制问题,当加到A时自动向前进位,并且把A变为0。当减少到F时,向前借位,并且把F变为9。这就实现了把十六进制变成一般用的十进制。 抢答模块分两部分,复位模块和抢答模块,每次抢答都要初始化按键。抢答模块又分为误抢,无人抢答和正确抢答。每次抢答,当有一组按下抢答,立即锁定,亮相应的分数和组号,并且亮起各种抢答所对应的灯信号。(即所要求的蜂鸣器) 分屏显示模块中用每次抢答的组号作为输入,当抢答后立即换屏显示其组号分数。 1.3.2 设计方案

数字竞赛抢答器课程设计Verilog语言实现

数字竞赛抢答器课程设计Verilog语言实现

可编程器件与应用课程设计报告 姓名:XXX 学号:XXXXXXXXXX 专业班级:信息XXX 题目:数字式竞赛抢答器 指导老师:

一、绪论 背景: 随着电子技术的发展,可编程逻辑器件(PLD)的出现,使得电子系统的设计者利用EDA(电子设计自动化)软件,就可以独立设计自己的专用集成电路(ASIC)器件。可编程逻辑器件是一种半导体集成器件的半成品。在可编程逻辑器件的芯片中按一定方式(阵列形式或单元阵列形式)制作了大量的门、触发器等基本逻辑器件,对这些基本器件适当地连接,就可以完成某个电路或系统的功能。 数字式竞赛抢答器控制系统是工厂、学校和电视台等单位举办各种智力竞赛等娱乐活动中经常使用的重要基础设备之一。目前设计抢答器的方法很多,例如用传统的PCB板设计、用PIC 设计或者用单片机设计。而用Verilog可以更加快速、灵活地设计出符合各种要求的抢答器,优于其他设计方法,使设计过程达到高度自动化。本文介绍的4路数字式竞赛抢答器基于Verilog 语言、以EDA技术作为开发手段、采用CPLD (复杂的可编程逻辑器件)作为控制核心设计而成。与传统设计相比较,不仅简化了接口和控制,

也提高了系统的整体性能和工作可靠性,具有电路简单、成本低廉、操作方便、灵敏可靠等优点。意义: 数字式竞赛抢答器作为一种电子产品,早已广泛应用于各种智力和知识竞赛场合,但目前所使用的抢答器存在分立元件使用较多,造成每路的成本偏高,而现代电子技术的发展要求电子电路朝数字化、集成化方向发展,因此设计出数字化全集成电路的多路抢答器是现代电子技术发展的要求。 二、实现方案 设计要求: 1、设计一个可容纳4组参赛的数字式抢答器,每组设一个按钮,供抢答使用。 2、抢答器具有第一信号鉴别和锁存功能,使除第一抢答者外的按钮不起作用。 3、设置一个主持人“复位”按钮。 4、主持人复位后,开始抢答,第一信号鉴别锁存电路得到信号后,有指示灯显示抢答组别,扬声器发出2~3秒的音响。 5、设置一个计分电路,每组开始预置5分,由主持人记分,答对一次加1分,答错一次减1分。

1、VerilogHDL设计流程

1、Verilog HDL 设计流程: 1、文本编辑:文件保存为.v的文件; 2、功能仿真:将.v文件调入HDL仿真软件,逻辑功能是否正确(前仿真); 3、逻辑综合:将源文件调入逻辑综合软件进行综合,把语言综合成最简的布尔表达式,生成.edf的EDA工业标准文件;矚慫润厲钐瘗睞枥庑赖。 4、布局布线; 5、时序仿真:验证电路的时序(后仿真)。 2、Verilog 程序包括四部分: 1、端口定义 2、I/O口说明 3、内部信号声明 4、功能定义 3、逻辑功能定义: 三种方法在模块中产生逻辑: (1)用assign 声明语句;如assign a = b & c;(描述组合逻辑) (2)用实例元件;如and #2 u1(q,a,b); (3)用always块;如(既可描述组合逻辑也可描述时序逻辑) always @ (posedge clk or posedge clr) begin if(clr) q <= 0; else if(en) q <= d; end 4、网络类型变量 两种:wire tri Wire型变量:用来表示单个门驱动或连续赋值语句驱动的网络类型数据。 Tri 型变量:用来表示多驱动器驱动的网络型数据。 线网类型两种:wire tri Tri 主要用于定义三态的线网; Wire型:代表的是物理连接,不存储逻辑值,要由器件驱动,通常用assign进行赋值Wire类型的信号没被驱动,缺省值为Z(高阻);信号没有定义数据类型时,缺省为wire 类型。(缺省==默认)聞創沟燴鐺險爱氇谴净。 Reg型:默认初始值为x,通常用always模块内的指定信号,常代表触发器; always模块内被赋值的每一个信号都必须定义为reg型。(寄存器类型) Verilog HDL 有5种寄存器类型: reg、integer、time、real、realtime 5、运算符号所带操作数 单目运算符:可带一个操作数,操作数放在运算符右边 双目运算符:可带两个操作数,操作数放在运算符两边 三目运算符:可带3个操作数,用三目运算符分隔开 6、底层模块的调用:底层模块(被测试模块)可由测试模块调用 如:(位置关联方式) : AND_G2 AND_G2(A,B,F); 第一个AND_G2 为底层模块名,第二个为实例名,(A,B,F)为参数定义。 语法结构为:底层模块名实例名参数定义

数字竞赛抢答器课程设计Verilog语言实现

可编程器件与应用课程设计报告 姓名: XXX 学号: XXXXXXXXXX 专业班级:信息XXX 题目数字式竞赛抢答器 指导老师:

、绪论 背景: 随着电子技术的发展,可编程逻辑器件(PLD )的出现,使得电子系统的设计者利用 EDA (电子设计自动化)软件,就可以独立设计自己的专用集成电路(ASIC )器件。可编 程逻辑器件是一种半导体集成器件的半成品。在可编程逻辑器件的芯片中按一定方式(阵列形式或单元阵列形式)制作了大量的门、触发器等基本逻辑器件,对这些基本器件适当地连接,就可以完成某个电路或系统的功能。 数字式竞赛抢答器控制系统是工厂、学校和电视台等单位举办各种智力竞赛等娱乐活动中经常使用的重要基础设备之一。目前设计抢答器的方法很多,例如用传统的PCB板设计、 用PIC设计或者用单片机设计。而用Verilog可以更加快速、灵活地设计出符合各种要求的 抢答器,优于其他设计方法,使设计过程达到高度自动化。本文介绍的4路数字式竞赛抢答 器基于Verilog语言、以EDA技术作为开发手段、采用CPLD (复杂的可编程逻辑器件)作为控制核心设计而成。与传统设计相比较,不仅简化了接口和控制,也提高了系统的整体性 能和工作可靠性,具有电路简单、成本低廉、操作方便、灵敏可靠等优点。意义:数字式竞赛抢答器作为一种电子产品,早已广泛应用于各种智力和知识竞赛场合,但目前所使用的抢答器存在分立元件使用较多,造成每路的成本偏高,而现代电子技术的发展要 求电子电路朝数字化、集成化方向发展,因此设计出数字化全集成电路的多路抢答器是现代 电子技术发展的要求。 实现方案 设计要求: 1设计一个可容纳4组参赛的数字式抢答器,每组设一个按钮,供抢答使用。 2、抢答器具有第一信号鉴别和锁存功能,使除第一抢答者外的按钮不起作用。 3、设置一个主持人“复位”按钮。 4、主持人复位后,开始抢答,第一信号鉴别锁存电路得到信号后,有指示灯显示抢答组别, 扬声器发出2~3秒的音响。 5、设置一个计分电路,每组开始预置5分,由主持人记分,答对一次加1分,答错一次减 1分。 6、设置犯规电路,对超时答题(例如1分钟)的组别鸣笛示警,并由组别显示电路显示出犯规组别,该轮该选手退出,由裁判员重新发令,其他人再抢答。 此设计问题可分为第一信号鉴别、锁存模块,答题计时电路模块,计分电路模块和扫描 显示模块四部分。 第一信号鉴别锁存模块的关键是准确判断出第一抢答者并将其锁存,在得到第一信号后,将输入端封锁,使其他组的抢答信号无效,可以用触发器或锁存器实现。设置抢答按钮 K1、K2、K3、K4,主持人复位信号judge,蜂鸣器驱动信号buzzout。judge=O时,第一信号鉴别、锁存电路、答题计时电路复位,在此状态下,若有抢答按钮按下,鸣笛示警并显示犯规组别;judge=1时,开始抢答,由第一信号鉴别锁存电路形成第一抢答信号,进行组别显示,控制蜂鸣器发出声响,并启动答题计时电路,若计时时间到,主持人复位信号还没有按下,则由蜂鸣器发出犯规示警声。 计分电路是一个相对独立的模块,采用十进制加/减计数器、数码管数码扫描显示,设 置复位信号Reset、加减分信号add_min,加减分状态键key_state, Reset=0时所有得分回到 起始分(5分),且加、减分信号无效;Reset=1时,由第一信号鉴别、锁存电路的输出信号 选择进行加减分的组别,当key_state=1时,按一次add_min,第一抢答组加1分;当key_state=O

简单自动售货机VerilogHDL程序

自动售货机VerilogHDL程序 一个简单的自动售卖饮料机的程序。该机器具有投币,显示余额,购买六种饮料,退钱等功能,为了更具实用性,增添了饮料选择允许提示和投币允许提示的功能。具体形容,可投入一元、五元、十元和二十元面值的钱币,显示出当前的余额,并根据当前的余额提示能购买哪些饮料,选择某种饮料,则输出选定的饮料,同时余额减去相应的金钱。若选择退钱,机器就退出所有的钱,余额清零。 下图为功能示意图: 程序的状态表:

程序中包含了一个状态机,定义了一个任务(task)和函数(function),用该任务调用了该函数,使用若干分支语句,详见附后源程序和测试程序。 附上程序编译仿真图:

源程序如下: `define one 3'b001 `define five 3'b010 `define ten 3'b011 `define twenty 3'b100 module automart(money,state,moneyout,coinable,adrkable,bdrkable, cdrkable,drkout1,drkout2,drkout3,drkout4,drkout5, drkout6,coin,clk,reset,moneyback,choice1,choice2, choice3,choice4,choice5,choice6); input[2:0] coin;//投币输入,分为1、5、10、20元四种输入 input clk,reset,moneyback,choice1,choice2,choice3,choice4, choice5,choice6;//moneyback为退钱输入,choice1~6是饮料选择output moneyout,coinable,adrkable,bdrkable,cdrkable,drkout1, drkout2,drkout3,drkout4,drkout5,drkout6; //依次为退钱输出,投币许可提示,饮料选择许可,6种饮料输出output[2:0] state;//状态记录 output[7:0] money;//余额显示 reg[7:0] money; reg[2:0] state; reg moneyout,coinable,backable,adrkable,bdrkable,cdrkable; parameter A=3'b000, B=3'b001, C=3'b010,D=3'b011, E=4'b100; assign drkout1=choice1&adrkable;

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 EP1C3T144C8

verilog抢答器(最经典)

抢答器设计 题目:智能电子抢答器专业:电子信息工程 2011 年 1 月7 日

摘要 抢答器是在竞赛、文体娱乐活动(抢答活动)中,能准确、公正、直观地判断出抢答者的机器。电子抢答器的中心构造一般都是由抢答器由单片机以及外围电路组成。 本设计是以四路抢答为基本概念。从实际应用出发,利用电子设计自动化( EDA)技术,用可编程逻辑器件设计具有扩充功能的抢答器。它以Verilog HDL 硬件描述语言作为平台,结合动手实验而完成的。它的特点是电路简单、制作方便、操作简单、方便、性能可靠,实用于多种智力竞赛活动。本抢答器的电路主要有四部分组成:鉴别锁存电路、FPGA主芯片EP1C3T144C8电路、计分电路以及扫描显示模块的电路,并利用Quartus II工具软件完成了Verilog HDL源程序编写和硬件下载。这个抢答器设计基本上满足了实际比赛应用中的各种需要。在实际中有很大的用途。 关键词:抢答器 Quartus II Verilog HDL EP1C3T144C8

1引言 硬件描述语言 Hardware Description Language 是硬件设计人员和电子设计自动化 EDA 工具之间的界面。其主要目的是用来编写设计文件,建立电子系统行为级的仿真模型。即利用计算机的巨大能力对用 Verilog HDL 或 VHDL 建模的复杂数字逻辑进行仿真,然后再自动综合以生成符合要求且在电路结构上可以实现的数字逻辑网表 Netlist,根据型仿真验证无误后用于制造ASIC芯片或写入 EPLD 和 FPGA 器件中。 Verilog HDL是一种硬件描述语言(HDL:Hardware Discription Language),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL就是在用途最广泛的C语言的基础上发展起来的一种件描述语言,它是由GDA(Gateway Design Automation)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。1985年Moorby推出它的第三个商用仿真器Verilog-XL,获得了巨大的成功,从而使得Verilog HDL迅速得到推广应用。1989年CADENCE公司收购了GDA公司,使得Verilog HDL成为了该公司的独家专利。1990年CADENCE公司公开发表了Verilog HDL,并成立LVI 组织以促进Verilog HDL成为IEEE标准,即IEEE Standard 1364-1995. Verilog HDL的最大特点就是易学易用,如果有C语言的编程经验,可以在一个较短的时间内很快的学习和掌握,因而可以把Verilog HDL内容安排在与ASIC设计等相关课程内部进行讲授,由于HDL语言本身是专门面向硬件与系统设计的,这样的安排可以使学习者同时获得设计实际电路的经验。 2 关于课程设计 2.1 课程设计目的 理论联系实际,巩固和运用所学课程,提高分析、解决计算机技术实际问题的独立工作能力,通过对一个智力抢答器的设计,进一步加深对计算机原理以及数字电路应用技术方面的了解与认识,进一步熟悉数字电路系统设计、制作与调试的方法和步骤。巩固所学课堂知识,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力。为了进一步了解计算机组成原理与系统结构,深入学习EDA技术,用Verilog HDL语言去控制将会使我们对本专业知识可以更好地掌握。 2.2 课程设计的内容

EDA课程设计报告-用VerilogHDL语言编写-红绿灯控制程序

成绩: XI’AN UNIVERSITY OF TECHNOLOGY EDA综合实践 所在院系自动化与信息工程学院 专业名称电子信息科学与技术 班级电技111 题目红绿灯设计 指导教师XXXX

二、红绿灯原理及设计思路 设计思路: 为了实现两个方向红绿灯循环亮灭的过程,假设该过程如下: 起始(st0)东西方向绿灯亮(green1=1),南北方向红灯亮(red2=1),这个过程持续3个clock周期;然后(st3)东西方向黄灯亮,绿灯灭,南北方向红灯仍然亮着,这个过程持续1个clock;然后(st4)东西方向红灯亮,南北方向绿灯亮,这个过程持续3个clock;然后南北(st7)方向黄灯亮,东西方向红灯仍然亮着,这个过程持续一个clock;接下来就回到起始(st0)的状态进行循环。 此程序中无论哪个方向,各个灯亮着的时间之比为, 绿:黄:红=3:1:4,可以设置clock的值确定各灯具体的亮的时间。 1、红绿灯工作状态的真值表:

2、模型图:(见下页) 3状态机:

三、源程序 module traffic(clock,reset,red1,yellow1,green1,red2,yellow2,green2); input clock,reset; output red1,yellow1,green1,red2,yellow2,green2; parameter st0=0,st1=1,st2=2,st3=3,st4=4,st5=5,st6=6,st7=7; reg[2:0] state,nxstate; reg red1,yellow1,green1,red2,yellow2,green2; always(posedge clock or posedge reset) begin if(reset) state=st0;

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

module qiangda4(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 //初始化各按键并开始抢答 begin if(inputEn==1'b0) begin //初始化各个标志位和参数

verilog抢答器设计报告

湖北师范学院电工电子实验教学省级示范中心电子版实验报告 第2页,共6页 抢答器 一.任务解析 用Verilog 硬件描述语言设计抢答器,实现: 1、四人通过按键抢答,最先按下按键的人抢答成功,此后其他人抢答无效。 2、每次只有一人可获得抢答资格,一次抢答完后主持人通过复位按键复位,选手再从新抢答。 3、有从新开始游戏按键,游戏从新开始时每位选手有5分的初始分,答对加1分,答错扣1分,最高分不能超过9分,当选手得分减为0时取消该选手抢答资格。 4、选手抢答成功时其对应的分数闪烁。 二.方案论证(画框图并分析) 抢答部分(对应snatch 模块)在quartusII 下的仿真原理图如下所示:

抢答部分的代码如下:

计分模块的代码如下:

顶层模块的代码如下: 三.重难点解析 抢答器的核心部分为巧妙地利用D触发器的反馈,在检测到第一个上升沿时将按键(未按下时接低电平)接入的与门锁住,以保证与门只有一个上升沿输出,从而实现“最先按下按键的人抢答成功,此后其他人抢答无效”。在与门输出上升沿的同时检测按键,以确定是哪位选手抢答,用寄存器存下抢答选手的信息,最后确定哪个led灯亮以及那位选手对应的分数闪烁。至于取消0分选手抢答资格,则是将各选手的分数反馈到选手抢答的按键,通过与门关闭相应选手按键上升沿的进入。其他功能的实现相对简单,在此不再赘述。 将各模块代码写好并测试后,在主模块中调用并分配引脚,引脚分配好后,从新编译、下载就可实验了。分别验证上述的各种功能,看是否达到预期的效

果。 四.硬件资源分配(给出引脚分配说明) 芯片选用EP1K30TC114-3,clr接全局清零键pin124,start(游戏从新开始键)接pin49,up(加分键)接pin47,down接pin48,四个抢答按键key3、key2、key1、key0、分别接pin59、pin60、pin62、pin63,7段数码管的7盏灯a、b、c、d、e、f、g分别pin118、pin119、pin120、pin121、pin122、pin128、pin130,数码管选择信号sel0、sel1、sel2分别接pin132、pin133、pin135,抢答指示灯led0、led1、led2、led3分别接pin136、pin137、pin138、pin140。 五.结果分析 验证过程如下: 1、分别按下start和clr键,游戏处于初始状态,此时8个数码管等间隔地显 示4个5分,分数不闪烁。 2、按下key0键,此时led0亮,第一个分数闪烁,再按其他按键,数码管及灯 的状态不变。按下clr键,再同时按下几个按键,仍只有一个灯亮,且对应的分数闪烁,在按下clr键之前不管怎么按四个抢答键,数码管及灯的状态不变。 3、不断按下key1键抢答并给其加分,一直加到9,发现分数加到9时不能再 加了。 4、不断按下key2键抢答并给其减分,一直减到0,发现分数减到0时再按key2 抢答时没反应,led2不亮且对应的分数也不闪。而按其他键抢答仍然有效。 通过对以上结果的分析发现,该抢答器具备了我们当初要求的功能,该抢答器总体上是比较成功的。 六.经验总结

Verilog_HDL的交通灯控制器设计

课程设计报告 2015-2016学年第2学期 课程设计名称:电子综合设计EDA课程设计 院(系):电子信息学院 专业:电子信息工程班级:电子1313 姓名: xx 学号: 1310034303xx 综合实验时间: 2016/7/11-2016/7/15 指导教师:钟旭 提交时间: 2016/7/15

上海电机学院课程设计任务书

目录 第一章设计原理 (4) 1.1设计要求 (4) 1.2设计思路和原理 (4) 1.3实现方法 (4) 第二章Verilog HDL程序设计 (6) 2.1整体设计 (6) 2.2 具体设计 (7) 第三章仿真测试 (7) 3.1 波形仿真 (7) 第四章设计总结 (10)

第一章设计原理 1.1设计要求 设计一个交通控制器,用LED显示灯表示交通状态,并以7段数码显示器显示当前状态剩余秒数主干道绿灯亮时,支干道红灯亮;反之亦然,二者交替允许通行,主干道每次放行35s,支干道每次放行25s。每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为5s。能进行特殊状态显示,特殊状态时东西、南北路口均显示红灯状态。用LED灯显示倒计时,并且能实现总体清零功能,计数器由初始状态开始计数,对应状态的显示灯亮。能实现特殊状态的功能显示。[1] 1.2设计思路和原理 (1) 主、支干道用传感器检测车辆到来情况,实验电路用逻辑开关代替。 (2) 选择1HZ时钟脉冲作为系统时钟。 (3) 45s、25s、5s定时信号可用顺计时,也可用倒计时,计时起始信号由主控电路给出,每当计满所需时间,启、闭三色信号灯,并启动另一计时电路。 (4) 交通灯状态变化如表1及图1所示: 表1 交通灯状态图

基于-verilog的抢答器设计

基于Verilog语言的二路抢答器设计实验报告 电子科学与工程学院 121180052 璇 一、实验目的 1、掌握数字系统中触发器、计数器的设计要素。 2、掌握触发器、计数器的VerilogHDL代码编写。 3、进一步掌握ISE软件的用法,学习代码下载的方法。 二、实验步骤 1、设计限时和复位电路。 2、编写限时/复位电路的VerilogHDL代码并综合、仿真。 3、实现限时抢答器并下载到开发板上进行验证。 三、实验原理 1、设计二路抢答器 2、设计定时器和复位电路 可使用计数器来实现定时功能。而给定时间的定时,可以让计数器的输出与特定值比较来实现。这个特定的预置数由时钟频率和定时时间决定。 这个基本想法如下图所示。 图中,“时间到”信号接到计数器的清零端,以便下次计数从0开始。 这里,还需要一个计时开始的功能按键,用来启动计数器的计时。那么,计数器就需要一个使能端,受控于“计时开始”按键。我们知道,EN信号是一个持续信号(允许时保持电平),而“时间到”信号是一个持续时间很短的脉冲,因此还需要一个触发器来产生计数器的EN信号。 复位信号由“时间到”信号和复位按键相或来得到。完整的限时和复位电路如下图所示。

四、实验代码 //主程序部分 Module responder ( input clk, input set, input reset, input wire in_a, input wire in_b, output wire q_a, output wire q_b, output en ); wire clr; wire[27:0]t; wire clk_10; wire timeout; reg[27:0] n=28'h1ffffff; assign clr = reset||timeout; trig trigger( .set(set), .clk(clk_10), .clr(clr), .en(en) ); count counter( .clk(clk_10), .clr(clr),

相关主题
文本预览
相关文档 最新文档