This covers single port and dual port memories.
Memory type for constant width and depth.
type MEMORY_TYPE is array (0 to DEPTH-1) of std_logic_vector(WIDTH-1 downto 0);
Memory type for variable depth and constant width.
type MEMORY_TYPE is array (natural range <>) of std_logic_vector(WIDTH-1 downto 0);