FPGA Tic Tac Toe (5 / 10 steg)
Steg 5: Huvudsakliga spelet modulen
Avsnittet VHDL i spelet är nästan klar! Allt vi behöver göra nu är ansluta alla de moduler som vi bara skrev. Först måste vi förklara alla våra in- och utgångar. Vi har 9 separat LED utgångar o1-o9 plus en extra (Ø10) som lyser upp för att visa vem som vann i slutet av spelet. Det finns också en återställningsknapp som rensar styrelsen när spelet är slut.
enhet Main_Game_Board är
port (CLK: i std_logic;
BTN: i std_logic_vector (8 b 0);
MAIN_RESET: i std_logic;
O1: ut std_logic_vector (1 CEN. 0);
O2: ut std_logic_vector (1 CEN. 0);
O3: ut std_logic_vector (1 CEN. 0);
O4: ut std_logic_vector (1 CEN. 0);
o5: ut std_logic_vector (1 CEN. 0);
O6: ut std_logic_vector (1 CEN. 0);
O7: ut std_logic_vector (1 CEN. 0);
O8: ut std_logic_vector (1 CEN. 0);
O9: ut std_logic_vector (1 CEN. 0);
Ø10: ut std_logic_vector (1 CEN. 0);
MAIN_AN: Ut STD_LOGIC_VECTOR (3 b 0);
MAIN_SEG: Ut STD_LOGIC_VECTOR (7 CEN. 0));
avsluta Main_Game_Board
Sedan behöver vi att integrera alla de moduler som vi skrev. För detta använder vi en massa komponenter.
komponent Single_LED_Controller är
port (Clock: i std_logic;
Knapp: i std_logic;
Reset: i std_logic;
Player1: i std_logic;
Spelare2: i std_logic;
LED_Output: ut std_logic_vector (1 CEN. 0);
Handle_Input: ut std_logic_vector (1 CEN. 0));
slutet komponent;
komponent Multi_LED_Handle är
port (Återställ: i std_logic;
Input1: i std_logic_vector (1 CEN. 0);
Input2: i std_logic_vector (1 CEN. 0);
Input3: i std_logic_vector (1 CEN. 0);
INGÅNG4: i std_logic_vector (1 CEN. 0);
INGÅNG5: i std_logic_vector (1 CEN. 0);
INGÅNG6: i std_logic_vector (1 CEN. 0);
Input7: i std_logic_vector (1 CEN. 0);
Input8: i std_logic_vector (1 CEN. 0);
Input9: i std_logic_vector (1 CEN. 0);
Utgång: ut std_logic_vector (1 CEN. 0));
slutet komponent;
komponenten seger är
Port (in1: i STD_LOGIC_VECTOR (1 CEN. 0);
IN2: i STD_LOGIC_VECTOR (1 CEN. 0);
in3: i STD_LOGIC_VECTOR (1 CEN. 0);
in4: i STD_LOGIC_VECTOR (1 CEN. 0);
in5: i STD_LOGIC_VECTOR (1 CEN. 0);
in6: i STD_LOGIC_VECTOR (1 CEN. 0);
in7: i STD_LOGIC_VECTOR (1 CEN. 0);
in8: i STD_LOGIC_VECTOR (1 CEN. 0);
IN9: i STD_LOGIC_VECTOR (1 CEN. 0);
Slips: Ut STD_LOGIC;
P1win: Ut STD_LOGIC;
P2win: Ut STD_LOGIC);
slutet komponent;
komponenten Seg är
Port (vända: i STD_LOGIC_VECTOR (1 CEN. 0);
Klocka: I STD_LOGIC;
Anod: Ut STD_LOGIC_VECTOR (3 b 0);
Segment: Ut STD_LOGIC_VECTOR (7 CEN. 0));
slutet komponent;
komponent End_Tie är
port (knappen: i std_logic_vector (8 b 0);
Reset: i std_logic;
Klocka: i std_logic;
Omdöme: ut std_logic);
slutet komponent;
Nu är allt som återstår att skapa signaler och passera dem mellan in- och utgångar av de moduler som vi skrev. Efter signalerna gå igenom alla moduler, skickas de till utgångarna av huvudsakliga spelet modulen.
signalera PL: std_logic_vector (1 CEN. 0): = "10".
signalera H1, H2, H3, H4, H5, H6, H7, H8, H9: std_logic_vector (1 CEN. 0): = "00".
signalera T, P1, P2: std_logic;
signal en: STD_LOGIC_VECTOR (3 b 0);
signal Seg_temp: STD_LOGIC_VECTOR (7 CEN. 0);
signalera Bn: std_logic_vector (8 b 0);
signal Judgement_temp: std_logic;
börja
processen (T, BTN, CLK) är
börja
om (rising_edge(CLK)) sedan
om (T = "0" eller Judgement_temp = '1') sedan
Bn < = "000000000";
annat
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);
slutet om;
slutet om;
Avsluta process; < /p >< p > LED1: Single_LED_Controller port karta (CLK, BN(0), MAIN_RESET, PL(0), PL(1), o1, H1);
LED2: Single_LED_Controller port karta (CLK, BN(1), MAIN_RESET, PL(0), PL(1), o2, H2);
LED3: Single_LED_Controller port karta (CLK, BN(2), MAIN_RESET, PL(0), PL(1), o3, H3);
LED4: Single_LED_Controller port karta (CLK, BN(3), MAIN_RESET, PL(0), PL(1), o4, H4);
LED5: Single_LED_Controller port karta (CLK, BN(4), MAIN_RESET, PL(0), PL(1), o5, H5);
LED6: Single_LED_Controller port karta (CLK, BN(5), MAIN_RESET, PL(0), PL(1), o6, H6);
LED7: Single_LED_Controller port karta (CLK, BN(6), MAIN_RESET, PL(0), PL(1), o7, H7);
LED8: Single_LED_Controller port karta (CLK, BN(7), MAIN_RESET, PL(0), PL(1), o8, H8);
LED9: Single_LED_Controller port karta (CLK, BN(8), MAIN_RESET, PL(0), PL(1), o9, H9);
MLEDH: Multi_LED_Handle port karta (MAIN_RESET, H1, H2, H3, H4, H5, H6, H7, H8, H9, PL);
Victory_module: seger port karta (H1, H2, H3, H4, H5, H6, H7, H8, H9, T, P1, P2);
Visa: seg port karta (PL, CLK, ett, Seg_temp);
End_game: End_tie port karta (Bn, MAIN_RESET, CLK, Judgement_temp);
processen (T, P1, P2, en, Seg_temp, Judgement_temp, CLK) är
börja
om (rising_edge(CLK)) sedan
om (T = '1') sedan
Ø10 < = "00".
MAIN_AN < = en;
MAIN_SEG < = Seg_temp;
elsif (P1 = '1') sedan
Ø10 < = "01".
MAIN_AN < = "1111";
MAIN_SEG < = "11111111";
elsif (P2 = '1') sedan
Ø10 < = "10".
MAIN_AN < = "1111";
MAIN_SEG < = "11111111";
annat
Ø10 < = "11".
slutet om;
om (Judgement_temp = '1') sedan
MAIN_AN < = "1111";
MAIN_SEG < = "11111111";
slutet om;
slutet om;
Avsluta process;