I agree with ads-ee. You should be able to read all the data into an array in zero time. I would usually do this in an initiallisation function rather than a process. If you are relying on the 1ns pause there is something wrong with the design. Its not working correctly because you have a signal for the data_counter. You should use a variable instead.