Stap 5: Belangrijkste Game-Module
De VHDL-sectie van het spel is bijna voltooid! Nu is allen wij moeten doen sluit alle van de modules die we net schreef. Eerste plaats moeten wij verklaren alle onze in- en uitgangen. We hebben 9 aparte LED uitgangen o1-o9 plus één extra (o10) dat oplicht te laten zien wie er gewonnen heeft aan het einde van het spel. Er is ook een reset-knop waarmee de Raad van bestuur wordt gewist, als het spel is beëindigd.
entity Main_Game_Board is port (CLK : in std_logic; BTN : in std_logic_vector(8 downto 0); MAIN_RESET : in std_logic; o1 : out std_logic_vector(1 downto 0); o2 : out std_logic_vector(1 downto 0); o3 : out std_logic_vector(1 downto 0); o4 : out std_logic_vector(1 downto 0); o5 : out std_logic_vector(1 downto 0); o6 : out std_logic_vector(1 downto 0); o7 : out std_logic_vector(1 downto 0); o8 : out std_logic_vector(1 downto 0); o9 : out std_logic_vector(1 downto 0); o10 : out std_logic_vector(1 downto 0); MAIN_AN : out STD_LOGIC_VECTOR(3 downto 0); MAIN_SEG : out STD_LOGIC_VECTOR(7 downto 0)); end Main_Game_Board
Vervolgens moeten we integreren alle van de modules die we schreven. Om dit te doen, zullen we een heleboel onderdelen gebruiken.
component Single_LED_Controller is port (Clock : in std_logic; Button : in std_logic; Reset : in std_logic; Player1 : in std_logic; Player2 : in std_logic; LED_Output : out std_logic_vector(1 downto 0); Handle_Input : out std_logic_vector(1 downto 0)); end component; component Multi_LED_Handle is port (Reset : in std_logic; Input1 : in std_logic_vector(1 downto 0); Input2 : in std_logic_vector(1 downto 0); Input3 : in std_logic_vector(1 downto 0); Input4 : in std_logic_vector(1 downto 0); Input5 : in std_logic_vector(1 downto 0); Input6 : in std_logic_vector(1 downto 0); Input7 : in std_logic_vector(1 downto 0); Input8 : in std_logic_vector(1 downto 0); Input9 : in std_logic_vector(1 downto 0); Output : out std_logic_vector(1 downto 0)); end component; component Victory is Port ( in1 : in STD_LOGIC_VECTOR(1 downto 0); in2 : in STD_LOGIC_VECTOR(1 downto 0); in3 : in STD_LOGIC_VECTOR(1 downto 0); in4 : in STD_LOGIC_VECTOR(1 downto 0); in5 : in STD_LOGIC_VECTOR(1 downto 0); in6 : in STD_LOGIC_VECTOR(1 downto 0); in7 : in STD_LOGIC_VECTOR(1 downto 0); in8 : in STD_LOGIC_VECTOR(1 downto 0); in9 : in STD_LOGIC_VECTOR(1 downto 0); Tie : out STD_LOGIC; P1win : out STD_LOGIC; P2win : out STD_LOGIC); end component; component Seg is Port ( Turn : in STD_LOGIC_VECTOR (1 downto 0); Clock : in STD_LOGIC; Anode : out STD_LOGIC_VECTOR (3 downto 0); Segment : out STD_LOGIC_VECTOR (7 downto 0)); end component; component End_Tie is port (Button : in std_logic_vector(8 downto 0); Reset : in std_logic; clock : in std_logic; Judgement : out std_logic); end component;
All that's left is nu maken signalen en doorgeven tussen de inputs en de outputs van de modules die we schreven. Nadat de signalen gaan door alle van de modules, worden ze verzonden naar de uitgangen van de belangrijkste game-module.
signal PL: std_logic_vector(1 downto 0) := "10"; signal H1, H2, H3, H4, H5, H6, H7, H8, H9 : std_logic_vector(1 downto 0) := "00"; signal T, P1, P2 : std_logic; signal An : STD_LOGIC_VECTOR (3 downto 0); signal Seg_temp : STD_LOGIC_VECTOR (7 downto 0); signal Bn : std_logic_vector (8 downto 0); signal Judgement_temp : std_logic; begin process(T, BTN, CLK) is begin if (rising_edge(CLK)) then if (T = '0' or Judgement_temp = '1') then Bn <= "000000000"; else Bn(0) <= BTN(0); Bn(1) <= BTN(1); Bn(2) <= BTN(2); Bn(3) <= BTN(3); Bn(4) <= BTN(4); Bn(5) <= BTN(5); Bn(6) <= BTN(6); Bn(7) <= BTN(7); Bn(8) <= BTN(8); end if; end if; end process;</p><p> LED1 : Single_LED_Controller port map (CLK, BN(0), MAIN_RESET, PL(0), PL(1), o1, H1); LED2 : Single_LED_Controller port map (CLK, BN(1), MAIN_RESET, PL(0), PL(1), o2, H2); LED3 : Single_LED_Controller port map (CLK, BN(2), MAIN_RESET, PL(0), PL(1), o3, H3); LED4 : Single_LED_Controller port map (CLK, BN(3), MAIN_RESET, PL(0), PL(1), o4, H4); LED5 : Single_LED_Controller port map (CLK, BN(4), MAIN_RESET, PL(0), PL(1), o5, H5); LED6 : Single_LED_Controller port map (CLK, BN(5), MAIN_RESET, PL(0), PL(1), o6, H6); LED7 : Single_LED_Controller port map (CLK, BN(6), MAIN_RESET, PL(0), PL(1), o7, H7); LED8 : Single_LED_Controller port map (CLK, BN(7), MAIN_RESET, PL(0), PL(1), o8, H8); LED9 : Single_LED_Controller port map (CLK, BN(8), MAIN_RESET, PL(0), PL(1), o9, H9); MLEDH : Multi_LED_Handle port map(MAIN_RESET, H1, H2, H3, H4, H5, H6, H7, H8, H9, PL); Victory_module : victory port map(H1, H2, H3, H4, H5, H6, H7, H8, H9, T, P1, P2); display : seg port map(PL, CLK, An, Seg_temp); End_game : End_tie port map(Bn, MAIN_RESET, CLK, Judgement_temp); process(T, P1, P2, An, Seg_temp, Judgement_temp, CLK) is begin if (rising_edge(CLK)) then if(T = '1') then o10 <= "00"; MAIN_AN <= an; MAIN_SEG <= Seg_temp; elsif(P1 = '1') then o10 <= "01"; MAIN_AN <= "1111"; MAIN_SEG <= "11111111"; elsif(P2 = '1') then o10 <= "10"; MAIN_AN <= "1111"; MAIN_SEG <= "11111111"; else o10 <= "11"; end if; if(Judgement_temp = '1') then MAIN_AN <= "1111"; MAIN_SEG <= "11111111"; end if; end if; end process;