Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library ieee;
- use ieee.std_logic_1164.all;
- entity ticTacToe is
- port(
- hex: OUT STD_LOGIC_VECTOR(0 TO 6);
- useless : out bit := '1';
- win_X : out bit := '1';
- win_O : out bit := '1';
- row0line0_in : in std_logic := 'U';
- row1line0_in : in std_logic := 'U';
- row2line0_in : in std_logic := 'U';
- row0line1_in : in std_logic := 'U';
- row1line1_in : in std_logic := 'U';
- row2line1_in : in std_logic := 'U';
- row0line2_in : in std_logic := 'U';
- row1line2_in : in std_logic := 'U';
- row2line2_in : in std_logic := 'U'
- );
- end ticTacToe;
- architecture behaviour of ticTacToe is
- signal player : bit; --X starts game
- shared variable wins : boolean := false;
- shared variable row0line0 : std_logic := 'U';
- shared variable row1line0 : std_logic := 'U';
- shared variable row2line0 : std_logic := 'U';
- shared variable row0line1 : std_logic := 'U';
- shared variable row1line1 : std_logic := 'U';
- shared variable row2line1 : std_logic := 'U';
- shared variable row0line2 : std_logic := 'U';
- shared variable row1line2 : std_logic := 'U';
- shared variable row2line2 : std_logic := 'U';
- function winner(row0line0, row0line1, row0line2, row1line0, row1line1,
- row1line2, row2line0, row2line1, row2line2:std_logic) return boolean is
- begin
- --check if X wins
- if(row0line0 = '1' and row0line1 = '1' and row0line2 = '1') then
- win_X <= '0';
- end if;
- if(row0line0 = '1' and row1line0 = '1' and row2line0 = '1') then
- win_X <= '0';
- end if;
- if(row0line0 = '1' and row1line1 = '1' and row2line2 = '1') then
- win_X <= '0';
- end if;
- if(row1line0 = '1' and row1line1 = '1' and row1line2 = '1') then
- win_X <= '0';
- end if;
- if(row2line0 = '1' and row2line1 = '1' and row2line2 = '1') then
- win_X <= '0';
- end if;
- if(row2line0 = '1' and row1line1 = '1' and row0line2 = '1') then
- win_X <= '0';
- end if;
- if(row0line1 = '1' and row1line1 = '1' and row2line1 = '1') then
- win_X <= '0';
- end if;
- if(row0line2 = '1' and row1line2 = '1' and row2line2 = '1') then
- win_X <= '0';
- end if;
- --check if O wins
- if(row0line0 = '0' and row0line1 = '0' and row0line2 = '0') then
- win_O <= '0';
- end if;
- if(row0line0 = '0' and row1line0 = '0' and row2line0 = '0') then
- win_O <= '0';
- end if;
- if(row0line0 = '0' and row1line1 = '0' and row2line2 = '0') then
- win_O <= '0';
- end if;
- if(row1line0 = '0' and row1line1 = '0' and row1line2 = '0') then
- win_O <= '0';
- end if;
- if(row2line0 = '0' and row2line1 = '0' and row2line2 = '0') then
- win_O <= '0';
- end if;
- if(row2line0 = '0' and row1line1 = '0' and row0line2 = '0') then
- win_O <= '0';
- end if;
- if(row0line1 = '0' and row1line1 = '0' and row2line1 = '0') then
- win_O <= '0';
- end if;
- if(row0line2 = '0' and row1line2 = '0' and row2line2 = '0') then
- win_O <= '0';
- end if;
- return false;
- end winner;
- begin
- --variable becomes '0' for player O and '1' for player X
- process(row0line0_in, row0line1_in, row0line2_in, row1line0_in, row1line1_in,
- row1line2_in, row2line0_in, row2line1_in, row2line2_in)is
- begin
- if(row0line0_in'event and row0line0_in = '1')then
- if(player = '0')then
- row0line0 := '1';
- else
- useless <= '0';
- row0line0 := '0';
- end if;
- end if;
- if(row0line1_in'event and row0line1_in = '1')then
- if(player = '0')then
- row0line1 := '1';
- else
- row0line1 := '0';
- end if;
- end if;
- if(row0line2_in'event and row0line2_in = '1')then
- if(player = '0')then
- row0line2 := '1';
- else
- row0line2 := '0';
- end if;
- end if;
- if(row1line0_in'event and row1line0_in = '1')then
- if(player = '0')then
- row1line0 := '1';
- else
- row1line0 := '0';
- end if;
- end if;
- if(row1line1_in'event and row1line1_in = '1')then
- if(player = '0')then
- row1line1 := '1';
- else
- row1line1 := '0';
- end if;
- end if;
- if(row1line2_in'event and row1line2_in = '1')then
- if(player = '0')then
- row1line2 := '1';
- else
- row1line2 := '0';
- end if;
- end if;
- if(row2line0_in'event and row2line0_in = '1')then
- if(player = '0')then
- row2line0 := '1';
- else
- row2line0 := '0';
- end if;
- end if;
- if(row2line1_in'event and row2line1_in = '1')then
- if(player = '0')then
- row2line1 := '1';
- else
- row2line1 := '0';
- end if;
- end if;
- if(row2line2_in'event and row2line2_in = '1') then
- if(player = '0')then
- row2line2 := '1';
- else
- row2line2 := '0';
- end if;
- end if;
- player <= not player;
- end process;
- --check winner
- process(player)is
- begin
- wins := winner(row0line0, row0line1, row0line2, row1line0, row1line1,
- row1line2, row2line0, row2line1, row2line2);
- end process;
- end behaviour;
Add Comment
Please, Sign In to add comment