东北石油大学课程设计2014年 3 月7日东北石油大学课程设计任务书课程EDA技术课程设计题目拔河游戏机专业电子信息工程姓名学号主要内容、基本要求、主要参考资料等主要内容:电子拔河游戏机是一种能容纳甲乙双方参赛游戏电路。
由一排发光二极管表示拔河的“电子绳”。
由甲乙双方通过按纽开关使发光二极管向一方的终点延伸,当延伸到某方的最后一个发光二极管时,则该方获胜,连续比赛多局以定胜负。
基本要求:1、设计一个能进行拔河游戏的电路。
2、电路使用9个发光二极管,开机后只有中间一个发亮,此即拔河的中心点。
3、游戏双方各持一个按钮,迅速地、不断地按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按一次,亮点移动一次。
4、亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。
5、用数码管显示获胜者的盘数。
主要参考资料:[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.[2] 康华光主编.电子技术基础模拟部分. 北京:高教出版社,2006.[3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.完成期限2014.3.7指导教师专业负责人2014年3月3日一、设计思想1.基本原理拔河游戏机是通过控制“电子绳”发亮的LED管由中点向速度快的一方移动,而阻止向另一方移动,按键较快的一方获胜。
此次课程设计主要用到加/减计数器,通过其输出状态再通过译码器控制LED发亮。
加/减计数器,输入“加脉冲”,加运算亮,亮点向右移;输入“减脉冲”,减运算亮,亮点向左移。
拔河游戏机由一个控制电路指示谁胜谁负,当亮点移到任一方终端时,由控制电路产生一个信号,使计数器停止计数。
当亮点达到任一方的终点时,该终点发出电路封锁加/减脉冲信号,实现电路自锁,使加/减脉冲立即无效,同时实现电路自动加分。
双方终端二极管“点亮”信号分别接两个计数器的“使能”端,当一方取胜时,相应的计数器进行一次计数,这样得到双方取胜次数的显示设置一个“复位”按钮,使亮点回到中心,取胜计数器也要设置一个“复位”按钮,使之能清零。
2.设计框图甲乙上方比赛按键通过频率计数器指示,根据中心LED比较,当一方取胜时,相应计数器计数,通过数码管显示取胜次数。
图1 设计流程图二、设计步骤和调试过程1、模块设计和相应模块代码频率计数模块CNT10,用于对双方按钮的次数计数,每遇到上升沿计数一次。
LBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT(CLK,RST,EN:STD_LOGIC;COUT:OUT STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END;ARCHITECTURE ONE OF CNT10 ISBEGINPROCESS(CLK,RST,EN)V ARIABLE CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST='1' THENCQI:=(OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1' THENIF EN='1' THENIF CQI<9 THEN CQI:=CQI+1;ELSE CQI :=(OTHERS=>'0');END IF ;END IF;END IF;IF CQI=9 THEN COUT<='0' ;ELSE COUT<='1';END IF;CQ<=CQI;END PROCESS;END;数码管显示模块SCAN,显示双方取胜次数。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SCAN ISPORT (CLK :IN STD_LOGIC;A1,A2,A3,B1,B2,B3:IN STD_LOGIC_VECTOR(3 DOWNTO 0);SG:OUT STD_LOGIC_VECTOR(8 DOWNTO 0);BT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END;ARCHITECTURE ONE OF SCAN ISSIGNAL CNT4:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL A :STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL CLK1:STD_LOGIC;BEGINP1:PROCESS(CNT4)BEGINCASE CNT4 ISWHEN "000"=>BT<="10000000";A<=A1;WHEN "001"=>BT<="01000000";A<=A2;WHEN "010"=>BT<="00100000";A<=A3;WHEN "011"=>BT<="00000100";A<=B1;WHEN "100"=>BT<="00000010";A<=B2;WHEN "101"=>BT<="00000001";A<=B3;WHEN OTHERS=>BT<="00000000";END CASE ;END PROCESS P1;P2:PROCESS (CLK)V ARIABLE CT:INTEGER RANGE 0 TO 50000;BEGINIF CLK'EVENT AND CLK='1' THEN --1000HZIF CT<49999 THENCT:=CT+1;CLK1<='0';ELSECT:=0;CLK1<='1';END IF;END IF;END PROCESS P2;PROCESS(CLK1)BEGINIF CLK1'EVENT AND CLK1='1' THENIF CNT4<5 THENCNT4<=CNT4+1;ELSECNT4<="000";END IF;END IF;END PROCESS;PROCESS (A)BEGINCASE A ISWHEN "0000"=>SG<="100000000";WHEN "0001"=>SG<="111110001";WHEN "0010"=>SG<="001001000";WHEN "0011"=>SG<="001100000";WHEN "0100"=>SG<="000110010";WHEN "0101"=>SG<="000100100";WHEN "0110"=>SG<="000000100";WHEN "0111"=>SG<="111110000";WHEN "1000"=>SG<="000000000";WHEN "1001"=>SG<="100011111";WHEN "1010"=>SG<="000100100";WHEN "1011"=>SG<="000011000";WHEN "1100"=>SG<="010001100";WHEN "1101"=>SG<="001001000";WHEN "1110"=>SG<="001000000";WHEN "1111"=>SG<="000011111";WHEN OTHERS=>NULL;END CASE ;END PROCESS;END;LED指示模块LMOV,双方的LED灯进行比较,看谁先到达终点。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY LMOV ISPORT (KL ,KR:IN STD_LOGIC_VECTOR(3 DOWNTO 0) ;LED:OUT STD_LOGIC_VECTOR(8 DOWNTO 0);EN : OUT STD_LOGIC;RST:IN STD_LOGIC);END ;ARCHITECTURE ONE OF LMOV ISBEGINPROCESS(RST,KL,KR)BEGINIF RST='1' THEN LED<="111101111";EN<='1';ELSIF KL-KR=1 THEN LED<="111011111";EN<='1';ELSIF KL-KR=2 THEN LED<="110111111";EN<='1';ELSIF KL-KR=3 THEN LED<="101111111";EN<='1';ELSIF KL-KR=4 THEN LED<="011111111";EN<='0';ELSIF KR-KL=1 THEN LED<="111110111";EN<='1';ELSIF KR-KL=2 THEN LED<="111111011";EN<='1' ;ELSIF KR-KL=3 THEN LED<="111111101";EN<='1';ELSIF KL-KR=4 THEN LED<="111111110";EN<='0';ELSIF KR-KL=0 THEN LED<="111101111";EN<='1';ELSE NULL;END IF;END PROCESS;END;主模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY BAHE ISPORT (A,B,RST,CLK:IN STD_LOGIC;SG,LED:OUT STD_LOGIC_VECTOR(8 DOWNTO 0);BT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END BAHE;ARCHITECTURE ONE OF BAHE ISCOMPONENT CNT10PORT (CLK,RST,EN:STD_LOGIC;COUT:OUT STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;COMPONENT SCANPORT (CLK :IN STD_LOGIC;A1, A2,A3,B1,B2,B3:IN STD_LOGIC_VECTOR(3 DOWNTO 0);SG:OUT STD_LOGIC_VECTOR(8 DOWNTO 0);BT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END COMPONENT;COMPONENT LMOVPORT (KL ,KR:IN STD_LOGIC_VECTOR(3 DOWNTO 0) ;LED:OUT STD_LOGIC_VECTOR(8 DOWNTO 0);EN : OUT STD_LOGIC;RST:IN STD_LOGIC);END COMPONENT;SIGNAL E,F,CA1,CA2,CB1,CB2:STD_LOGIC;SIGNAL CQA1,CQA2,CQA3,CQB1,CQB2,CQB3:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINU1:CNT10 PORT MAP(EN=>E,RST=>RST,CLK=>A,COUT=>CA1,CQ=>CQA1);U2: CNT10 PORT MAP(EN=>E,RST=>RST,CLK=>CA1,COUT=>CA2,CQ=>CQA2);U3: CNT10 PORT MAP (EN=>E,RST=>RST,CLK=>CA2,CQ=>CQA3);U4: CNT10 PORT MAP (EN=>E,RST=>RST,CLK=>B,COUT=>CB1,CQ=>CQB1); U5: CNT10 PORT MAP(EN=>E,RST=>RST,CLK=>CB1,COUT=>CB2,CQ=>CQB2);U6: CNT10 PORT MAP (EN=>E,RST=>RST,CLK=>CB2,CQ=>CQB3);U7: SCAN PORT MAP (A1=>CQA1,A2=>CQA2,A3=>CQA3,B1=>CQB1 ,B2=>CQB2,B3=>CQB3,CLK=>CLK,SG=>SG,BT=>BT);U8:LMOV PORT MAP(EN=>E,KL=>CQA2,KR=>CQB2,RST=>RST,LED=>LED);END ARCHITECTURE ONE;2、仿真及仿真结果分析计数器仿真图,每遇到上升沿输出+1,当CQ=9时,COUT=0。