目录

  • 设计任务要求
  • 系统设计
  • 仿真波形及分析
  • 源程序
  • 功能说明及资源利用情况
  • 故障及问题分析
  • 总结和结论
  • 设计任务要求

基本要求:

1、8*8点阵中每2*2四个点为一组代表一个蛋的位置,共4*4个位置,与4*4矩阵键 盘位置对应;

2、 数码管DISP1和DISP0显示游戏者得分,DISP7和DISP6显示游戏时间;

3、 用SW7作为游戏机开关,打开开关SW7后游戏开始,此时DISP1和DISP0显示得分“00”,DISP7和DISP6显示游戏时间"00”;

4、 使用按键BTN3进入游戏状态,时间从“00”开始每秒正计时显示。点阵在随机位 置显示彩蛋,彩蛋颜色随机为红色,每只彩蛋显示时间为1秒;

5、 在彩蛋显示时间内,按动相应位置的按键表示击中彩蛋,游戏者得分;彩蛋被击中后四个亮点向四周扩散一圈以呈现爆炸效果,爆炸效果变化下图,如果彩蛋在点阵 边缘,爆炸扩散时只显示点阵范围内部分即可;

6、 击中红蛋加1分,得分同步显示在DISP1和DISP0;

7、 游戏时间已到“60”,则游戏结束,

9、 使用按键SW7可以重新进入新一轮游戏。

  • 系统设计
  1. 设计框图

2.模块设计

1. 随机数生成模块

     2.按键模块

      3.矩阵显示模块

      4.中枢判断模块

       5.记分模块

        6.计时模块

        7.数码管显示模块

        8.最终显示模块

总程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

entity ZCD IS

PORT(CLKALL:IN STD_LOGIC;

START:IN STD_LOGIC;

ROW:IN STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘行信号

COL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘列信号

SEGOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管阳极

CATOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管阴极

R: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--点阵行信号

CR: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--点阵红信号

CG: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--点阵绿信号

V:OUT STD_LOGIC);--声音信号

END ZCD;

architecture s OF ZCD IS

SIGNAL TMP1:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL TMP2,TMP4,TMP5,TMP6,TMP8:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL TMP3,TMP7,Z1,Z2,vvv:STD_LOGIC;

SIGNAL TMP9:STD_LOGIC_VECTOR(1 DOWNTO 0);

signal Z3:STD_LOGIC_VECTOR(7 DOWNTO 0);

COMPONENT SJS1   --随机数

PORT(CLKSJS,RESET:IN STD_LOGIC;

SJS: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END COMPONENT;

COMPONENT KBD    --键盘

PORT(CLKKBD:IN STD_LOGIC;

RR:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

C:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

K:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END COMPONENT;

COMPONENT JGE   --中枢判断

PORT(JGCLK:IN STD_LOGIC;

SJS:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

KEY:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

JGE:OUT STD_LOGIC);

END COMPONENT;

COMPONENT DZ   --点阵

PORT(CLKDZ,RESET:IN STD_LOGIC;

SJSIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

JGE:IN STD_LOGIC;

ROUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

COLR: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

COLG: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END COMPONENT;

COMPONENT SCORE --积分

PORT(ADD,CLK,RESET: IN STD_LOGIC;

SCOREOUT1,SCOREOUT2: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)

);

END COMPONENT;

COMPONENT TIME0  --计时

PORT(CLK,RESET: IN STD_LOGIC;

TIMEOUT1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

TIMEOUT2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

FIN:OUT STD_LOGIC);

END COMPONENT;

COMPONENT YMG    --数码管显示

PORT(CLK,RESET:IN STD_LOGIC;

T1,T2,S1,S2:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

SAO:IN STD_LOGIC_VECTOR(1 DOWNTO 0);

SEG,CAT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END COMPONENT;

COMPONENT BAIWAN

PORT(CLK:IN STD_LOGIC;

CLKOUT:OUT STD_LOGIC);

END COMPONENT;

COMPONENT SM

PORT(CLK:IN STD_LOGIC;

CLK_OUT:OUT STD_LOGIC_VECTOR (1 DOWNTO 0));

END COMPONENT;

COMPONENT FIN

PORT(CLK,F1,VV:IN STD_LOGIC;

DZZ:IN STD_LOGIC_VECTOR(7 DOWNTO 0);

FVV:OUT STD_LOGIC;

FDZ:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)

);

END COMPONENT;

COMPONENT YY

port( clk   :  in std_logic;

reset :  in std_logic;

voices: out std_logic);

end component;

BEGIN

U1:KBD PORT MAP(CLKKBD => CLKALL, RR => ROW, C => COL, K => TMP1);

U2:SJS1 PORT MAP(CLKSJS => CLKALL, RESET => START, SJS => TMP2);

U3:JGE PORT MAP(JGCLK => CLKALL,SJS => TMP2, KEY => TMP1, JGE => TMP3);

U4:DZ PORT MAP(CLKDZ => CLKALL, RESET => START, SJSIN => TMP2, JGE => TMP3, ROUT => R, COLR => Z3, COLG => CG);

U5:BAIWAN PORT MAP(CLK => CLKALL, CLKOUT => TMP7);

U6:TIME0 PORT MAP(CLK => TMP7 ,RESET=>START, TIMEOUT1 => TMP4,TIMEOUT2=> TMP6,FIN=>Z1);

U7:SCORE PORT MAP(ADD => TMP3, CLK => CLKALL, RESET=> START, SCOREOUT1 => TMP5,SCOREOUT2 => TMP8);

U8:SM PORT MAP(CLK => CLKALL, CLK_OUT => TMP9);

U9:YMG PORT MAP(CLK => CLKALL, RESET=>START, T1 => TMP4, T2 => TMP6,S1 => TMP5,S2 => TMP8, SAO => TMP9 ,SEG => SEGOUT, CAT => CATOUT);

U10:YY PORT MAP(CLK=>CLKALL, RESET=>START,voices=>vvv);

U11:FIN PORT MAP(CLK=>CLKALL, F1=>Z1,VV=>vvv ,DZZ=>Z3,FDZ=>CR,FVV=>V);

END architecture s;

随机数模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

entity SJS1 IS  --随机数

PORT(CLKSJS,RESET:IN STD_LOGIC;

SJS: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END SJS1;

architecture s OF SJS1 IS

SIGNAL CLK1: STD_LOGIC_VECTOR (1 DOWNTO 0);

SIGNAL CLK3: STD_LOGIC;

SIGNAL TMP1: STD_LOGIC_VECTOR (3 DOWNTO 0);

SIGNAL TMP: STD_LOGIC_VECTOR (7 DOWNTO 0);

SIGNAL CLKx: STD_LOGIC;

COMPONENT GS  --高速计数器

PORT(CLK,CLEAR:IN STD_LOGIC;

CLK_OUT:OUT STD_LOGIC_VECTOR (3 DOWNTO 0));

END COMPONENT;

COMPONENT DDIV --分频器

PORT(CLK:IN STD_LOGIC;

CLKa:OUT STD_LOGIC);

END COMPONENT;

COMPONENT DIV2000 --0.5秒分频器

PORT(CLK:IN STD_LOGIC;

CLK_OUT:OUT STD_LOGIC);

END COMPONENT;

COMPONENT CATCH  --截取器

PORT(CLK:IN STD_LOGIC;

RU:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

CHU:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END COMPONENT;

BEGIN

U1:DDIV PORT MAP(CLK => CLKSJS, CLKa => CLKx);

U2:GS PORT MAP(CLK => CLKx, CLEAR => RESET,  CLK_OUT=> TMP1);

U3:DIV2000 PORT MAP(CLK => CLKSJS, CLK_OUT => CLK3);

U4:CATCH PORT MAP(CLK=> CLK3, RU => TMP1, CHU => SJS);

END architecture s;

高速计数器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY GS IS

PORT(CLK,CLEAR:IN STD_LOGIC;

CLK_OUT:OUT STD_LOGIC_VECTOR (3 DOWNTO 0));

END GS;

ARCHITECTURE a OF GS IS

BEGIN

PROCESS(CLK,CLEAR)

VARIABLE TMP:STD_LOGIC_VECTOR (3 DOWNTO 0);

BEGIN

IF CLEAR = '1' THEN

TMP:= "0000"; CLK_OUT <="0000";

ELSIF CLK'EVENT AND CLK='1'

THEN

IF TMP = "1111"THEN TMP :="0000";

ELSE TMP:=TMP+1;

END IF;

CLK_OUT <= TMP;

END IF;

END PROCESS;

END a;

分频器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY DDIV IS

PORT(CLK:IN STD_LOGIC;

CLKa:OUT STD_LOGIC);

END DDIV;

ARCHITECTURE a OF DDIV IS

SIGNAL TMP1: INTEGER RANGE 0 TO 370;

BEGIN

PROCESS(CLK)

BEGIN

IF CLK'event AND CLK='1' THEN

IF TMP1<370 THEN

TMP1 <= TMP1+1;

ELSE

TMP1 <= 0;

END IF;

IF TMP1<190 THEN

CLKa <= '0';

ELSE

CLKa <= '1';

END IF;

END IF;

END PROCESS;

END a;

0.5s分频器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY DIV2000 IS

PORT(CLK:IN STD_LOGIC;

CLK_OUT:OUT STD_LOGIC);

END DIV2000;

ARCHITECTURE a OF DIV2000 IS

SIGNAL TMP: INTEGER RANGE 0 TO 19999999;

BEGIN

PROCESS(CLK)

BEGIN

IF CLK'event AND CLK='1' THEN

IF TMP<19999999 THEN

TMP <= TMP+1;

ELSE

TMP <= 0;

END IF;

IF tmp<9999999 THEN

CLK_OUT <= '0';

ELSE

CLK_OUT <= '1';

END IF;

END IF;

END PROCESS;

END a;

截取器

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

ENTITY CATCH IS

PORT(CLK: IN STD_LOGIC;

RU: IN STD_LOGIC_VECTOR(3 DOWNTO 0);

CHU: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END CATCH;

architecture s OF CATCH IS

BEGIN

Process(CLK,RU)

BEGIN

IF CLK'event AND CLK='1' THEN

CHU <= RU ;

END IF;

END Process;

END s;

键盘模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY KBD IS

PORT(CLKKBD:IN STD_LOGIC;

RR:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

C:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

K:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END KBD;

architecture s OF KBD IS

SIGNAL CLK1: STD_LOGIC_VECTOR (1 DOWNTO 0);

SIGNAL CLK2: STD_LOGIC_VECTOR (3 DOWNTO 0);

COMPONENT JSQ --行信号扫描计数

PORT(CLK:IN STD_LOGIC;

CLK_OUT:OUT STD_LOGIC_VECTOR (1 DOWNTO 0));

END COMPONENT;

COMPONENT COL --行信号扫描

PORT(a:IN STD_LOGIC_VECTOR(1 DOWNTO 0);

CLK:IN STD_LOGIC;

l:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

i:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END COMPONENT;

COMPONENT KEY --对应按键

PORT(COL: IN STD_LOGIC_VECTOR(3 DOWNTO 0);

ROW: IN STD_LOGIC_VECTOR(3 DOWNTO 0);

CLK: IN STD_LOGIC;

b: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END COMPONENT;

BEGIN

U1:JSQ PORT MAP(CLK => CLKKBD, CLK_OUT => CLK1);

U2:COL PORT MAP(a => CLK1, CLK => CLKKBD, l => CLK2, i => C);

U3:KEY PORT MAP(COL => CLK2, ROW => RR, CLK => CLKKBD, b => K);

END architecture s;

行信号扫描计数器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY JSQ IS

PORT(CLK:IN STD_LOGIC;

CLK_OUT:OUT STD_LOGIC_VECTOR (1 DOWNTO 0));

END JSQ;

ARCHITECTURE a OF JSQ IS--键盘行信号扫描计数

SIGNAL TMP:STD_LOGIC_VECTOR (1 DOWNTO 0);

BEGIN

PROCESS(CLK)

BEGIN

IF CLK'EVENT AND CLK='1' THEN

IF TMP = "11" THEN TMP<="00";

ELSE TMP<=TMP+1;

END IF;

CLK_OUT <= TMP;

END IF;

END PROCESS;

END a;

行信号扫描

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

ENTITY COL IS

PORT(a:IN STD_LOGIC_VECTOR(1 DOWNTO 0);

CLK:IN STD_LOGIC;

l:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

i:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END COL;

architecture s OF COL IS--行信号扫描

SIGNAL TMP:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

Process(a)

BEGIN

IF CLK'EVENT AND CLK='1' THEN

CASE a IS

WHEN "00" => TMP <="1110";

WHEN "01" => TMP <="1101";

WHEN "10" => TMP <="1011";

WHEN "11" => TMP <="0111";

END CASE;

END IF;

l<=TMP;

i<=TMP;

END Process;

END s;

对应按键

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

ENTITY KEY IS

PORT(COL: IN STD_LOGIC_VECTOR(3 DOWNTO 0);

ROW: IN STD_LOGIC_VECTOR(3 DOWNTO 0);

CLK: IN STD_LOGIC;

b: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END KEY;

architecture s OF KEY IS--键盘对应

BEGIN

Process(ROW,COL,CLK)

BEGIN

IF CLK'EVENT AND CLK='1' THEN

IF COL <= "0111" THEN

CASE ROW IS

WHEN "1110" => b <= "1111";--F

WHEN "1101" => b <= "1011";--b

WHEN "1011" => b <= "0111";--7

WHEN "0111" => b <= "0011";--3

WHEN OTHERS => NULL;

END CASE;

ELSIF COL <="1011" THEN

CASE ROW IS

WHEN "1110" => b <= "1110";--E

WHEN "1101" => b <= "1010";--A

WHEN "1011" => b <= "0110";--6

WHEN "0111" => b <= "0010";--2

WHEN OTHERS => NULL;

END CASE;

ELSIF COL <= "1101" THEN

CASE ROW IS

WHEN "1110" => b <= "1101";--d

WHEN "1101" => b <= "1001";--9

WHEN "1011" => b <= "0101";--5

WHEN "0111" => b <= "0001";--1

WHEN OTHERS => NULL;

END CASE;

ELSIF COL <= "1110" THEN

CASE ROW IS

WHEN "1110" => b <= "1100";--C

WHEN "1101" => b <= "1000";--8

WHEN "1011" => b <= "0100";--4

WHEN "0111" => b <= "0000";--0

WHEN OTHERS => NULL;

END CASE;

END IF;

END IF;

END Process;

END s;

中枢判断模块

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

ENTITY JGE IS

PORT(JGCLK:IN STD_LOGIC;

SJS:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

KEY:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

JGE:OUT STD_LOGIC);

END  JGE;

architecture s OF JGE IS

SIGNAL TMP1: INTEGER RANGE 0 TO 1999999;

SIGNAL TMP2: STD_LOGIC;

BEGIN

Process(JGCLK,SJS,KEY)

BEGIN

IF JGCLK'event AND JGCLK='1' THEN

IF TMP1<1999999 THEN

TMP1 <= TMP1+1;

ELSE

TMP1 <= 0;

END IF;

IF TMP1<999999 THEN

TMP2 <= '0';

ELSE

TMP2 <= '1';

END IF;

END IF;

IF SJS = KEY THEN

JGE <= '0';

ELSE

JGE <= '1';

END IF;

END Process;

END s;

点阵显示模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY DZ IS

PORT(CLKDZ,RESET:IN STD_LOGIC;

SJSIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

JGE:IN STD_LOGIC;

ROUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

COLR: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

COLG: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END DZ;

architecture s OF DZ IS

SIGNAL CLK1,CLK2: STD_LOGIC;

SIGNAL CLK3: STD_LOGIC_VECTOR (2 DOWNTO 0);

COMPONENT DZDIV10000

PORT(CLK:IN STD_lOGIC;

CLK_OUT: OUT STD_LOGIC);

END COMPONENT;

COMPONENT JSQ2    --点阵行信号扫描计数

PORT(CLK,CLEAR:IN STD_LOGIC;

CLK_OUT:OUT STD_LOGIC_VECTOR (2 DOWNTO 0));

END COMPONENT;

COMPONENT HXH   --点阵行信号扫描

PORT(aa: IN STD_LOGIC_VECTOR(2 DOWNTO 0);--8 hang qiehuan

x: IN STD_LOGIC;

b: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END COMPONENT;

COMPONENT LXH   --点阵列信号

PORT(a: IN STD_LOGIC_VECTOR(3 DOWNTO 0);

p: IN STD_LOGIC_VECTOR(2 DOWNTO 0);

q: IN STD_LOGIC;

x: IN STD_LOGIC;

cr: out std_logic_vector(7 downto 0);

cg: out std_logic_vector(7 downto 0));

END COMPONENT;

BEGIN

U1:DZDIV10000 PORT MAP(CLK => CLKDZ, CLK_OUT => CLK2);

U2:JSQ2 PORT MAP(CLK => CLKDZ, CLK_OUT => CLK3, CLEAR => RESET);

U3:HXH  PORT MAP(aa => CLK3, x => CLKDZ, b => ROUT);

U4:LXH  PORT MAP(a => SJSIN, p => CLK3, q => JGE, x => CLKDZ, cr => COLR, cg => COLG);

END architecture s;

秒分频器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY DZDIV10000 IS

PORT(CLK:IN STD_LOGIC;

CLK_OUT:OUT STD_LOGIC);

END DZDIV10000;

ARCHITECTURE a OF DZDIV10000 IS

SIGNAL TMP: INTEGER RANGE 0 TO 9999999;

BEGIN

PROCESS(CLK)

BEGIN

IF CLK'event AND CLK='1' THEN

IF TMP<9999999 THEN

TMP <= TMP+1;

ELSE

TMP <= 0;

END IF;

IF tmp<4999999 THEN

CLK_OUT <= '0';

ELSE

CLK_OUT <= '1';

END IF;

END IF;

END PROCESS;

END a;

点阵行信号扫描计数器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY JSQ2 IS

PORT(CLK,CLEAR:IN STD_LOGIC;

CLK_OUT:OUT STD_LOGIC_VECTOR (2 DOWNTO 0));

END JSQ2;

ARCHITECTURE a OF JSQ2 IS

SIGNAL TMP:STD_LOGIC_VECTOR (2 DOWNTO 0);

BEGIN

PROCESS(CLK,CLEAR)

BEGIN

IF CLEAR = '1' THEN

CLK_OUT <= "000";

ELSIF CLK'EVENT AND CLK='1' THEN

IF TMP="111" THEN TMP<="000";

ELSE TMP<=TMP+1;

END IF;

CLK_OUT <= TMP;

END IF;

END PROCESS;

END a;

点阵行信号扫描

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

ENTITY HXH IS  --点阵行信号扫描

PORT(aa: IN STD_LOGIC_VECTOR(2 DOWNTO 0);--8 hang qiehuan

x: IN STD_LOGIC;

b: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END HXH;

architecture s OF HXH IS

SIGNAL tmp : STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

Process(aa)

BEGIN

IF x'event AND x='1' THEN

CASE aa IS

WHEN "000" => b <="01111111";

WHEN "001" => b <="10111111";

WHEN "010" => b <="11011111";

WHEN "011" => b <="11101111";

WHEN "100" => b <="11110111";

WHEN "101" => b <="11111011";

WHEN "110" => b <="11111101";

WHEN "111" => b <="11111110";

END CASE;

END IF;

END Process;

END s;

点阵列信号

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

ENTITY LXH IS   --点阵列信号

PORT(a: IN STD_LOGIC_VECTOR(3 DOWNTO 0);

p: IN STD_LOGIC_VECTOR(2 DOWNTO 0);

q: IN STD_LOGIC;

x: IN STD_LOGIC;

cr: out std_logic_vector(7 downto 0);

cg: out std_logic_vector(7 downto 0));

END LXH;

architecture s OF LXH IS

SIGNAL tmp : STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

Process(x,a,p,q)

BEGIN

IF x'event AND x='1' THEN

IF q = '1' THEN

IF a <= "0000" THEN

CASE p IS

WHEN "000" => cr <="11000000";

WHEN "001" => cr <="11000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0001" THEN

CASE p IS

WHEN "000" => cr <="00110000";

WHEN "001" => cr <="00110000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0010" THEN

CASE p IS

WHEN "000" => cr <="00001100";

WHEN "001" => cr <="00001100";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0011" THEN

CASE p IS

WHEN "000" => cr <="00000011";

WHEN "001" => cr <="00000011";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0100" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="11000000";

WHEN "011" => cr <="11000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0101" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00110000";

WHEN "011" => cr <="00110000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0110" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00001100";

WHEN "011" => cr <="00001100";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0111" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000011";

WHEN "011" => cr <="00000011";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "1000" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="11000000";

WHEN "101" => cr <="11000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "1001" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00110000";

WHEN "101" => cr <="00110000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "1010" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00001100";

WHEN "101" => cr <="00001100";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "1011" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000011";

WHEN "101" => cr <="00000011";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "1100" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="11000000";

WHEN "111" => cr <="11000000";

END CASE;

ELSIF a<= "1101" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00110000";

WHEN "111" => cr <="00110000";

END CASE;

ELSIF a<= "1110" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00001100";

WHEN "111" => cr <="00001100";

END CASE;

ELSIF a<= "1111" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000011";

WHEN "111" => cr <="00000011";

END CASE;

END IF;

ELSIF q = '0' THEN

IF a <= "0000" THEN

CASE p IS

WHEN "000" => cr <="00100000";

WHEN "001" => cr <="00100000";

WHEN "010" => cr <="11000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0001" THEN

CASE p IS

WHEN "000" => cr <="01001000";

WHEN "001" => cr <="01001000";

WHEN "010" => cr <="00110000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0010" THEN

CASE p IS

WHEN "000" => cr <="00010010";

WHEN "001" => cr <="00010010";

WHEN "010" => cr <="00001100";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0011" THEN

CASE p IS

WHEN "000" => cr <="00000100";

WHEN "001" => cr <="00000100";

WHEN "010" => cr <="00000011";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0100" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="11000000";

WHEN "010" => cr <="00100000";

WHEN "011" => cr <="00100000";

WHEN "100" => cr <="11000000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0101" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00110000";

WHEN "010" => cr <="01001000";

WHEN "011" => cr <="01001000";

WHEN "100" => cr <="00110000";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0110" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00001100";

WHEN "010" => cr <="00010010";

WHEN "011" => cr <="00010010";

WHEN "100" => cr <="00001100";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "0111" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000011";

WHEN "010" => cr <="00000100";

WHEN "011" => cr <="00000100";

WHEN "100" => cr <="00000011";

WHEN "101" => cr <="00000000";

WHEN "110" => cr <="00000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "1000" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="11000000";

WHEN "100" => cr <="00100000";

WHEN "101" => cr <="00100000";

WHEN "110" => cr <="11000000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "1001" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00110000";

WHEN "100" => cr <="01001000";

WHEN "101" => cr <="01001000";

WHEN "110" => cr <="00110000";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "1010" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00001100";

WHEN "100" => cr <="00010010";

WHEN "101" => cr <="00010010";

WHEN "110" => cr <="00001100";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "1011" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000011";

WHEN "100" => cr <="00000100";

WHEN "101" => cr <="00000100";

WHEN "110" => cr <="00000011";

WHEN "111" => cr <="00000000";

END CASE;

ELSIF a<= "1100" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="11000000";

WHEN "110" => cr <="00100000";

WHEN "111" => cr <="00100000";

END CASE;

ELSIF a<= "1101" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00110000";

WHEN "110" => cr <="01001000";

WHEN "111" => cr <="01001000";

END CASE;

ELSIF a<= "1110" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00001100";

WHEN "110" => cr <="00010010";

WHEN "111" => cr <="00010010";

END CASE;

ELSIF a<= "1111" THEN

CASE p IS

WHEN "000" => cr <="00000000";

WHEN "001" => cr <="00000000";

WHEN "010" => cr <="00000000";

WHEN "011" => cr <="00000000";

WHEN "100" => cr <="00000000";

WHEN "101" => cr <="00000011";

WHEN "110" => cr <="00000100";

WHEN "111" => cr <="00000100";

END CASE;

END IF;

END IF;

END IF;

END Process;

END s;

积分模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

entity SCORE IS

PORT(ADD,CLK,RESET: IN STD_LOGIC;

SCOREOUT1,SCOREOUT2: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)

);

END SCORE;

architecture s OF SCORE IS

SIGNAL SCR1,SCR2:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS(ADD,CLK,RESET)

BEGIN

IF RESET = '1' THEN

SCR1<="0000";

SCR2<="0000";

ELSIF ADD'EVENT AND ADD='1' THEN

IF  SCR1<"0111" THEN

IF SCR2 = "1001" THEN

SCR2 <= "0000";

SCR1 <= SCR1 + 1;

else

SCR2 <= SCR2 + 1;

END IF;

END IF;

END IF;

SCOREOUT1<=SCR1;

SCOREOUT2<=SCR2;

END PROCESS;

END architecture s;

计时模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

entity TIME0 IS

PORT(CLK,RESET: IN STD_LOGIC;

TIMEOUT1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

TIMEOUT2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

FIN:OUT STD_LOGIC);

END TIME0;

architecture s OF TIME0 IS

SIGNAL TIM1,TIM2:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS(CLK,RESET)

BEGIN

IF RESET = '1' THEN

TIM2<="0000";

TIM1<="0000";

ELSIF CLK'event AND CLK='1' AND RESET='0' THEN

FIN<='0'  ;

IF  TIM1<"0110" THEN

IF TIM2 = "1001" THEN

TIM2 <= "0000";

TIM1 <= TIM1 + 1;

ELSE

TIM2 <= TIM2 + 1;

END IF;

ELSE FIN<='1';

END IF;

END IF;

TIMEOUT1<=TIM1;

TIMEOUT2<=TIM2;

END PROCESS;

END architecture s;

数码管显示模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY YMG IS

PORT(CLK,RESET:IN STD_LOGIC;

SAO:IN STD_LOGIC_VECTOR(1 DOWNTO 0);

T1,T2,S1,S2:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

SEG,CAT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END YMG;

architecture s OF YMG IS

signal b,c:std_logic_vector(7 downto 0);

BEGIN

Process(RESET,CLK,T1,T2,S1,S2,SAO)

BEGIN

IF RESET = '1' THEN

SEG<="00000000";CAT <= "11111111";

ELSIF CLK'event AND CLK='1' THEN

IF SAO <= "00" THEN

c<="01111111";

CASE T1 IS

WHEN "0000" => b <= "11111110";

WHEN "0001" => b <= "10110000";

WHEN "0010" => b <= "11101101";

WHEN "0011" => b <= "11111001";

WHEN "0100" => b <= "10110011";

WHEN "0101" => b <= "11011011";

WHEN "0110" => b <= "11011111";

WHEN "0111" => b <= "11110000";

WHEN "1000" => b <= "11111111";

WHEN "1001" => b <= "11111011";

WHEN "1010" => b <= "11111110";

WHEN "1011" => b <= "10110000";

WHEN "1100" => b <= "11101101";

WHEN "1101" => b <= "11111001";

WHEN "1110" => b <= "10110011";

WHEN "1111" => b <= "11011011";

END CASE;

ELSIF SAO <= "01"  THEN

c<="10111111";

CASE T2 IS

WHEN "0000" => b <= "11111110";

WHEN "0001" => b <= "10110000";

WHEN "0010" => b <= "11101101";

WHEN "0011" => b <= "11111001";

WHEN "0100" => b <= "10110011";

WHEN "0101" => b <= "11011011";

WHEN "0110" => b <= "11011111";

WHEN "0111" => b <= "11110000";

WHEN "1000" => b <= "11111111";

WHEN "1001" => b <= "11111011";

WHEN "1010" => b <= "11111110";

WHEN "1011" => b <= "10110000";

WHEN "1100" => b <= "11101101";

WHEN "1101" => b <= "11111001";

WHEN "1110" => b <= "10110011";

WHEN "1111" => b <= "11011011";

END CASE;

ELSIF SAO<="10" THEN

c<="11111101";

CASE S1 IS

WHEN "0000" => b <= "11111110";

WHEN "0001" => b <= "10110000";

WHEN "0010" => b <= "11101101";

WHEN "0011" => b <= "11111001";

WHEN "0100" => b <= "10110011";

WHEN "0101" => b <= "11011011";

WHEN "0110" => b <= "11011111";

WHEN "0111" => b <= "11110000";

WHEN "1000" => b <= "11111111";

WHEN "1001" => b <= "11111011";

WHEN "1010" => b <= "11111110";

WHEN "1011" => b <= "10110000";

WHEN "1100" => b <= "11101101";

WHEN "1101" => b <= "11111001";

WHEN "1110" => b <= "10110011";

WHEN "1111" => b <= "11011011";

END CASE;

ELSIF SAO<="11" THEN

c<="11111110";

CASE S2 IS

WHEN "0000" => b <= "11111110";

WHEN "0001" => b <= "10110000";

WHEN "0010" => b <= "11101101";

WHEN "0011" => b <= "11111001";

WHEN "0100" => b <= "10110011";

WHEN "0101" => b <= "11011011";

WHEN "0110" => b <= "11011111";

WHEN "0111" => b <= "11110000";

WHEN "1000" => b <= "11111111";

WHEN "1001" => b <= "11111011";

WHEN "1010" => b <= "11111110";

WHEN "1011" => b <= "10110000";

WHEN "1100" => b <= "11101101";

WHEN "1101" => b <= "11111001";

WHEN "1110" => b <= "10110011";

WHEN "1111" => b <= "11011011";

END CASE;

END IF;

SEG<=b;

CAT<=c;

END IF;

END Process;

END s;

秒分频器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY BAIWAN IS

PORT(CLK:IN STD_LOGIC;

CLKOUT:OUT STD_LOGIC);

END BAIWAN;

ARCHITECTURE a OF BAIWAN IS

SIGNAL TMP: INTEGER RANGE 0 TO 9999999;

BEGIN

PROCESS(CLK)

BEGIN

IF CLK'event AND CLK='1' THEN

IF TMP<9999999 THEN

TMP <= TMP+1;

ELSE

TMP <= 0;

END IF;

IF tmp<4999999 THEN

CLKOUT <= '0';

ELSE

CLKOUT <= '1';

END IF;

END IF;

END PROCESS;

END a;

数码管扫描

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY SM IS

PORT(CLK:IN STD_LOGIC;

CLK_OUT:OUT STD_LOGIC_VECTOR (1 DOWNTO 0));

END SM;

ARCHITECTURE a OF SM IS

BEGIN

PROCESS(clk)

VARIABLE TMP:STD_LOGIC_VECTOR (1 DOWNTO 0);

BEGIN

IF CLK'EVENT AND CLK='1'

THEN

IF TMP="11" THEN TMP:="00";

ELSE TMP:=TMP+1;

END IF;

CLK_OUT <= TMP;

END IF;

END PROCESS;

END a;

发声模块

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity YY is

port(

clk   :  in std_logic;

reset :  in std_logic;

voices: out std_logic

);

end YY;

architecture one of YY is

signal voices_temp : std_logic;

signal fen_div     : std_logic_vector(15 downto 0);

begin

voices<=voices_temp;

process(clk,reset)

variable fen_out : std_logic_vector(15 downto 0);

variable cnt     : integer range 0 to 15500;

begin

if reset='1' then

voices_temp<='0';

fen_out:=X"0000";

cnt:=0;

fen_div<=X"2552";

else

if rising_edge(clk) then

if fen_out = fen_div then

voices_temp<=not voices_temp;

fen_out:=X"0000";

cnt:=cnt+1;

if cnt = 500 then

fen_div<=X"2241";

elsif cnt = 1000 then

fen_div<=X"1D9F";

elsif cnt = 1500 then

fen_div<=X"2552";

elsif cnt = 2000 then

fen_div<=X"2552";

elsif cnt = 2500 then

fen_div<=X"2141";

elsif cnt = 3000 then

fen_div<=X"1D9F";

elsif cnt = 3500 then

fen_div<=X"2552";

elsif cnt = 4000 then

fen_div<=X"1D9F";

elsif cnt = 4500 then

fen_div<=X"1BF6";

elsif cnt = 5000 then

fen_div<=X"18E9";

elsif cnt = 6000 then

fen_div<=X"1D9F";

elsif cnt = 6500 then

fen_div<=X"1BF6";

elsif cnt = 6500 then

fen_div<=X"1BF6";

elsif cnt = 7000 then

fen_div<=X"18E9";

elsif cnt = 8000 then

fen_div<=X"18E9";

elsif cnt = 8250 then

fen_div<=X"1631";

elsif cnt = 8500 then

fen_div<=X"18E9";

elsif cnt = 8750 then

fen_div<=X"1D9F";

elsif cnt = 9000 then

fen_div<=X"1BF6";

elsif cnt = 9500 then

fen_div<=X"2552";

elsif cnt = 10000 then

fen_div<=X"18E9";

elsif cnt = 10250 then

fen_div<=X"1631";

elsif cnt = 10500 then

fen_div<=X"18E9";

elsif cnt = 10750 then

fen_div<=X"1BF6";

elsif cnt = 11250 then

fen_div<=X"1D9F";

elsif cnt = 11750 then

fen_div<=X"2552";

elsif cnt = 12250 then

fen_div<=X"2141";

elsif cnt = 12750 then

fen_div<=X"31D3";

elsif cnt = 13250 then

fen_div<=X"2552";

elsif cnt = 13750 then

fen_div<=X"2141";

elsif cnt = 14250 then

fen_div<=X"31D3";

elsif cnt = 14750 then

fen_div<=X"2552";

elsif cnt = 15000 then

cnt:=0;

fen_div<=X"2552";

end if;

else

fen_out:=fen_out+'1';

end if;

end if;

end if;

end process;

voices<=voices_temp;

end one;

最终输出模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY FIN IS

PORT(F1,VV:IN STD_LOGIC;

DZZ:IN STD_LOGIC_VECTOR(7 DOWNTO 0);

FVV:OUT STD_LOGIC;

FDZ:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END FIN;

ARCHITECTURE a OF FIN IS

BEGIN

PROCESS(F1,DZZ,VV)

BEGIN

IF F1='0' THEN

FDZ<=DZZ;

FVV<=VV;

ELSIF F1='1' THEN

FDZ<="11111111";

FVV<='0';

END IF;

END PROCESS;

END a;

  • 功能说明及资源利用情况

功能说明:

本实验设计实现了以下功能:调节合适的输入频率,拨动重置开关后游戏开始,此时DISP1和DISP0显示得分“00”,DISP7和DISP6显示游戏时间“00”。

使用按键进入游戏状态,时间从00开始正计时,点阵在随机位置显示彩蛋,菜单颜色为红,每个彩蛋显示时间为1秒。在菜单显示时间内,按动相应位置按键表示击中彩蛋,得分增加并在彩蛋位置向四周扩散一圈,呈现爆炸效果。集中红蛋加1分,总得分显示在DISP1和DISP0。

游戏时间达到60s时游戏结束。

资源利用情况:

总工程:

  • 故障及问题分析

本次实验中我主要遇到下列问题与难点

问题:判断不准确

原因:扫频不够高

解决方案:提高扫频频率

问题:计时无法停止

原因:未设定时间停止计时标识

解决方案:设置时间停止计时标识

问题:游戏结束时交互不完整

原因:没有设置游戏结束后如何显示

解决方案:设置最终显示模块,利用时间停止计时标识控制最终显示

  • 总结和结论

在本次实验设计中,我先根据实验要求设计基本的总体框架,再向下细分模块,确定各模块的功能需求,依次编写和仿真调试各个模块的具体功能;然后在实体文件中将各模块元件化,整理map结构,编译总工程再不断调试,修改错误,调整代码细节;最后依次对照实验要求进行测试,使实验设计充分达到要求。

尽管实验设计与调试过程耗时很长,过程困难,且最后尚存一些不足之处,但我在过程中得到了很大收获。

首先我复习与巩固了quartus软件的使用,并具体掌握了分模块设计再整体连结完成总设计的方法,学到了很多quartus基本模块的写法,大致了解了状态机,信号与变量等概念的具体含义,了解了点阵发光,显示图像的基本原理等。具体掌握了vhdl语言的使用,并且对我学习数字电路课程有很大帮助。

其次我在设计过程中锻炼了自己的逻辑推理,与独立设计解决问题的能力,培养了我思考问题,分析问题的能力。

最后这次实验设计对我加强心理素质建设也有很大帮助,一次次编译不过和原理不理解常让我陷入困境,在不断面对困难解决困难的过程中,我的调节自身情绪,心态的能力得到了充分的锻炼,同时也让我明白理论知识与实际应用的差距,让我意识到实践对我掌握知识的必要性与巨大的推动作用。

北京邮电大学砸彩蛋大作业相关推荐

  1. 周杰伦新歌《说好不哭》彩蛋大汇总! | 今日最佳

    全世界只有3.14 % 的人关注了 青少年数学之旅 一首单曲,就霸占了一半的微博热搜榜,除了周杰伦,估计也没别人能做得到了. 回想起前段时间,周杰伦的中老年粉丝与ikun们围绕着"顶级流量& ...

  2. 计算机图形学大几学的,计算机图形学大作业-WenhaoYu.PDF

    计算机图形学大作业-WenhaoYu 计算机图形学 大作业 5090379126 虞文豪 题目:通过光照及纹理映射,实现高度真实感青花瓷材质的 茶壶向茶杯倒水动画特效. 一. 概述 之前的作业用使用S ...

  3. android系统华为彩蛋,【小智】打开安卓“隐藏关卡”—— Android系统彩蛋大揭秘...

    本帖最后由 丶浩南丶 于 2015-5-6 13:46 编辑 1354428994073.jpg (9.06 KB, 下载次数: 1) 2015-5-6 11:56 上传   "自从Andr ...

  4. python大作业80个_大黄蜂35个彩蛋解析!!你必看的80年代大风暴

    Hello大家好,我是BA,变形金刚衍生作<大黄蜂>大家都到影院看了吗,觉得如何? 这次我为大家归纳了电影中出现的三十五个彩蛋,或者说是起发点,希望能够帮助大家更好的理解和认识电影的内在魅 ...

  5. short 类型的大小为( )个字节。_2008-2012,张一鸣在豆瓣书影音为字节跳动埋下的5个彩蛋...

    2020年3月12号,字节跳动成立8周年之际,张一鸣在给全球员工的全员信中,宣布进行组织升级,以应对业务变化和组织成长的挑战. 回顾过去4年间张一鸣3次公开演讲(or全员信)和1次专访,可以看出,随着 ...

  6. HTML5期末大作业:漫画网站设计——海贼王基地(5页) 学生动漫网页设计模板下载 海贼王大学生HTML网页制作作品 简单漫画网页设计成品 dreamweaver学生网站模板

    HTML5期末大作业:漫画网站设计--海贼王基地(5页) 学生动漫网页设计模板下载 海贼王大学生HTML网页制作作品 简单漫画网页设计成品 dreamweaver学生网站模板 常见网页设计作业题材有 ...

  7. android 微信表情雨,2017新年微信表情雨大召唤术-微信彩蛋表情雨2017预约 _5577安卓网...

    迎接鸡年,微信也更新了至少4个彩蛋,微信方面还透露,春节期间,大家还可以定制新春表情包,棒棒哒!微信表情雨2017有效,2017微信下雨口令大全,2017微信聊天下雨口令,微信下雨口令大全,微信表情雨 ...

  8. B1HTML5期末大作业:动漫网站设计——海贼王中乔巴漫画(5页) 学生动漫网页设计模板下载 海贼王大学生HTML网页制作作品 简单漫画网页设计成品 dreamweaver学生网站模板

    HTML5期末大作业:动漫网站设计--海贼王中乔巴漫画(5页) 学生动漫网页设计模板下载 海贼王大学生HTML网页制作作品 简单漫画网页设计成品 dreamweaver学生网站模板 常见网页设计作业题 ...

  9. HTML5期末大作业:动漫网站设计——斗破苍穹动漫(6页) HTML+CSS+JavaScript 学生动漫网页设计模板下载 斗破大学生HTML网页制作作品 简单漫画网页设计成品 dreamweav

    HTML5期末大作业:动漫网站设计--斗破苍穹动漫(6页) HTML+CSS+JavaScript 学生动漫网页设计模板下载 斗破大学生HTML网页制作作品 简单漫画网页设计成品 dreamweave ...

  10. 给你惊喜!来看看国内大公司官网隐藏的彩蛋

    热文导读|  点击标题阅读 金九银十跳槽季如何进阶找到合适满意的工作? 华为员工论坛炫耀:工作16年,就挣了一套1400万的房 那些一毕业就选择华为的人,后来都怎么样了 百度 爱奇艺 知乎 天猫 京东 ...

最新文章

  1. android 无法接收广播_别告诉我你不认识Android中广播接收者(二)
  2. 【转】提高PHP性能的53个技巧
  3. EDM邮件营销之如何制作模板
  4. win7小工具打不开_Win7系统电脑桌面双击快捷键方式图标没反应的解决办法
  5. 通向架构师的道路(第八天)之weblogic与apache的整合与调优 转
  6. 三极管基极限流电阻计算
  7. 【最后一天报名】数据科学峰会分论坛:供应链、用户增长、电商零售
  8. 三重积分(Triple Integral)
  9. python如何定义函数k_Python 函数
  10. Fusion 360 常见问题
  11. 克里金插值---MATLAB程序
  12. oracle触发器如何调试
  13. 志翔亮相中国网络安全年会 终端安全要“轻管控,重感知”
  14. 基于stm32的模拟楼道光控开关的实验
  15. Android虚拟键盘的高度计算
  16. 零基础学Python:Matplotlib用法
  17. 机房收费系统 项目总结
  18. mysee的零散,方便以后汇总
  19. Sql Server Md5使用
  20. vueRouter history模式和hash模式的区别

热门文章

  1. PLSQL的快捷键以及使用技巧
  2. 如何自学CAD制图?学会这5个方法,只需一周就能从小白变大神
  3. IOS Websocket (一) Starscream实现Websocket通讯
  4. Microsoft Designer 微软设计师 拆机(拆鼠标)路程
  5. Solana沦为“宕机链”:TPS修正主义的又一次失败
  6. OutMan——Foundation框架中的集合类(一)(二)
  7. 惠普笔记本电脑重装系统后找不到引导设备
  8. Unity小游戏算法分析与实现(Unity+XR+游戏开发+算法+MVC+斗地主+耳轮跳+见缝插针+王者荣耀+绝地求生+立钻哥哥+==)
  9. 刷百度权重那些不为人知的事情
  10. java is alphabetic_\p{IsAlphabetic}