PROCESS(do_rle)
variable inicializacao : INTEGER RANGE 0 TO 37;
variable temp_led_out : BIT := '0';
-- variaveis run length
variable rle_i : INTEGER RANGE 0 TO 7;
variable rle_j : INTEGER RANGE 0 TO 7;
variable rle_d : BIT;
variable count : INTEGER;
variable z : INTEGER RANGE 0 TO 63; -- contador do vetor final
variable walking_in_zero : BIT;
variable vetor_temp: vetor_de_int;
BEGIN
IF (do_rle'event AND do_rle = '1') THEN
rle_i := 0;
rle_j := 0;
rle_d := '1';
count := 0;
z := 1; -- contador do vetor final
walking_in_zero := '0';
vetor_temp(0) := tempMAT(0)(0);
FOR k IN 0 TO 62 LOOP
-- DECIDINDO O PROXIMO I e J ATRAVES DE ZIG ZAG
IF rle_i = 0 AND rle_d = '1' AND rle_j /=7 THEN
rle_j := rle_j + 1;
rle_d := '0';
ELSIF rle_j = 7 AND rle_i /=0 AND rle_d = '1' THEN
rle_i := rle_i + 1;
rle_d := '0';
ELSIF rle_j = 0 AND rle_d = '0' AND rle_i /= 7 THEN
rle_i := rle_i + 1;
rle_d := '1';
ELSIF rle_i = 7 AND rle_d = '0' THEN
rle_j := rle_j + 1;
rle_d := '1';
ELSIF rle_d = '1' THEN
rle_j := rle_j + 1;
rle_i := rle_i - 1;
ELSE
rle_j := rle_j - 1;
rle_i := rle_i + 1;
END IF;
IF (vetor_temp(k) = "0000000000000000") THEN
count := count + 1;
ELSIF ( count /= 0 ) THEN
vetor_temp(z) := "0000000000000000";
vetor_temp(z+1) := CONV_STD_LOGIC_VECTOR(count,16);
vetor_temp(z+2) := tempMAT(rle_i)(rle_j);
z := z + 3;
count := 0;
ELSE
vetor_temp(z) := tempMAT(rle_i)(rle_j);
z := z+1;
END IF;
IF rle_i = 7 AND rle_j = 7 THEN
vetor_temp(z) := tempMAT(rle_i)(rle_j);
vetor_temp(z+1) := count;
z := z+1;
EXIT;
END IF;
END LOOP;