Presentación 3: Conversión de Diagramas de Estado a Circuito Secuencial - franciscaconcha/ProyectoLogisim GitHub Wiki
Presentación 3
Conversión de Diagramas de Estado a Circuito Secuencial
Alcances Originales del Proyecto
Primero, se quiere implementar la generación de un circuito secuencial a partir de un diagrama de estados codificado en un archivo de texto. Así, el usuario podrá describir el diagrama de estados a convertir en un archivo, y luego importarlo a Logisim. A partir del archivo importado se construirá un circuito secuencial, con su parte combinatorial y de registro. Este es el principal objetivo de este proyecto.
Como idea adicional sería deseable agregar una interfaz gráfica donde el usuario pueda dibujar el diagrama de estados que desea. Esta interfaz debería tener las herramientas necesarias para especificar los estados y las transiciones entre ellos, junto con los símbolos que cada transición involucra. La realización de esta interfaz se evaluará según las dificultades que se encuentren en el desarrollo del proyecto y el tiempo disponible.
Tareas Propuestas y Realizadas
-
Se dibujó registro de n bits junto con la parte combinacional del circuito y se logró trazar los cables correspondientes entre ambos componentes.
-
Se implementó la verificación de las condiciones de correctitud del diagrama de estados que faltaban: completitud de transiciones (que las transiciones de salida de un estado cubran todas las posibles combinaciones de valores de variables de entrada). Conexidad fuerte decidió no hacerse ya que cabe la posibilidad de que un diagrama correcto no lo sea.
-
Se generaron archivos XML a partir de los diagramas dibujados. Así se podrán guardar y editar diagramas de estado.
Issues
Cerrados en el Último Periodo
-
Obtener la referencia a un circuito para modificarlo https://github.com/franciscaconcha/ProyectoLogisim/issues/54
-
Diagram checker https://github.com/franciscaconcha/ProyectoLogisim/issues/46
-
Inserción automatica de tabla - Agregar botón https://github.com/franciscaconcha/ProyectoLogisim/issues/37
-
Codificar objeto: RepresentationMatrix a DiagramTable https://github.com/franciscaconcha/ProyectoLogisim/issues/36
-
Crear registros de n bits de forma automática https://github.com/franciscaconcha/ProyectoLogisim/issues/15
Abiertos y Cerrados en el Último Periodo
-
Manejar errores de completitud de inputs al incluir '*' https://github.com/franciscaconcha/ProyectoLogisim/issues/125
-
Arreglar excepción ClassNotFound https://github.com/franciscaconcha/ProyectoLogisim/issues/123
-
Ir arreglando los últimos detalles en la generación del circuito. https://github.com/franciscaconcha/ProyectoLogisim/issues/120
-
Bug al crear diagrama con más de 4 estados. https://github.com/franciscaconcha/ProyectoLogisim/issues/117
-
Conectar reloj a subcircuito Register. https://github.com/franciscaconcha/ProyectoLogisim/issues/116
-
Invertir el orden de inputs y outputs en la presentación modular de Register. https://github.com/franciscaconcha/ProyectoLogisim/issues/115
-
Añadir inputs y outputs en main. https://github.com/franciscaconcha/ProyectoLogisim/issues/113
-
Mostrar texto que diga cómo fueron codificados los estados. https://github.com/franciscaconcha/ProyectoLogisim/issues/112
-
Conectar splitters a subcircuito Combinatorial. https://github.com/franciscaconcha/ProyectoLogisim/issues/111
-
Conectar splitters a subcircuito Register. https://github.com/franciscaconcha/ProyectoLogisim/issues/110
-
Añadir reloj a subcircuito Register. https://github.com/franciscaconcha/ProyectoLogisim/issues/109
-
Corregir bug de mover transiciones (GUI). https://github.com/franciscaconcha/ProyectoLogisim/issues/106
-
Añadir automáticamente splitters al circuito main. https://github.com/franciscaconcha/ProyectoLogisim/issues/105
-
Crear splitters en subcircuito Register. https://github.com/franciscaconcha/ProyectoLogisim/issues/104
-
Añadir pins de entrada y salida al subcircuito "Register". https://github.com/franciscaconcha/ProyectoLogisim/issues/103
-
Arreglar Bug de RepresentationMatrix. https://github.com/franciscaconcha/ProyectoLogisim/issues/101
-
Agregar interfaz para guardar/abrir diagrama de estado (que facilitará división de trabajo). https://github.com/franciscaconcha/ProyectoLogisim/issues/98
-
Evitar que se intente generar un circuito si existe CUALQUIER excepción o error. https://github.com/franciscaconcha/ProyectoLogisim/issues/97
-
Agregar deshacer/rehacer a GUI externa. https://github.com/franciscaconcha/ProyectoLogisim/issues/96
-
Corregir problemas de selección multiple en GUI externa. https://github.com/franciscaconcha/ProyectoLogisim/issues/95
-
Testear las condiciones recientemente implementadas de StateDiagramChecker. https://github.com/franciscaconcha/ProyectoLogisim/issues/94
-
Error en clase FSATransducer https://github.com/franciscaconcha/ProyectoLogisim/issues/91
-
Adaptar generador xml a modelo de diagramas de estado. https://github.com/franciscaconcha/ProyectoLogisim/issues/88
-
Integrar generador de archivo XML a Logisim. https://github.com/franciscaconcha/ProyectoLogisim/issues/82
-
Encontrar clases que permiten añadir subcircuitos de forma modular. https://github.com/franciscaconcha/ProyectoLogisim/issues/81
-
Diagramar casos de uso. https://github.com/franciscaconcha/ProyectoLogisim/issues/80
-
Considerar * en Diagram Table. https://github.com/franciscaconcha/ProyectoLogisim/issues/78
-
Agregar getter para cantidad de bits utilizados en codificación de estados. https://github.com/franciscaconcha/ProyectoLogisim/issues/74
-
Crear automáticamente subcircuito combinatorial "lazy". https://github.com/franciscaconcha/ProyectoLogisim/issues/73
-
Generar automáticamente subcircuitos combinatorial y secuencial. https://github.com/franciscaconcha/ProyectoLogisim/issues/72
-
Unir el proceso de conversión RepMatrix. https://github.com/franciscaconcha/ProyectoLogisim/issues/68
-
Permitir guardar y abrir diagrama de estado utilizando la generación de XML ya implementada. https://github.com/franciscaconcha/ProyectoLogisim/issues/65
-
Unir proceso de inserción automática en tabla y obtención de modelo de Diagrama. https://github.com/franciscaconcha/ProyectoLogisim/issues/64
Caso de Uso
Estos serían los pasos a seguir por un usuario al utilizar la nueva funcionalidad:
-
En el menú project/proyecto, selecciona "Draw State Diagram"/"Definir Diagrama de Estados".
-
Se abre una nueva ventana donde el usuario puede dibujar su diagrama de estados. Tiene herramientas para definir estados y transiciones. Las transiciones incluyen los strings de input y output. Es necesario que el diagrama cumpla varias condiciones para poder generar el circuito:
- Los inputs y outputs sólo pueden ser de 1's, 0's y *'s.
- Los largos de todos los inputs deben ser iguales, ídem para outputs.
- No pueden haber dos transiciones provenientes del mismo estado con el mismo input.
- Los inputs de las transiciones provenientes de un mismo estado deben cubrir todos los posibles inputs.
-
Una vez que el usario termina de especificar las transiciones, aprieta el botón "Generate"/"Generar Circuito".
-
El circuito aparece en el canvas principal de Logisim, con su parte combinacional y su registro.
Tareas Propuestas Sin Realizar
Se lograron cumplir todos los objetivos propuestos al comienzo del proyecto.
[Volver a Menú Presentación 3] (https://github.com/franciscaconcha/ProyectoLogisim/wiki/Presentaci%C3%B3n-3)