EDA课程设计抢答器.docx
《EDA课程设计抢答器.docx》由会员分享,可在线阅读,更多相关《EDA课程设计抢答器.docx(16页珍藏版)》请在冰点文库上搜索。
![EDA课程设计抢答器.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/9fc48e9a-7e85-4ecb-a044-9b538f901dfc/9fc48e9a-7e85-4ecb-a044-9b538f901dfc1.gif)
EDA课程设计抢答器
燕山大学
课程设计说明书
题目:
抢答器
学院(系):
电气工程学院
年级专业:
08级电气工程及其自动化
学号:
学生姓名:
指导教师:
教师职称:
实验师
燕山大学课程设计(论文)任务书
院(系):
电气工程学院基层教学单位:
电子实验中心
学号
学生姓名
专业(班级)
08应电4班
设计题目
抢答器
设
计
技
术
参
数
●五人参赛,每人一个按钮;
●主持人一个按钮,按下开始,具有复位功能;
●抢中者对应的指示灯亮;
●显示抢中者序号;
●有人抢答时,蜂鸣2s。
设
计
要
求
●用拨码开关设定主持人及参赛者按钮;
●用红色信号指示灯组L1-L5表示对应参赛者指示灯;
●用点阵显示抢中者序号。
工
作
量
●学会使用Max+PlusII软件、VerilogHDL语言和实验箱;
●独立完成电路设计,编程下载、连接电路和调试;
●参加答辩并书写任务书。
工
作
计
划
1.了解EDA的基本知识,学习使用软件Max+PlusII,下发任务书,开始电路设计;
2.学习VerilogHDL语言,用VerilogHDL进行程序设计
3.学习使用实验箱,继续电路设计;
4.完成电路设计;
5.编程下载、连接电路、调试和验收;
6.答辩并书写任务书。
参
考
资
料
《数字电子技术基础》.阎石主编.高等教育出版社.
《EDA课程设计A指导书》.郑兆兆等编.
指导教师签字
基层教学单位主任签字
说明:
此表一式四份,学生、指导教师、基层教学单位、系部各一份。
2011年1月13日
第一章设计说明……………………………………………………………………………4
1.1设计思路………………………………………………………………………4
1.2模块介绍………………………………………………………………………4
第二章VerilogHDL设计源程序…………………………………………………………5
第三章波形仿真图………………………………………………………………………13
第四章管脚锁定及硬件连线……………………………………………………………16
第五章总结………………………………………………………………………………17
参考文献……………………………………………………………………………………18
第一章设计说明
1.1设计思路
本次EDA课程设计的题目是抢答器。
要求实现5人抢答功能;有人抢答时蜂鸣2S;用L1-L5表示对应参赛者指示灯;用点阵显示抢中者序号。
根据任务书的要求,当有第一个抢答信号时,将对应的端口置为高电平,同时产生锁定信号将其余抢答者的信号屏蔽,端口连接红色信号指示灯组L1-L5,同时作为蜂鸣器和点阵的输入信号。
当主持人复位按钮按下时,将所有端口置零,即可开始下次抢答。
当输出端口q1至q5有信号,即有人抢答时,给蜂鸣器高电平使其发声,同时利用对clk的分频控制延时,延时结束给蜂鸣器低电平。
点阵模块根据输入的q1至q5信号,依次产生对应的点阵控制信号RA和ROW。
本次设计包括clk,k1,k2,k3,k4,k5,reset六个输入和q1,q2,q3,q4,q5,RA,ROW,flag八个输出。
其中RA,ROW为八位,7为高位,0为低位。
q1至q5与红色信号指示灯组L1-L5相连;RA、ROW与点阵的控制端RA、ROW相连;flag与SPKER相连。
1.2模块介绍
本次课程设计的模块包括抢答部分、点阵显示部分和蜂鸣器部分。
抢答部分利用always块对每个clk的上升沿敏感,利用外层的if语句判断主持人按钮reset是否按下,若没有按下进入内层if语句,对5个抢答者的信号依次进行判定并产生输出信号q1至q5及锁定信号lock。
理论上可分辨时间相差0.001秒的抢答信号,对于实际应用来说已经够用了,提高clk频率可以进一步提高分辨率。
点阵显示部分采用if循环,控制在每个clk的上升沿计数值加1,构成八进制计数器,得到点阵的扫描信号;if语句嵌套case语句将抢答者情况罗列出来,对ROW、RA依次进行赋值。
蜂鸣器部分在每个clk的上升沿判断是否有人抢答,若有信号转入循环延时,同时蜂鸣器开始发声,对1KHZ的clk进行分频,延时结束后,蜂鸣器无声。
第2章VerilogHDL设计源程序
顶层模块:
moduleqiangdaqi(clk,k1,k2,k3,k4,k5,reset,q1,q2,q3,q4,q5,RA,ROW,flag);
inputclk,k1,k2,k3,k4,k5,reset;
outputq1,q2,q3,q4,q5,flag;
output[7:
0]RA,ROW;
qiangdau1(.clk(clk),.k1(k1),.k2(k2),.k3(k3),.k4(k4),.k5(k5),
.reset(reset),.q1(q1),.q2(q2),.q3(q3),.q4(q4),.q5(q5));
dianzhenu2(.clk(clk),.q1(q1),.q2(q2),.q3(q3),.q4(q4),.q5(q5),
.RA(RA),.ROW(ROW));
beeu3(.q1(q1),.q2(q2),.q3(q3),.q4(q4),.q5(q5),.clk(clk),.flag(flag));
endmodule
抢答模块:
moduleqiangda(clk,k1,k2,k3,k4,k5,reset,q1,q2,q3,q4,q5);
inputclk,k1,k2,k3,k4,k5,reset;
outputq1,q2,q3,q4,q5;
regq1,q2,q3,q4,q5,lock;
always@(posedgeclkorposedgereset)
begin
if(reset)//判断主持人是否复位
begin
lock=0;
q1=0;q2=0;q3=0;q4=0;q5=0;
end
else
begin
if(k1==1&&lock==0)//1号选手抢答
begin
q1=1;
lock=1;
end
elseif(k2==1&&lock==0)//2号选手抢答
begin
q2=1;
lock=1;
end
elseif(k3==1&&lock==0)//3号选手抢答
begin
q3=1;
lock=1;
end
elseif(k4==1&&lock==0)//4号选手抢答
begin
q4=1;
lock=1;
end
elseif(k5==1&&lock==0)//5号选手抢答
begin
q5=1;
lock=1;
end
end
end
endmodule
点阵模块:
moduledianzhen(clk,q1,q2,q3,q4,q5,RA,ROW);
inputclk,q1,q2,q3,q4,q5;
output[7:
0]RA,ROW;
reg[7:
0]RA,ROW,count;
always@(posedgeclk)
begin
count=count+1;//循环,提供扫描控制信号
if(count==9)
count=1;
if(q1)//控制点阵显示“1”
begin
case(count)
1:
beginROW='hfe;RA='h08;end
2:
beginROW='hfd;RA='h18;end
3:
beginROW='hfb;RA='h38;end
4:
beginROW='hf7;RA='h18;end
5:
beginROW='hef;RA='h18;end
6:
beginROW='hdf;RA='h18;end
7:
beginROW='hbf;RA='h18;end
8:
beginROW='h7f;RA='h3c;end
endcase
end
elseif(q2)//控制点阵显示“2”
begin
case(count)
1:
beginROW='hfe;RA='h3c;end
2:
beginROW='hfd;RA='h04;end
3:
beginROW='hfb;RA='h04;end
4:
beginROW='hf7;RA='h3c;end
5:
beginROW='hef;RA='h20;end
6:
beginROW='hdf;RA='h20;end
7:
beginROW='hbf;RA='h20;end
8:
beginROW='h7f;RA='h3c;end
endcase
end
elseif(q3)//控制点阵显示“3”
begin
case(count)
1:
beginROW='hfe;RA='h3c;end
2:
beginROW='hfd;RA='h04;end
3:
beginROW='hfb;RA='h04;end
4:
beginROW='hf7;RA='h3c;end
5:
beginROW='hef;RA='h04;end
6:
beginROW='hdf;RA='h04;end
7:
beginROW='hbf;RA='h04;end
8:
beginROW='h7f;RA='h3c;end
endcase
end
elseif(q4)//控制点阵显示“4”
begin
case(count)
1:
beginROW='hfe;RA='h08;end
2:
beginROW='hfd;RA='h18;end
3:
beginROW='hfb;RA='h38;end
4:
beginROW='hf7;RA='h58;end
5:
beginROW='hef;RA='hfe;end
6:
beginROW='hdf;RA='h18;end
7:
beginROW='hbf;RA='h18;end
8:
beginROW='h7f;RA='h3c;end
endcase
end
elseif(q5)//控制点阵显示“5”
begin
case(count)
1:
beginROW='hfe;RA='h7c;end
2:
beginROW='hfd;RA='h40;end
3:
beginROW='hfb;RA='h40;end
4:
beginROW='hf7;RA='h7c;end
5:
beginROW='hef;RA='h04;end
6:
beginROW='hdf;RA='h04;end
7:
beginROW='hbf;RA='h04;end
8:
beginROW='h7f;RA='h7c;end
endcase
end
else//无人抢答或复位后,点阵无显示
begin
case(count)
1:
beginROW='hfe;RA='h00;end
2:
beginROW='hfd;RA='h00;end
3:
beginROW='hfb;RA='h00;end
4:
beginROW='hf7;RA='h00;end
5:
beginROW='hef;RA='h00;end
6:
beginROW='hdf;RA='h00;end
7:
beginROW='hbf;RA='h00;end
8:
beginROW='h7f;RA='h00;end
endcase
end
end
endmodule
蜂鸣器模块:
modulebee(q1,q2,q3,q4,q5,clk,flag);
inputq1,q2,q3,q4,q5,clk;
outputflag;
regflag;
reg[15:
0]x1;
always@(posedgeclk)
begin
if((q1||q2||q3||q4||q5)&&(x1<2001))//若有人抢答,开始计数
x1=x1+1;
if(~(q1||q2||q3||q4||q5))//无人抢答或复位,计数清零
x1=0;
end
always
begin
if(x1==0||x1==2001)//时钟信号采用1K,2000分频后产生2S信号
flag=0;
else
flag=1;
end
endmodule
第三章波形仿真图
此波形图对应先抢答者为1号选手。
此波形对应先抢答者为2号选手。
此波形对应先抢答者为3号选手。
此波形对应先抢答者为4号选手。
此波形对应先抢答者为5号选手。
第四章管脚锁定及硬件连线
管脚锁定情况如下:
INPUT/OUTPUT
端口名称
管脚号
INPUT/OUTPUT
端口名称
管脚号
INPUT
clk
Pin83
OUTPUT
flag
Pin38
INPUT
k1
Pin39
OUTPUT
q1
Pin75
INPUT
k2
Pin40
OUTPUT
q2
Pin85
INPUT
k3
Pin41
OUTPUT
q3
Pin87
INPUT
k4
Pin44
OUTPUT
q4
Pin89
INPUT
k5
Pin45
OUTPUT
q5
Pin92
INPUT
reset
Pin53
OUTPUT
RA0
Pin173
OUTPUT
ROW0
Pin174
OUTPUT
RA1
Pin175
OUTPUT
ROW1
Pin176
OUTPUT
RA2
Pin177
OUTPUT
ROW2
Pin179
OUTPUT
RA3
Pin187
OUTPUT
ROW3
Pin189
OUTPUT
RA4
Pin190
OUTPUT
ROW4
Pin191
OUTPUT
RA5
Pin192
OUTPUT
ROW5
Pin193
OUTPUT
RA6
Pin195
OUTPUT
ROW6
Pin196
OUTPUT
RA7
Pin197
OUTPUT
ROW7
Pin198
硬件连线情况如下:
Pin83连接至箱上中频组11号端作为clk;Pin173、175、177、187、190、192、195、197分别作为RA0—RA7连接至箱上点阵显示信号接线组“COL1_8R(T)”;Pin174、176、179、189、191、193、196、198分别作为ROW0—7连接至箱上点阵显示信号接线组“ROW1_8(T)”。
其余输入/输出芯片内部都有定义,无须连线。
第五章总结
可以说,是这次EDA课程设计把我领进了EDA的大门。
以前自己对EDA的理解仅限于利用Protel等软件做出PCB版的传统方法;通过这次课程设计,我接触了一种全新的EDA方法,让我受益匪浅。
我在这次课程设计里学会了使用Max+PlusⅡ软件,初步掌握了VerilogHDL语言。
刚领到题目时发现抢答器的功能比较分散,于是采用了分模块的设计方法,在编程的时候也发现了不少问题,可能是由于芯片的原因,编程时有些C常用的语句不能被编译(比如for循环,while语句)让我不得不用别的语句代替,VerilogHDL关键词区分大小写等和C语言不同的部分也让我不太适应。
经过多次调试程序编译通过的时候我非常兴奋。
之后管脚锁定和下箱出现了两个问题,点阵的显示与正常相反,蜂鸣器的延时长于2S。
第一个问题经过检查后发现是自己粗心把RA管脚接反了,第二个问题可能是因为控制蜂鸣器的时钟分频信号运算有延迟,经改动后解决。
上箱调试让我明白了理论与实际的差异,理论需要经过实践才能发现它的不足并进行修改完善。
经过几天的努力,在老师的辛勤指导下,我顺利的完成了任务。
最后,对帮助指导过我的吕宏诗和张强老师表示衷心的感谢!
!
参考文献
1郑兆兆.EDA课程设计A指导书.燕山大学出版社,2010年
2阎石.数字电子技术基础.高等教育出版社.2010年
燕山大学课程设计评审意见表
指导教师评语:
①该生学习态度(认真较认真不认真)
②该生迟到、早退现象(有无)
③该生依赖他人进行设计情况(有无)
平时成绩:
指导教师签字:
2011年1月14日
图面及其它成绩:
答辩小组评语:
①设计巧妙,实现设计要求,并有所创新。
②设计合理,实现设计要求。
③实现了大部分设计要求。
④没有完成设计要求,或者只实现了一小部分的设计要求。
答辩成绩:
组长签字:
2011年1月14日
课程设计综合成绩:
答辩小组成员签字:
2011年1月14日