Está en la página 1de 6

UNIVERSIDAD NACIONAL DE SAN AGISTIN

ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA

MICROELECTRONICA

PROYECTO: MAZE SOLVER – 2°AVANCE

Alvarado Yerba Anthony Erick, 20104108


Gomez Nuñez Nigel Dennys, 20123134
Valdivia Paricahua Gian Pierre, 20140214
Zeballos Meza Jorge Eduardo, 20150552

Tutor del Curso:


PhD. Alexander B. Hilario T.

13 de Julio del 2020


PUNTOS INICIALES A TENER EN CUENTA:

 Para poder diferenciar entre cada celda que se quiere explorar y en la que nos encontramos
podríamos diferenciarlas ya sea con su fila y columna para cada celda o con el uso de un Token
(símbolo) distinto para cada celda.
 En nuestro caso escogimos el uso de caracteres numéricos para designar a cada celda, dentro del
marco del Maze, que no sea un Wall (pared).
 Entonces primero se debe realizar esta asignación numérica antes de empezar a explorar y
encontrar la solución a través de los nodos del grafo que constituyen el Maze.

ASIGNCION NUMERICA DE LOS TOKENS:

 DIAGRAMA DE BLOQUES:

 DIAGRAMA DE FLUJO:
 CONSIDERACIONES:

 Inicialmente cada celda posible por donde se puede trazar camino de exploración esta
designada con el valor 1 y cada celda que representa una pared esta designada con el valor 0.
 En la última condición del diagrama de flujo se toma en cuenta como condición para finalizar
que la dirección que se ira a leer sea máximo hasta HxW-1, ya que H representa la altura del
Maze y W su ancho, entonces en la memoria RAM donde se encuentra el Maze mapeado por
filas se sabría que la ultima fila del Maze estaría almacenada en la dirección HxW-1.

ALGORITMO BREADTH FIRST SEARCH:

 DIAGRAMA DE BLOQUES:

 DIAGRAMA DE FLUJO:
 CONSIDERACIONES:

 Para el algoritmo BFS tomamos en cuenta que se deben definir 4 entidades:

_CURRENT: Contiene el valor de la celda en la que nos encontramos actualmente.

_FRONTIER: Contiene una lista de valores que definen el entorno (UP, DOWN, LEFT y RIGHT)
respecto al valor de CURRENT, esta lista nos indicara nuestros posibles valores futuros de
exploración.

_VISITED: Contiene una lista de valores que indican las celdas en las que ya estuvimos antes, de
las que ya se definió sus entornos aun por visitar.

_FROM: Contiene una lista en la que se almacena los valores de celda de donde se vino en cada
paso, de esa forma uno puede concatenar la solución del camino hasta el final cuando se
termine el algoritmo.

 Usualmente para este algoritmo se deja que explore los nodos de todo el grafo, pero en nuestro
caso en el momento en el que se llegue a la celda de Fin se detendrá el algoritmo para así
empezar a trazar la solución.
CODIGO DE LA MEMORIA RAM A USAR:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY RAM IS
PORT(CLK : IN STD_LOGIC;
READ : IN STD_LOGIC;
ADDRESS : IN STD_LOGIC_VECTOR (3 DOWNTO 0);
DATA_IN : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
DATA_OUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));
END RAM;
ARCHITECTURE BEHAVIORAL OF ROM16x8 IS
TYPE ROM_TYPE IS ARRAY (0 TO 15) OF STD_LOGIC_VECTOR (7 DOWNTO 0);
CONSTANT ROM : ROM_TYPE := (
0 => X"02",
1 => X"00",
2 => X"01",
3 => X"04",
4 => X"00",
5 => X"02",
6 => X"01",
7 => X"04",
8 => X"FF",
9 => X"FF",
10 => X"FF",
11 => X"FF",
12 => X"FF",
13 => X"FF",
14 => X"FF",
15 => X"FF",
OTHERS => X"FF");
BEGIN
PROCESS (CLK)
BEGIN
IF RISING_EDGE(CLK) THEN
IF (READ = '1') THEN DATA_OUT <= RAM(CONV_INTEGER(ADDRESS));
ELSE DATA_OUT <= "ZZZZZZZZ";
END IF;
END IF;
ELSE FALLING_EDGE(CLK) THEN
IF (WRITE = '1') then RAM(CONV_INTEGER(ADDRESS)) <= DATA_IN; DATA_OUT <= "ZZZZZZZZ";
END IF
END PROCESS;
END BEHAVIORAL;

DIAGRAMA DE TIEMPOS RAM:

También podría gustarte