基于CPLD的棋类竞赛计时钟.docx
- 文档编号:10143463
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:31
- 大小:659.15KB
基于CPLD的棋类竞赛计时钟.docx
《基于CPLD的棋类竞赛计时钟.docx》由会员分享,可在线阅读,更多相关《基于CPLD的棋类竞赛计时钟.docx(31页珍藏版)》请在冰豆网上搜索。
基于CPLD的棋类竞赛计时钟
课程设计
课程名称嵌入式系统
课题名称基于CPLD的棋类竞赛计时钟
专业电子信息工程
班级电子信息0801
学号
姓名
指导教师
课程设计任务书
课程名称:
嵌入式系统
题目:
基于CPLD的棋类竞赛计时钟
专业班级:
电子信息0801
学生姓名:
指导老师:
审批:
任务书下达日期2011年11月24日
设计完成日期2011年12月8日
设计内容与设计要求
CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,可将一个较复杂的数字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能。
有关知识可参见相关教材或参考书。
一.设计内容
设计并制作一个用于棋类比赛的计时钟系统,功能要求如下:
1.该计时钟可分别完成甲乙对规定用时的计时和规定时间用完后的读秒计时。
2.规定甲乙双方各有2小时比赛规定用时,分别设计各方的用时定时器,并用数码管显示各方已用的时、分从0:
00~1:
59计时间隔为1S。
3.2小时规定时间用完后,每方限定在30秒内必须下出一步棋,此时定时器将完成对读秒时间的30S倒计时,并数码管显示此时过程30~00。
若计时到零,则发生警报信号该方超时负。
4.各定时器设置计时暂停/继续键,在规定时间计时时,该键的作用为暂停本方计时,并继续对方计时;在读秒时间计时时,该键的作用为复位本方计时起始点29S,并启动对方定时器。
二、设计要求:
1、设计思路清晰,给出整体设计框图;
2、在MAX+PLUSⅡ中设计各单元电路,完成其功能仿真和编译并生成低层模块;
3、在MAX+PLUSⅡ中完成顶层设计并编译通过;
4、在MAX+PLUSⅡ中完成设计下载并调试电路;
5、写出设计报告;
主要设计条件
1.提供EDA实验室;
2.提供EL实验箱和CPLD芯片;
3.提供ALTERA公司的MAX+PLUS10.1设计软件
说明书格式
1.课程设计封面;
2.任务书;
3.说明书目录;
4.设计总体思路,基本原理和框图(顶层电路图);
5.单元电路设计(各次级模块电路图);
6.设计仿真;
7.编程下载;
8.总结与体会;
9.附录;
10.参考文献。
进度安排
星期一、二:
下达设计任务书,介绍课题内容与要求;
介绍MAX+plusⅡ软件的使用;查找资料,确定总体设计方案和单元电路设计;
星期三~第二周星期一:
单元电路设计与仿真,硬件下载;
第二周星期二、三:
硬件下载;
第二星期四、五:
书写设计报告,打印相关图纸;答辩
参考文献
1.康华光主编.电子技术基础(数字部分),高等教育出版社。
2.阎石主编.电子技术基础(数字部分),清华大学出版社。
3.陈大钦主编,电子技术基础实验,高等教育出版社。
4.彭介华主编,电子技术课程设计指导,高等教育出版社。
5.张原编著,可编程逻辑器件设计及应用,机械工业出版社。
6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。
7.MAX+PLUSⅡ入门
8.刘洪喜,陆颖编著.VHDL电路设计实用教程清华大学出版社
目录
1.总体设计思路1
1.1基本原理1
1.2总体设计框图2
2.单元电路设计3
2.1控制模块3
2.2选择模块4
2.3显示模块2
2.4报警模块2
2.5计时模块2
3.总体设计思路3
4.总结与体会4
5.附录5
5.1总电路图5
5.2参考程序6
6.参考文献15
1.总体设计思路
1.1基本原理
本次设计的基于CPLD的棋类竞赛计时钟可以用于棋类竞赛参赛双方对规定用时的计时和规定时间用完后的读秒计时。
棋类竞赛规则为:
AB两方参赛选手分别有2小时的比赛固定用时,因此需要设计AB两位参赛选手都需要的计设备,用于0—1:
59分钟的计时使用。
当组委会规定的的2小时固定时间用完后,则需限定AB双方在30s内必须下出一步棋,此时定时器将完成对30s的倒计时,并通过连接一个警报器以告知双方比赛结果。
两方若任意一人计时到零,则他方的警报灯便会亮起,便告负;反之,另方灯亮起则他方为负。
并且各定时器设置计时暂停/继续键,可用于双方比赛时对时间的计时。
而在30s倒计时工作时,该键的作用为复位本方计时起始点29S,并启动对方定时器。
设置系统复位键,比赛结束时,按该键使各方的定时器均复位到0:
00,以便重新开始比赛。
控制模块是本次设计的核心,他起到对双方选手时间的控制包括对暂停请求、即时转换等核心功能。
选择模块的设置,是为了很好解决显示管数量不足的问题。
在输入暂停\继续开关的作用下,轮流显示参赛双方所用时间情况给显示模块。
显示模块是一个动态扫描显示电路。
在一个人眼观察不出的扫描频率下,轮流在相对应的显示管上显示输入端口的输入的数据。
30s倒计时器的输出同时也控制着报警模块的工作,当甲乙任一方所有时间都用完时,报警模块输出报警信号,宣布比赛结束,谁的时间先用完谁就输了。
1.2总体设计框图
输入
控制模块
A2小时计数器
B2小时计数器
B30秒计数器
A30秒计数器
报警模块
选择模块
输出报警信号
显示模块
显示时间
2.单元电路设计
2.1控制模块
控制模块控制各计数器协调工作,完成系统的各项功能。
是该系统的核心部分(其模块图如图所示)。
各端口受哪些端口控制,各输出什么时候输出什么样的值,
1.ena控制A方2小时规定时计数器的暂停\继续:
s
counta
ena
0
0
0
0
1
0
1
0
1
1
1
0
其中S为输入暂停\继续信号,counta为该计数器的进位输出。
按照设计要求,规定时用完后,counta输出为‘1’,规定时计数器停止计时,即ena=‘0’,S为零时,设置规定时计数器不工作,即ena=‘0’,所以只有当S=‘1’和counta=‘0’时,规定时计数器工作,即ena=‘1’。
2.enb控制B方2小时规定时计数器的暂停\继续:
s
countb
Enb
0
0
1
0
1
0
1
0
0
1
1
0
其中S为输入暂停\继续信号,countb为该计数器的进位输出。
按照设计要求,规定时用完后,countb输出为‘1’,规定时计数器停止计时,即enb=‘0’,S为高电平‘1’时,设置规定时计数器不工作,即enb=‘0’,所以只有当S=‘0’和countb=‘0’时,规定时计数器工作,即enb=‘1’。
3.en3a控制A方30秒计数器的暂停\继续:
counta
s
count3a
en3a
0
X
X
0
1
0
0
0
1
0
1
0
1
1
0
1
1
1
1
0
其中S为输入暂停\继续信号,counta为规定时2小时计数器的进位输出,count3a为甲方30秒进位输出。
按照设计要求,规定时用完后,counta输出为‘1’,规定时计数器停止计时,启动甲方30秒倒计时,即en3a=‘1’,否则en3a='0'。
S为零时,设置规定时计数器不工作,即en3a=‘0’。
当30秒倒计时计时守毕,即count3a输出为‘1’时,30秒计时器也不工作,此时en3a=‘0’。
所以只有当S=‘1’和counta=‘1’和count3a=‘0’时,该计时器工作,即en3a=‘1’。
4.en3b控制B方30秒计数器的暂停\继续:
countb
s
count3b
en3b
0
X
X
0
1
0
0
1
1
0
1
0
1
1
0
0
1
1
1
0
其中S为输入暂停\继续信号,countb为规定时2小时计数器的进位输出,count3b为乙方30秒进位输出。
按照设计要求,规定时用完后,countb输出为‘1’,规定时计数器停止计时,启动乙方30秒倒计时,即en3b=‘1’,否则en3a='0'。
S为高电平‘1’时,设置规定时计数器不工作,即en3a=‘0’。
当30秒倒计时计时守毕,即count3b输出为‘1’时,30秒计时器也不工作,此时en3b=‘0’。
所以只有当S=‘0’和counta=‘1’和count3a=‘0’时,该计时器工作,即en3b=‘1’。
5.cr3a、cr3b控制AB双方30秒倒计数器的清零复位:
s
cr
cr3a
cr3b
0
0
0
1
0
1
1
1
1
0
1
0
1
1
1
1
其中S为输入暂停\继续信号,cr为系统输入清零复位信号。
按照设计要求,当cr为‘1’时,系统发出清零信号,系统清零复位,所以此时cr3a、cr3b都为‘1’。
当S=‘0’时,规定甲方30秒复位,即cr3a输出为‘1’,否则规定乙方30秒计数器复位,即cr3b=‘1’。
控制模块的时序仿真如图所示:
图2控制模块时序仿真
2.2选择模块
选择模块其实质就是一个选择性开关!
(其模块如图所示)在系统设置的暂停\继续端的作用下,设当s='1'时,选择甲方所用时间情况给输出,
即选择a[3..0]、b[3..0]、c[3..0]、d[3..0]和e[3..0]送给输出端输出,它们分别是甲方的秒个位,秒十位,分个位、分十位和时个位.并用A=1010为甲方的名称;当s='0'时,选择乙方所用时间情况给输出,即选择f[3..0]、g[3..0]h[3..0]、i[3..0]和j[3..0]送给输出端输出,它们分别是乙方的秒个位,秒十位,分个位,分十位和时个位.并b=1011代表乙方名称.secun,secten,minun,minten,hunit,who分别为30秒个位、30秒十位、小时分个位、分十位、时位、端口。
图3选择模块时序仿真
2.3显示模块
六个输入端口分别接选择模块的输入,在一个较高的时钟脉冲钟作用下,从第一个输入端口的情况依次扫描到第六个,并在显示管上显示。
其中d0[3..0]、d1[3..0]、d2[3..0]、d3[3..0]、d4[3..0]、d5[3..0]分别是30秒个位、30秒十位、小时分个位、分十位、时位和端口。
所以也称位
动态扫描显示。
SG[6..0]和BT[7..0]分别为段控制。
信号和位控制信号其模块如右图所示。
显示模块的时序仿真如图12所示:
图4显示模块时序仿真
2.4报警模块
报警模块实现的功能是输出听觉和视觉上的比赛结束信号,并且判断是何方失败(其模块图如图所示)。
count3a、count3b分别代表甲乙方30秒倒计时的进位输出,a、b分别代表双方视觉上的信号输出(驱动发光二极管发光),warn位听觉上的报警信号,驱动喇叭发出声音。
只有当甲或者乙的时间全部用完,则比赛结束。
即count3a='1'或count3b='1'成立时,warn信号位扫描频率,如果是甲先用完,a位零,甲灯亮宣告甲输掉这场比赛,反之,乙灯亮,乙输掉这场比赛
报警模块的时序仿真如图所示
图5总体设计框图
2.5计时模块
2.5.1两小时规定计时器
2小时规定计时器完成2个小时的计时(其模块如
图所示):
当复位端cir无效,计数使能端en有效时
每来一个秒的时钟脉冲,秒60计数器加一。
计到60
时发出一个进位信号Co去作为60分计数器的时钟脉
冲即每来一个Co,分60计数器加1。
而当计数到60
时,也发出个进位信号Co1,该信号去作为时计数器的时钟脉冲,每来一个Co1,即计完了60分钟,时计数器加1。
当这个2小时计数器计到两个小时时,发出个进为信号(高电平有效)Count,直到有复位信号有效(cir='1')时回到低电平0。
计数时,如果计数使能端无效,则计数暂停,恢复有效时继续计数。
这样就完成了两小时的计时。
其时序仿真如图4所示:
图62小时计时器时序仿真
2.5.130秒倒计时器
30秒倒计时器是一个减法计数器(其模块如图)。
所示完成对甲和乙用完归定时间的读秒计时.该计数器从29开始,如果清零端无效,每来一个秒脉冲,在继续使能端有效下,减少1,到28依次到00,此时输出一个进位信号Co为高电平1,直到有清零端复位有效时才回到0,此时计数器复位到29,重新开始计时。
其时序仿真图如图:
图7总体设计框图
3.总体设计思路
总电路模块图如图15所示,其中highfre为时钟信号,secpluse为声音报警信号的输入,reset为复位信号,start/pause为暂停\继续信号,ld为声音报警输出,a为甲方时间耗尽时的LED报警显示,b为乙方时间耗尽时的LED报警显示segs[6..0]和bits[7..0]分别为段控制信号和为控制信号。
总电路仿真时序图如图8所示:
图8总体设计框图
4.总结与体会
5.附录
5.1总电路图
图9棋类竞赛及时钟总电路图
5.2参考程序
5.2.130秒倒计时器:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcnt30sIS
PORT(
clk:
INSTD_LOGIC;
cir:
INSTD_LOGIC;
en:
INSTD_LOGIC;
co:
OUTSTD_LOGIC;
sunit:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
stent:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
ENDcnt30s;
ARCHITECTUREaOFcnt30sIS
SIGNALunit:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALtent:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk,cir,en)
BEGIN
IF(cir='1')THEN
co<='0';
unit<="1001";
tent<="0010";
ELSIF(clk'EVENTANDclk='1'ANDen='1')THEN
unit<=unit-1;
IF(unit="0000")THEN
unit<="1001";
tent<=tent-1;
IF(tent="0000")THEN
co<='1';
ENDIF;
ENDIF;
ENDIF;
sunit<=unit;
stent<=tent;
ENDPROCESS;
ENDa;
5.2.12小时规定计时器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcnt2hsIS
PORT(
clk:
INSTD_LOGIC;
cir:
INSTD_LOGIC;
en:
INSTD_LOGIC;
co:
OUTSTD_LOGIC;
munit:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
mtent:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
hunit:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
ENDcnt2hs;
--architectureofcntgds.
--a:
bc=1:
59.
ARCHITECTUREaOFcnt2hsIS
SIGNALa:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALb:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALc:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALcount:
STD_LOGIC;
SIGNALsecs:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALtensecs:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk,cir,en)
BEGIN
IF(clk'EVENTANDclk='1'ANDen='1')THEN
IF(cir='1')THEN
a<="0000";
b<="0000";
c<="0000";
count<='0';
ELSEsecs<=secs+1;
ENDIF;
IF(secs="1001")THEN--10secs
secs<="0000";
tensecs<=tensecs+1;
ENDIF;
IF(tensecs="0101"ANDsecs="1001")THEN--59secs1min.
tensecs<="0000";
secs<="0000";
c<=c+1;
ENDIF;
IF(c="1010")THEN--09=>10mins
b<=b+1;
c<="0000";
ENDIF;
IF(b="0101"ANDc="1010")THEN--59mins1hours
b<="0000";
c<="0000";
a<=a+1;
ENDIF;
IF(a="0010"ANDb="0000"ANDc="0000")THEN
--count<='1';
a<="0000";
b<="0000";
c<="0000";
count<='1';
ELSE
count<='0';
ENDIF;
munit<=c;
mtent<=a;
hunit<=b;
co<=count;
ENDIF;
ENDPROCESS;
ENDa;
5.2.3控制器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcontrolerIS
PORT(
counta,count3a,countb,count3b:
INSTD_LOGIC;
cr,s:
INSTD_LOGIC;
ena,en3a,enb,en3b,cr3a,cr3b:
OUTSTD_LOGIC
);
ENDcontroler;
ARCHITECTUREaOFcontrolerIS
BEGIN
PROCESS(s,counta)
BEGIN
IF(s='0')THEN
ena<='0';
ELSIF(counta='0')THEN
ena<='1';
ELSE
ena<='0';
ENDIF;
ENDPROCESS;
--processs,counta,count3a.
PROCESS(s,counta,count3a)
BEGIN
IF(count3a='1')THEN
en3a<='0';-----------
ELSIF(counta='1'ANDs='1')THEN
en3a<='1';
ELSE
en3a<='0';
ENDIF;
ENDPROCESS;
--processs,countb.
PROCESS(s,countb)
BEGIN
IF(s='1')THEN
enb<='0';
ELSIF(countb='0')THEN
enb<='1';
ELSE
enb<='0';
ENDIF;
ENDPROCESS;
--processs,countb,count3b
PROCESS(s,countb,count3b)
BEGIN
IF(count3b='1')THEN
en3b<='0';
ELSIF(countb='1'ANDs='0')THEN
en3b<='1';
ELSE
en3b<='0';
ENDIF;
ENDPROCESS;
--processsandcr.
PROCESS(s,cr)
BEGIN
IF(cr='1')THEN
cr3a<='1';
ELSIF(s='0')THEN
cr3a<='1';
ELSE
cr3a<='0';
ENDIF;
ENDPROCESS;
--processsandcr.
PROCESS(s,cr)
BEGIN
IF(cr='1')THEN
cr3b<='1';
ELSIF(s='1')THEN
cr3b<='1';
ELSE
cr3b<='0';
ENDIF;
ENDPROCESS;
ENDa;
5.2.4显示器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYscanIS
PORT(
clk:
INSTD_LOGIC;
d0,d1,d2:
INSTD_LOGIC_VECTOR(3DOWNTO0);
d3,d4,d5:
INSTD_LOGIC_VECTOR(3DOWNTO0);
segs:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);--segmentcontrol.
bits:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)--ledsbitcontrol.
);
END;
ARCHITECTUREaOFscanIS
SIGNALCNT8:
STD_LOGIC_VECTOR(3DOWNTO0);
SIG
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 CPLD 棋类 竞赛 时钟