----------------------------------------------------------------------------------
-- Company: 
-- Engineer: 
-- 
-- Create Date: 16.11.2021 12:02:26
-- Design Name: 
-- Module Name: Gene_Position - Behavioral
-- Project Name: 
-- Target Devices: 
-- Tool Versions: 
-- Description: 
-- 
-- Dependencies: 
-- 
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
-- 
----------------------------------------------------------------------------------


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity Gene_Position is
    Port ( up : in STD_LOGIC;
           down : in STD_LOGIC;
           left : in STD_LOGIC;
           right : in STD_LOGIC;
           clk: in STD_LOGIC;
           reset: in STD_LOGIC;
           PosX : out unsigned (9 downto 0);
           PosY : out unsigned (8 downto 0));
end Gene_Position;

architecture Behavioral of Gene_Position is
signal valPosX: unsigned (9 downto 0);
signal valPosY: unsigned (8 downto 0);

begin

process(up, down, left, right, valPosX, valPosY, clk, reset)
begin
    if (reset = '0') then
        valPosX <= to_unsigned(100, valPosX'length);
        valPosY <= to_unsigned(100, valPosY'length);
    else
        if (clk'event and clk='1') then
             if (up='1') then
                    valPosY <= valPosY + 1;
                    valPosX <= valPosX;
             elsif ( down='1') then
                    valPosY <= valPosY - 1;
                    valPosX <= valPosX;         
             elsif ( left='1') then
                     valPosX <= valPosX - 1;
                     valPosY <= valPosY;
             elsif ( right='1') then
                    valPosX <= valPosX + 1;
                    valPosY <= valPosY;
             else 
                valPosX <= valPosX;
                valPosY <= valPosY;
             end if;
         end if;
    end if;
end process;
PosX <= valPosX;
PosY <= valPosY;
end Behavioral;
