What you see is the ASCII code of your text file.
50 = 2
49 = 1
10 = line feed
51 = 3
48 = 0
10 = line feed
51 = 3
try this code:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_textio.ALL;
USE ieee.numeric_std.ALL;
USE std.textio.ALL;
ENTITY feeder IS
PORT (
start : IN std_logic;
pixel_value : OUT std_logic_vector(7 DOWNTO 0)
);
END feeder;
ARCHITECTURE Behavior OF feeder IS
CONSTANT filename : string := "/afs/cad/u/s/m/smb34/vlsi2/frame1.txt";
TYPE frame_array IS ARRAY (natural RANGE <>) OF std_logic_vector(7 DOWNTO 0);
SIGNAL read_frame_array : frame_array(0 TO 25343);
BEGIN
read_file : PROCESS (start) IS
FILE file_in : text; -- file ID
VARIABLE line_rd : line; -- text line
VARIABLE data_in : integer; -- integer data input
VARIABLE i : integer := 0; -- line counter
BEGIN
IF rising_edge(start) THEN
file_open(file_in, filename, read_mode);
WHILE (NOT endfile(file_in)) LOOP
readline(file_in, line_rd);
read(line_rd, data_in);
read_frame_array(i) <= std_logic_vector(to_unsigned(data_in, 8));
pixel_value <= read_frame_array(i);
i := i + 1;
END LOOP;
file_close(file_in);
END IF;
END PROCESS read_file;
END Behavior;