四路抢答器报告.docx
《四路抢答器报告.docx》由会员分享,可在线阅读,更多相关《四路抢答器报告.docx(14页珍藏版)》请在冰豆网上搜索。
四路抢答器报告
硬件描述语言课程设计报告
课题名称
四路抢答器
学生姓名
王光陛
学号
1107010322
学院
应用科学学院
专业班级
电科11-3班
完成地点
新主楼C903
完成时间
2013年12月18日
星期三
指导教师
王建民
评阅意见:
哈尔滨理工大学
电子科学与技术系
摘要
VerilogHDL本身是一门比较复杂的语言,语法结构丰富。
在王老师所教书中介绍了基于VerilogHDL的数字设计的基本原理和方法,重点是电路设计。
为更好的将所学VerilogHDL语言的理论知识与实际应用结合起来,学会分析、解决实际的数字电路问题,锻炼独立进行某些数字应用系统的开发设计工作能力,我们在老师的指导下完成了此次项目设计。
本设计题目为四路抢答器电路,用VerilogHDL语言编写软件实现四路抢答功能。
裁判发出开始信号后抢答有效(裁判使用拨码开关),一人抢答成功后其他人抢答无效直至裁判复位此状态后方可继续抢答(选手使用按键),同时使用数码管显示出选手的编号。
四路抢答器电路设计的主要问题在于如何实现各个模块的正确分配,进而使设计出的电路更加符合要求。
为了使各个模块能够正确分配,在程序开始设计之前,必须反复推敲本组的设计方案并设计好各个模块的方框图。
根据实验题目要求并进行电路的仿真,电路的设计应包括2个模块,即实例化模块和抢答模块。
此次设计四路抢答器电路的目的就是让同学们在学习VerilogHDL理论的基础上,通过对题目要求的分析进一步实现实际电路的设计,使我们不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对分析、解决实际的数字电路问题进一步加深认识,为今后能够独立进行某些数字应用系统的开发设计工作打下一定的基础。
【关键词】VerilogHDL,四路抢答器,模块,数码管显示,电路设计
第一部分系统的设计
1.1、设计要求
(1)裁判发出开始信号后抢答有效。
(2)设选手及裁判按钮,选手使用按键,裁判使用拨码开关。
(3)一人抢答成功后,其他人再抢答无效,裁判复位此状态后方可继续抢答。
(4)使用数码管显示选手的编号。
1.2、设计目标
(1)我们在课本上学习了相关的基础知识,所以需要进一步对实际题目进行程序编写,以巩固所学知识,还可以发现自身不足。
(2)程序编好后还需要在实验室调试电路,观察实验现象,进一步熟悉相关仪器设备的使用。
(3)通过完成四人抢答器电路设计,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对分析、解决实际的数字电路问题进一步加深认识,为今后能够独立进行某些数字应用系统的开发设计工作打下一定的基础。
(4)培养综合运用知识和独立开展实践创新的能力。
(5)规范化训练学生撰写技术研究报告,提高书面表达能力。
1.3、设计方法
(1)仔细阅读课程设计题目要求,思考实现电路所需知识以及方法。
(2)遇到本组内解决不了的问题,及时和其他小组交流或询问老师。
(3)将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务。
(4)通过完成该项任务,总结所学知识。
1.4、实验设计结果
(1)对所写程序进行编译无误。
(2)在实验室对电路进行引脚分配和仿真,通过DE2开发板观察实验现象。
(3)裁判发出开始信号后抢答有效。
(4)一人抢答成功后,其他人再抢答无效,裁判复位此状态后方可继续抢答。
(5)使用数码管显示选手的编号。
第二部分实验设计部分
2.1、设计概述
本次课程设计的四路抢答器要求实现以下功能,即裁判发出开始信号后抢答有效,设裁判及选手按钮,裁判使用拨码开关而选手使用按键。
一人抢答成功后,其他人再抢答无效,裁判复位此状态后方可继续抢答,使用数码管显示选手的编号。
抢答器的核心部分为巧妙地利用D触发器的反馈,在检测到第一个上升沿时将按键(未按下时接低电平)接入的与门锁住,以保证与门只有一个上升沿输出,从而实现“最先按下按键的选手抢答成功,此后其他人抢答无效”。
在与门输出上升沿的同时检测按键,用来确定是哪个选手抢答,用寄存器存储抢答选手的信息,最后数码管显示出抢答选手的编号。
裁判对当时状态复位,则抢答重新开始,其原理同上。
本设计要求采用DE2开发板设计并完成四路抢答器的设计,设计中采用DE2开发板上的开关及按键模拟裁判及选手的按键,通过七段显示译码器显示出选手编号的数码管。
根据以上设计要求及分析,设计出系统输入输出信号如下表所示。
信号名称
类型
描述
实现
reset
输入
复位端,若有效,则输出清零
SW[1]
clk
输入
时钟信号,上升沿触发
CLOCK_50
a
输入
选手抢答按键,表示编号为1的选手
KEY[0]
b
输入
选手抢答按键,表示编号为2的选手
KEY[1]
c
输入
选手抢答按键,表示编号为3的选手
KEY[2]
d
输入
选手抢答按键,表示编号为4的选手
KEY[3]
HEX
输出
数码管,用于显示四位选手的编号
HEX0
en
输入
使能信号
SW[0]
q
内部信号
第一个选手选择后进行封存
state_reg
内部信号
电路的当前状态
state_next
内部信号
电路的次态
2.2、设计框图
2.3、电路设计
(1)实例化
本次课程设计要求采用实验室中的DE2开发板完成四路抢答器的设计,这就要求采用DE2开发板上的开关及按键模拟选手及裁判的按键,并通过七段显示译码器模拟显示选手编号的数码管。
这些要求可以通过模块实例化来实现。
模块实例程序如下:
moduleqiengdaqi
(
inputwire[1:
0]SW,
inputwireCLOCK_50,
inputwire[3:
0]KEY,
outputwire[6:
0]HEX0,
ouputwire[3:
0]LEDG,
outputwire[0:
0]LEDR
);
assignLEDR=SW[0]
sseg_m1m1(.clk(CLOCK_50),.en(SW[0]),.reset(SW[1]),.a(KEY[0]),.b(KEY[1]),
.c(KEY[2]),.d(KEY[3]),.HEX(HEX0),.LEDG(LEDG));
endmodule
(2)抢答模块
抢答模块要具有第一信号鉴别、锁存功能。
第一信号鉴别锁存的关键是准确判断出第一抢答者并将其锁存,在得到第一信号后,将输入端封锁,使其他组的抢答信号无效,用触发器实现。
设置抢答按钮in_a、in_b、in_c、in_d,裁判复位信号reset。
reset=0时,第一信号鉴别、锁存电路以及电路复位;reset=1时,开始抢答,由第一信号鉴别锁存电路形成第一抢答信号,并通过数码管显示出抢答者的编号。
抢答模块程序如下:
modulesseg_m1
(
inputwireclk,en,reset,
inputwirea,b,c,d,
outputreg[6:
0]HEX,
outputwire[3:
0]LEDG
);
reg[3:
0]state_reg,state_next;
regq;
assignLEDG=(q)?
4'b0:
state_reg;
always@(posedgeclk,posedgereset)
begin
if(reset)
begin
state_reg<=4'b1111;
end
else
state_reg<=state_next;
end
always@*
begin
if(state_reg==4'b1111)
q=1'b1;
else
q=1'b0;
if((!
a)&(q)&en)
state_next=4'b0001;
elseif((!
b)&(q)&en)
state_next=4'b0010;
elseif((!
c)&(q)&en)
state_next=4'b0100;
elseif((!
d)&(q)&en)
state_next=4'b1000;
else
state_next=state_reg;
end
always@*
begin
case(state_reg)
4'b0001:
HEX[6:
0]=7'b1111001;
4'b0010:
HEX[6:
0]=7'b0100100;
4'b0100:
HEX[6:
0]=7'b0110000;
4'b1000:
HEX[6:
0]=7'b0011001;
default:
HEX[6:
0]=7'b1111111;
endcase
end
endmodule
第三部分设计仿真
(1)双击QuartusII软件快捷图标进入QuartusII集成开发环境,新建工程项目文件db,并在该项目下新建Verilog源程序文件qiangdaqi.v,输入上面的程序代码并保存。
(2)然后为该工程项目选择目标器件并对相应的管脚进行锁定。
(3)对该工程文件进行编译处理,若在编译过程中发现错误,找出并更正错误直至成功为止。
(4)将DE2开发板下载电缆端接到PC机,打开工作电源,执行下载命令把程序下载到DE2开发板上,通过KEY[0]到KEY[4]抢答按键按下后,由裁判员根据答题情况,通过控制按键操作,这样就可以看到数码管上的选手编号。
第四部分调试运行
在编译调试运行的过程中,出现了不少问题。
(1)由于基础知识学习不够扎实,同时在两个always语句中队同一个变量赋值,由于各个always块是并行执行的,在编译过程中出现了错误。
最后将两个always块合并为一个,避免了这个问题的出现。
(2)抢答成功后数码管不能正确显示其组号。
原因在于所编程序中数码管数字编写出现错误,改正后,电路正常。
第五部分仿真结果
(1)复位端有效,清零,禁止抢答
(2)编号为1的选手抢答成功
(3)编号为2的选手抢答成功
(4)编号为3的选手抢答成功
(5)编号为4的选手抢答成功
第六部分心得体会
通过一个星期的讨论、实践,加深了对EDA的了解,我更加熟练的掌握了QuartusⅡ的使用,并产生了浓厚的兴趣。
特别是编译过程中,当错误一个个减少时,特别的兴奋。
这次项目设计选择了抢答器,刚开始进行分析,分为几个部分,然后每一部分分开编写,最后汇总于一个模块当中,不会太难。
但是接下来程序编写过程中由于需要定义多个变量,弄的混乱不堪。
而后先将所有用到的变量及其代表的含义先写下来,编写程序过程中一一对照才清楚了很多。
由于理论学习与实际运用存在太大的差别,在设计过程中错误不断,只能一点一点的进行修改。
直到最后完整的实现了四人抢答器的基本功能。
在设计中遇到问题是在所难免的,但这是我们所必须面对的,有问题才能去解决问题,解决问题才能提高。
从中学会的不止是怎样解决实际问题,更多的是遇到问题时该怎么思考。
通过这次项目设计,我更加理解了理论与实际相结合的重要性。
只有理论知识是还远远不够,只有把所学的理论知识与具体问题结合起来,才能真正的应用,不断提高自己动手能力、思考的能力和团队合作能力。
总的来说,对这次设计抢答器还是比较满意的,即使没有完全实现预期效果,有些许遗憾,但至少是自己的成果。
一周的时间,积累了经验,增强了实验素养,受益匪浅。
参考文献
[1]夏宇闻.Verilog《数字系统设计教程》.北京.北京航空航天大学出版社.2008.6
[2]张延伟,杨金岩,葛爱.《VerilogHDL程序设计实例详解》.北京.人民邮电出版社
[3]王伟.《VerilogHDL程序设计与应用》.北京.人民邮电出版社
[4]张亦华延明编著.数字电路EDA入门---VHDL程序实例集,北京邮电大学出版社2003