library IEEE; use IEEE.std_logic_1164.all; use work.TTTdefs.all; entity PICK is port ( X, Y: in TTTgrid; WINMV, BLKMV: in STD_LOGIC_VECTOR(3 downto 0); MOVE: out STD_LOGIC_VECTOR(3 downto 0) ); end PICK; architecture PICK_arch of PICK is function MT(X, Y: TTTgrid; i, j: INTEGER) return BOOLEAN is begin -- Determine if cell i,j is empty return X(i)(j)='0' and Y(i)(j)='0'; end MT; begin process (X, Y, WINMV, BLKMV) begin -- If available, pick: if WINMV /= NONE then MOVE <= WINMV; -- winning move elsif BLKMV /= NONE then MOVE <= BLKMV; -- else blocking move elsif MT(X,Y,2,2) then MOVE <= MOVE22; -- else center cell elsif MT(X,Y,1,1) then MOVE <= MOVE11; -- else corner cells elsif MT(X,Y,1,3) then MOVE <= MOVE13; elsif MT(X,Y,3,1) then MOVE <= MOVE31; elsif MT(X,Y,3,3) then MOVE <= MOVE33; elsif MT(X,Y,1,2) then MOVE <= MOVE12; -- else side cells elsif MT(X,Y,2,1) then MOVE <= MOVE21; elsif MT(X,Y,2,3) then MOVE <= MOVE23; elsif MT(X,Y,3,2) then MOVE <= MOVE32; else MOVE <= NONE; -- else grid is full end if; end process; end PICK_arch;