基于CPLD的棋类竞赛计时资料_第1页
基于CPLD的棋类竞赛计时资料_第2页
基于CPLD的棋类竞赛计时资料_第3页
基于CPLD的棋类竞赛计时资料_第4页
基于CPLD的棋类竞赛计时资料_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录1.总体设计思路11.1基本原理11.2总体设计框图22.单元电路设计32.1控制模块32.2选择模块62.3 显示模块72.4 报警模块82.5计时模块93.总电路模块114.总结与体会125.附录135.1 总电路图135.2 参考程序146.参考文献241.总体设计思路1.1基本原理本次设计的基于CPLD的棋类竞赛计时钟可以用于棋类竞赛参赛双方对规定用时的计时和规定时间用完后的读秒计时。棋类竞赛规则为:AB两方参赛选手分别有2小时的比赛固定用时,因此需要设计AB两位参赛选手都需要的计设备,用于01:59分钟的计时使用。当组委会规定的的2小时固定时间用完后,则需限定AB双方在30s内必

2、须下出一步棋,此时定时器将完成对30s的倒计时,并通过连接一个警报器以告知双方比赛结果。两方若任意一人计时到零,则他方的警报灯便会亮起,便告负;反之,另方灯亮起则他方为负。并且各定时器设置计时暂停/继续键,可用于双方比赛时对时间的计时。而在30s倒计时工作时,该键的作用为复位本方计时起始点29S,并启动对方定时器。设置系统复位键,比赛结束时,按该键使各方的定时器均复位到0:00,以便重新开始比赛。控制模块是本次设计的核心,他起到对双方选手时间的控制包括对暂停请求、即时转换等核心功能。选择模块的设置,是为了很好解决显示管数量不足的问题。在输入暂停继续开关的作用下,轮流显示参赛双方所用时间情况给显

3、示模块。显示模块是一个动态扫描显示电路。在一个人眼观察不出的扫描频率下,轮流在相对应的显示管上显示输入端口的输入的数据。30s倒计时器的输出同时也控制着报警模块的工作,当甲乙任一方所有时间都用完时,报警模块输出报警信号,宣布比赛结束,谁的时间先用完谁就输了。1.2总体设计框图输入控制模块A 2小时计数器B 2小时计数器B30秒计数器A 30秒计数器报警模块选择模块输出报警信号显示模块显示时间2.单元电路设计2.1控制模块16控制模块控制各计数器协调工作,完成系统的各项功能。是该系统的核心部分(其模块图如图所示)。各端口受哪些端口控制,各输出什么时候输出什么样的值, 1ena 控制A方2小时规定

4、时计数器的暂停继续:scountaena000010101110其中S为输入暂停继续信号,counta为该计数器的进位输出。按照设计要求,规定时用完后,counta输出为1, 规定时计数器停止计时,即ena=0,S为零时,设置规定时计数器不工作,即ena=0,所以只有当S=1和counta=0时,规定时计数器工作,即ena=1。2enb 控制B方2小时规定时计数器的暂停继续:scountbEnb001010100110其中S为输入暂停继续信号,countb为该计数器的进位输出。按照设计要求,规定时用完后,countb输出为1, 规定时计数器停止计时,即enb=0,S为高电平1时,设置规定时计数

5、器不工作,即enb=0,所以只有当S=0和countb=0时,规定时计数器工作,即enb=1。3en3a 控制A方30秒计数器的暂停继续:countascount3aen3a0XX01000101011011110其中S为输入暂停继续信号,counta为规定时2小时计数器的进位输出,count3a为甲方30秒进位输出。按照设计要求,规定时用完后,counta输出为1, 规定时计数器停止计时,启动甲方30秒倒计时,即en3a=1,否则en3a='0'。S为零时,设置规定时计数器不工作,即en3a=0。当30秒倒计时计时守毕,即count3a输出为1时,30秒计时器也不工作,此时e

6、n3a=0。所以只有当S=1和counta=1和count3a=0时,该计时器工作,即en3a=1。4en3b 控制B方30秒计数器的暂停继续:countbscount3ben3b0XX01001101011001110其中S为输入暂停继续信号,countb为规定时2小时计数器的进位输出,count3b为乙方30秒进位输出。按照设计要求,规定时用完后,countb输出为1, 规定时计数器停止计时,启动乙方30秒倒计时,即en3b=1,否则en3a='0'。S为高电平1时,设置规定时计数器不工作,即en3a=0。当30秒倒计时计时守毕,即count3b输出为1时,30秒计时器也不

7、工作,此时en3b=0。所以只有当S=0和counta=1和count3a=0时,该计时器工作,即en3b=1。5cr3a、 cr3b 控制AB双方30秒倒计数器的清零复位:scrcr3acr3b0001011110101111其中S为输入暂停继续信号,cr为系统输入清零复位信号。按照设计要求,当cr为1时,系统发出清零信号,系统清零复位,所以此时cr3a、cr3b都为1。当S=0时,规定甲方30秒复位,即cr3a输出为1, 否则规定乙方30秒计数器复位,即cr3b=1。控制模块的时序仿真如图所示:图2 控制模块时序仿真2.2选择模块选择模块其实质就是一个选择性开关!(其模块如图所示)在系统设

8、置的暂停继续端的作用下,设当s='1'时,选择甲方所用时间情况给输出,即选择a3.0、b3.0、c3.0、d3.0和e3.0送给输出端输出,它们分别是甲方的秒个位,秒十位,分个位、分十位和时个位.并用A=1010为甲方的名称;当s='0'时,选择乙方所用时间情况给输出,即选择f3.0、g3.0h3.0、i3.0和j3.0送给输出端输出,它们分别是乙方的秒个位,秒十位,分个位,分十位和时个位.并b=1011代表乙方名称.secun,secten,minun,minten,hunit,who分别为30秒个位、30秒十位、小时分个位、分十位、时位、端口。图3 选择模块

9、时序仿真2.3 显示模块六个输入端口分别接选择模块的输入,在一个较高的时钟脉冲钟作用下,从第一个输入端口的情况依次扫描到第六个,并在显示管上显示。其中d03.0 、d13.0、d23.0、d33.0、d43.0、d53.0分别是30秒个位、30秒十位、小时分个位、分十位、时位和端口。所以也称位动态扫描显示。SG6.0 和BT7.0分别为段控制。信号和位控制信号其模块如右图所示。 显示模块的时序仿真如图12所示:图4 显示模块时序仿真2.4 报警模块报警模块实现的功能是输出听觉和视觉上的比赛结束信号,并且判断是何方失败(其模块图如图所示)。count3a、count3b分别代表甲乙方30秒倒计时

10、的进位输出,a、b分别代表双方视觉上的信号输出(驱动发光二极管发光),warn位听觉上的报警信号,驱动喇叭发出声音。只有当甲 或者乙的时间全部用完,则比赛结束。即count3a='1' 或count3b='1'成立时,warn信号位扫描频率,如果是甲先用完,a位零,甲灯亮宣告甲输掉这场比赛,反之,乙灯亮,乙输掉这场比赛报警模块的时序仿真如图所示图5 报警模块时序仿真2.5计时模块2.5.1 两小时规定计时器2小时规定计时器完成2个小时的计时(其模块如图所示):当复位端cir无效,计数使能端en有效时每来一个秒的时钟脉冲,秒60计数器加一。计到60时发出一个进位信

11、号Co去作为60分计数器的时钟脉冲即每来一个Co,分60计数器加1。而当计数到60时,也发出个进位信号Co1,该信号去作为时计数器的时钟脉冲,每来一个Co1,即计完了60分钟,时计数器加1。当这个2小时计数器计到两个小时时,发出个进为信号(高电平有效)Count,直到有复位信号有效(cir='1')时回到低电平0。计数时,如果计数使能端无效,则计数暂停,恢复有效时继续计数。这样就完成了两小时的计时。其时序仿真如图4所示:图6 2小时计时器时序仿真2.5.2 30秒倒计时器30秒倒计时器是一个减法计数器(其模块如图)。所示完成对甲和乙用完归定时间的读秒计时.该计数器从29开始,如

12、果清零端无效,每来一个秒脉冲,在继续使能端有效下,减少1,到28依次到00,此时输出一个进位信号Co为高电平1,直到有清零端复位有效时才回到0,此时计数器复位到29,重新开始计时。其时序仿真图如图:图7 30秒计时器时序仿真3.总电路模块总电路模块图如图15所示,其中highfre为时钟信号,secpluse为声音报警信号的输入,reset为复位信号,start/pause为暂停继续信号,ld为声音报警输出,a为甲方时间耗尽时的LED报警显示,b为乙方时间耗尽时的LED报警显示segs 6.0和bits7.0分别为段控制信号和为控制信号。 总电路仿真时序图如图8所示:图8 总体设计时序仿真4.

13、总结与体会这两周的嵌入式课程设计,一直感觉还是比较充实的。我可以说它带给我非常大的收获,然而这些收获也有很多很多的种类。第一,对软件Quartus的熟悉,这次课程设计主要是集中于软件仿真这一块上面。而软件仿真所遇到的难题,是由于之前对Quartus软件了解不够深刻,没能熟练掌握它,于是就只能一步一步地开始,翻阅各类资料,书本并主动进行软件操作,终于才能对其有所了解,并能开始自主独立的进行某部分编程,和所有的模块的仿真,调试。第二,认识到实践的重要性,在所有仿真成功的前提下将程序调试成功,并不是一件太过困难的事情。按照软件中连接方式,将与之对应的线路接好以后,我们将频率接到一个比较高的点上,以便

14、能以最快的时间计算好2个小时,切换开关,成功分别显示出A,B双方的计时后,进入最后的30秒进行倒计时,倒计时完后报警,则调试已经成功。这时,才代表我们整个系统真正成功完成。第三,自主能力同学们一起仿真成功后,大家便尝试自主独立的完成整个过程,这样既然我们对软件及接线调试更加的熟练,有让我们能够提升自身的能力,我在动手过程中也出现了一点小事故,因为自己的粗心,接错了一条线路,虽然程序内部是在运行却不能够显示,在大家的帮助下找到问题所在,改正后,调试成功,感觉还是非常不容易的。另外,非常感谢老师和同学们给我的帮助。总之,这次课程设计在各方面提升我们的能力,让自己各方面更上一层楼。5.附录5.1 总

15、电路图图9 棋类竞赛及时钟总电路图5.2 参考程序5.2.1 30秒倒计时器:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt30s IS PORT ( clk : IN STD_LOGIC; cir : IN STD_LOGIC; en : IN STD_LOGIC; co : OUT STD_LOGIC; sunit : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); stent : OUT STD_LOGIC_VECTOR (3 DOWNTO

16、0) ); END cnt30s; ARCHITECTURE a OF cnt30s IS SIGNAL unit : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL tent : STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN PROCESS (clk, cir, en) BEGIN IF (cir = '1') THEN co <= '0' unit <= "1001" tent <= "0010" ELSIF (clk'EVENT AND

17、 clk = '1' AND en = '1') THEN unit <= unit - 1; IF (unit = "0000") THEN unit <= "1001" tent <= tent - 1; IF (tent = "0000") THEN co <= '1' END IF; END IF; END IF; sunit <= unit; stent <= tent; END PROCESS; END a;5.2.1 2小时规定计时器LI

18、BRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt2hs IS PORT ( clk : IN STD_LOGIC; cir : IN STD_LOGIC; en : IN STD_LOGIC; co : OUT STD_LOGIC; munit : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); mtent : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); hunit : OUT STD_LOGIC_VECTOR (3 DOWNT

19、O 0) ); END cnt2hs;- architecture of cntgds.- a:bc = 1:59. ARCHITECTURE a OF cnt2hs IS SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL b : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL c : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL count : STD_LOGIC; SIGNAL secs : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL tensecs :

20、 STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN PROCESS (clk, cir, en) BEGIN IF (clk'EVENT AND clk = '1' AND en = '1') THEN IF (cir = '1') THEN a <= "0000" b <= "0000" c <= "0000" count <= '0' ELSE secs <= secs + 1; END IF; IF (s

21、ecs = "1001") THEN - 10 secs secs <= "0000" tensecs <= tensecs + 1; END IF; IF (tensecs = "0101" AND secs = "1001") THEN - 59secs 1min. tensecs <= "0000" secs <= "0000" c <= c + 1; END IF; IF (c = "1010") THEN - 09

22、=> 10mins b <= b + 1; c <= "0000" END IF; IF (b = "0101" AND c = "1010") THEN -59mins 1hours b <= "0000" c <= "0000" a <= a + 1; END IF; IF (a = "0010" AND b = "0000" AND c = "0000") THEN -count <= &

23、#39;1' a <= "0000" b <= "0000" c <= "0000" count <= '1' ELSE count <= '0' END IF; munit <= c; mtent <= a; hunit <= b; co <= count; END IF; END PROCESS;END a;5.2.3 控制器LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_L

24、OGIC_UNSIGNED.ALL; ENTITY controler IS PORT ( counta, count3a, countb, count3b : IN STD_LOGIC; cr, s : IN STD_LOGIC; ena, en3a, enb, en3b, cr3a, cr3b : OUT STD_LOGIC ); END controler; ARCHITECTURE a OF controler IS BEGIN PROCESS (s, counta) BEGIN IF (s = '0') THEN ena <= '0' ELSIF

25、 (counta = '0') THEN ena <= '1' ELSE ena <= '0' END IF; END PROCESS;- process s, counta, count3a. PROCESS (s, counta, count3a) BEGIN IF (count3a = '1') THEN en3a <= '0' - ELSIF (counta = '1' AND s ='1') THEN en3a <= '1' ELSE

26、 en3a <= '0' END IF; END PROCESS;- process s, countb. PROCESS (s, countb) BEGIN IF (s = '1') THEN enb <= '0' ELSIF (countb = '0') THEN enb <= '1' ELSE enb <= '0' END IF; END PROCESS;- process s, countb, count3b PROCESS (s, countb, count3b)

27、BEGIN IF (count3b = '1') THEN en3b <= '0' ELSIF (countb = '1' AND s = '0') THEN en3b <= '1' ELSE en3b <= '0' END IF; END PROCESS;- process s and cr. PROCESS (s, cr) BEGIN IF (cr = '1') THEN cr3a <= '1' ELSIF (s = '0'

28、) THEN cr3a <= '1' ELSE cr3a <= '0' END IF; END PROCESS;- process s and cr. PROCESS (s,cr) BEGIN IF (cr = '1') THEN cr3b <= '1' ELSIF (s = '1') THEN cr3b <= '1' ELSE cr3b <= '0' END IF; END PROCESS;END a;5.2.4 显示器LIBRARY IEEE; US

29、E IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY scan IS PORT ( clk : IN STD_LOGIC; d0, d1, d2 : IN STD_LOGIC_VECTOR (3 DOWNTO 0); d3, d4, d5 : IN STD_LOGIC_VECTOR (3 DOWNTO 0); segs : OUT STD_LOGIC_VECTOR (6 DOWNTO 0); - segment control. bits : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) -

30、leds bit control. ); END; ARCHITECTURE a OF scan IS SIGNAL CNT8 : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL A : STD_LOGIC_VECTOR (3 DOWNTO 0); - A 1-51-23, 1hours 51minutes 23seconds. BEGIN P1 : PROCESS (CNT8) BEGIN CASE CNT8 IS WHEN "0000" => bits <= "00000001" A <= d0; WHE

31、N "0001" => bits <= "00000010" A <= d1; WHEN "0010" => bits <= "00001000" A <= d2; WHEN "0011" => bits <= "00010000" A <= d3; WHEN "0100" => bits <= "00100000" A <= d4; WHEN "0101

32、" => bits <= "10000000" A <= d5; WHEN OTHERS => NULL; END CASE ; END PROCESS P1; P2 : PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF CNT8 = "0101" THEN CNT8 <= "0000" ELSE CNT8 <= CNT8 + 1; END IF; END IF; END PROCESS P2 ; P3

33、 : PROCESS (A) - numbers display. - 1 turn on, 0 down off. BEGIN CASE A IS WHEN "0000" => segs <= "0111111" WHEN "0001" => segs <= "0000110" WHEN "0010" => segs <= "1011011" WHEN "0011" => segs <= "100

34、1111" WHEN "0100" => segs <= "1100110" WHEN "0101" => segs <= "1101101" WHEN "0110" => segs <= "1111101" WHEN "0111" => segs <= "0000111" WHEN "1000" => segs <= "1111111&

35、quot; WHEN "1001" => segs <= "1101111" WHEN "1010" => segs <= "1110111" WHEN "1011" => segs <= "1111100" WHEN OTHERS => NULL ; END CASE ; END PROCESS P3; END a;5.2.5 报警器LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEE

36、E.STD_LOGIC_UNSIGNED.ALL; ENTITY warn IS PORT ( count3a : IN STD_LOGIC; count3b : IN STD_LOGIC; cp : IN STD_LOGIC; warn : OUT STD_LOGIC; a, b : OUT STD_LOGIC ); END warn; ARCHITECTURE a OF warn IS BEGIN PROCESS (count3a, count3b) BEGIN IF (count3a = '1' OR count3b = '1') THEN warn <= CP; ELSE warn <= '0' END IF; END PROCESS;- process count3a, cp. PROCES

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论