miércoles, 15 de abril de 2020

Asignatura: Sistemas Digitales II

Curso: 6° Informática

Profesora: Dora F. Aguerre



Máquinas de Estado Finitas

Se denomina Maquina de Estado a un modelo de comportamiento de un sistema con entradas y salidas, en donde las salidas dependen no solo de las señales de entradas actuales sino también de las anteriores.

Las máquinas de estado pueden ser:

SÍNCRONAS: Necesitan de la intervención de un pulso de reloj. Si la entrada participa también en la salida se denomina Máquina de estado de Mealy, y si no participa se denomina de Moore.

ASÍNCRONAS: No necesitan de la intervención de un pulso de reloj. Estos circuitos evolucionan cuando cambian las entradas.

Una máquina de estado finita o FSM representa un sistema como un conjunto de estados, transiciones entre estos estados, que dependen de las entradas, conjuntamente con las salidas y las entradas asociadas.

De modo tal que una máquina de estado es una representación, de un circuito secuencial particular.

Cualquier circuito con memoria puede ser considerado como una FSM. Aún una computadora puede ser considerada como una gran FSM.

El diseño de una FSM involucra lo siguiente:
·           Definición de estados.
·           Definición de transición entre estados (dependientes de las entradas de la máquina).
·           Optimización/minimización.


Definición de términos

Diagrama de estado: ilustra la forma y funcionamiento de la máquina de estado.
Usualmente se dibuja como un diagrama de burbujas y flechas.

Estado: un conjunto identificable y único de valores medidos en diversos puntos de un sistema digital.

Ramificación: El cambio del estado presente al estado siguiente.

Estado siguiente: es el estado hacia el cual la máquina de estado realiza la siguiente transición, determinada por las entradas presentes cuando el dispositivo es secuenciado por un clock.

Máquina de Moore: es una máquina de estado que determina sus salidas solamente dependiendo de los estados presentes de la máquina.

Máquina de Mealy: es una máquina de estado que determina sus salidas dependiendo de los estados presentes de la máquina y de las entradas.





Estado presente y estado siguiente:

Para un estado determinado existe un número finito de posibles estados siguientes. Para cada ciclo de reloj la máquina de estado se ramifica al estado siguiente. Uno de los posibles estados siguientes se convierte en el nuevo estado presente. Dependiendo de las entradas presentes en el ciclo de reloj.

En un diagrama correcto, todas las posibles transiciones serán visibles incluyendo lazos realimentados en el mismo estado. En el diagrama 1 se puede deducir que si el estado presente es el Estado 2, el estado previo es el Estado 1 o el Estado 2 y el próximo estado debe ser 2, 3 o 4.


Máquinas de Moore y Mealy

Ambos tipos de máquinas siguen las características de las máquinas de estado pero difieren en la forma en que las salidas son producidas.

Máquina de Moore: Las salidas son independientes de las entradas. Las salidas se producen efectivamente desde dentro del estado de la máquina. Se define como maquina tipo Moore si sus salidas solo dependen del estado de la máquina.


Máquina de Mealy: las salidas pueden ser determinadas por el estado presente solamente, o por el estado presente y las entradas presentes, es decir las salidas se producen dependiendo de cómo la máquina realiza una transición de un estado a otro.





MODELO DE MÁQUINAS

Diagrama de Flujo
Máquina de estado de Moore

Diagrama general
Diagrama a nivel Flip Flop y compuertas
Máquina de estado de Mealy


Diagrama general

Diagrama a nivel Flip Flop y compuertas


Diagrama de Máquina de estado de Moore
La salida en una Máquina de estado de Moore se muestra dentro de la burbuja de estado, debido a que la salida se mantiene igual, mientras la máquina se mantenga en ese estado. La salida puede ser arbitrariamente compleja pero debe ser la misma cada vez que la máquina entra a ese estado.




La máquina de Mealy genera las salidas basada en:
           ·        El estado presente.
  
           ·        Las entradas a la máquina.

De modo de ser capaz de generar diversos patrones diferentes de señales de salida para el mismo estado, dependiendo de las entradas presentes en el ciclo de reloj. Las salidas son mostradas sobre las transiciones del momento que están determinadas de la misma manera que el estado siguiente.

Diferencias entre Mealy y Moore

Las FSM Mealy y Moore pueden ser funcionalmente equivalentes.

Las FSM Mealy tienen una mejor descripción y usualmente requieren de un número menor de estados y menor área de circuito.
Mealy calcula las salidas tan pronto como se produce un cambio en las entradas.
Mealy responde un ciclo de reloj antes que el equivalente Moore.

Las FSM Moore no posee un camino de lógica combinacional entre entradas y salidas.

Ejemplo de FSM Moore
Detección de la secuencia 10.


Significado de los estados:
S0: No se encuentra ningún elemento de la secuencia.
S1: aparece un “1”.
S2 Se detecta la secuencia “10”.


Ejemplo de FSM Mealy
Detección de la secuencia 10.


Significado de los estados:

S0: No se encuentra ningún elemento de la secuencia.
S1 Se detecta la secuencia “10”.

Diagrama de tiempos del ejemplo 1
Ejemplo de máquina expendedora de gaseosa

·        Toma solamente monedas de 25 centavos y $1.

·        No retiene más de $1.

·        La gaseosa cuesta $0.75.

·        Posibles acciones(entradas):

-         Depositar $0.25 (25)
-         Depositar $1 ($).

-         Presionar el botón para pedir gaseosa (gaseosa).

-         Presionar el botón para pedir devolución del dinero (vuelto).

·        Estado: descripción del seteo interno de la máquina, por ej. cuánto dinero ha sido depositado y no gastado.

·        Estados finitos: 0, 25, 50, 75, 100.

·        Reglas: determinar cuántas entradas pueden cambiar el estado.




MÁQUINAS DE ESTADO EN VHDL

Como se explicó anteriormente existen dos tipos:

·        Moore.

·        Mealy.





 
FSM Moore:

·        La salida depende solamente del estado actual.

·        Las salidas asociadas con cada estado, son establecidas

en la transición del clock.






 
              FSM Mealy:

·                La salida depende de las entradas y del estado actual.

·                Las salidas son establecidas durante las transiciones.





Código VHDL para una FSM

Una FSM puede ser fácilmente descripta por medio del PROCESS.

Las herramientas de síntesis interpretan una la descripción de unas FSM si se siguen ciertas reglas:

Las transiciones de estados deben ser descriptas en un PROCESS sensible solamente a las señales de CLOCK y RESET asíncrono.
Las salidas descriptas como sentencias concurrentes fuera del PROCESS.

  
FSM Moore reconocimiento de secuencia 10


FSM Mealy reconocimiento de secuencia 10




Asignatura: Laboratorio de Programación I

Curso: 4° Informática

Profesora: Evangelina Rivero

1) Leer el texto.
2) ¿Qué es un algoritmo? Nombra algunos ejemplos. ¿Qué características tiene un algoritmo? ¿Qué partes tiene? Ejemplo
3) ¿Qué es un lenguaje de programación? ¿Cuál es el lenguaje de máquinas y cuál ensamblador?¿Qué ventajas tiene?
4) ¿Qué es un programa?
5) ¿Qué es la programación?
6) ¿Cuáles son las variantes de los paradigmas de la programación? Nombrar
7) ¿Qué es un editor de texto? ¿Qué tipos hay? Ejemplos.
8) ¿Qué son los compiladores y los intérpretes? ¿Cuáles son los lenguajes de los compiladores?
9) ¿Que es un ejecutable?
10) ¿Que son las consolas de linea de comandos?

Definición de: Algoritmo, Lenguaje de Programación, Programa, Programación, Paradigmas de programación, Editores de texto, Compiladores e intérpretes, Ejecutables, Consola de línea de comandos.
- ALGORITMO
Un algoritmo es una secuencia de pasos lógicos necesarios para llevar a cabo una tarea especifica, como la solución de un problema. Los algoritmos son independientes tanto del lenguaje de programación en que se expresan como de la computadora que los ejecuta. En cada problema el algoritmo se puede expresar en un lenguaje diferente de programación y ejecutarse en una computadora distinta; sin embargo el algoritmo será siempre el mismo.
Por ejemplo en una analogía con la vida diaria, una receta de un plato de cocina se puede expresar en español, ingles o francés, pero cualquiera que sea el lenguaje, los pasos para la elaboración del plato se realizaran sin importar el cocinero.
Los pasos a seguir en la solución de una ecuación de segundo grado.
Los pasos matemáticos para la solución de un número factorial.
Las instrucciones para la liquidación de una nomina.
Las acciones que se deben seguir para la obtención de una estadística.
Para llegar a la realización de un programa es necesario el diseño previo de un algoritmo, de modo que sin algoritmo no puede existir un programa.
Características de los algoritmos.
Las características fundamentales que debe cumplir todo algoritmo son:
  1. Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.
  2. Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez.
  3. Un algoritmo debe ser finito. Si se sigue un algoritmo, se debe terminar en algún momento; o sea debe de tener un número finito de pasos.
La definición de un algoritmo debe describir tres partes: Entrada, Proceso y Salida.
En el algoritmo citado anteriormente se tendrá:
  • Entrada ingredientes y utensilios empleados
  • Proceso elaboración de la receta de cocina
  • Salida terminación del plato (por ejemplo, cordero)
Un algoritmo exige que se tengan varias propiedades importantes: Los pasos de un algoritmo deben ser simples y exentos de ambigüedades (diferentes significados), deben seguir un orden cuidadosamente prescrito, deben ser efectivos y deben de resolver el problema en un número finito de pasos.

1.2.2.- LENGUAJE DE PROGRAMACIÓN
Un lenguaje de programación" es un lenguaje diseñado para describir el conjunto de acciones consecutivas que un equipo debe ejecutar. Por lo tanto, un lenguaje de programación es un modo práctico para que los seres humanos puedan dar instrucciones a un equipo.
Por otro lado, el término "lenguaje natural" define un medio de comunicación compartido por un grupo de personas (por ejemplo: inglés o francés).
Los lenguajes que los equipos usan para comunicarse entre ellos no tienen nada que ver con los lenguajes de programación; se los conoce como protocolos de comunicación. Se trata de dos conceptos totalmente diferentes.
El lenguaje utilizado por el procesador se denomina lenguaje máquina. Se trata de datos tal como llegan al procesador, que consisten en una serie de 0 y 1 ( datos binarios).
El lenguaje máquina, por lo tanto, no es comprensible para los seres humanos, razón por la cual se han desarrollado lenguajes intermediarios comprensibles para el hombre. El código escrito en este tipo de lenguaje se transforma en código máquina para que el procesador pueda procesarlo.
El ensamblador fue el primer lenguaje de programación utilizado. Es muy similar al lenguaje máquina, pero los desarrolladores pueden comprenderlo. No obstante, este lenguaje se parece tanto al lenguaje máquina que depende estrictamente del tipo de procesador utilizado (cada tipo de procesador puede tener su propio lenguaje máquina). Así, un programa desarrollado para un equipo no puede ser portado a otro tipo de equipo. El término "portabilidad" describe la capacidad de usar un programa de software en diferentes tipos de equipos. Para poder utilizar un programa de software escrito en un código ensamblador en otro tipo de equipo, ¡a veces será necesario volver a escribir todo el programa!
Por lo tanto, un lenguaje de programación tiene varias ventajas:
·         es mucho más fácil de comprender que un lenguaje máquina:
·         permite mayor portabilidad, es decir que puede adaptarse fácilmente para ejecutarse en diferentes tipos de equipos.


1.2.3.- PROGRAMA

Un programa informático o programa de computadora es una secuencia de instrucciones, escritas para realizar una tarea específica en una computadora. Este dispositivo requiere programas para funcionar, por lo general, ejecutando las instrucciones del programa en un procesador central. El programa tiene un formato ejecutable que la computadora puede utilizar directamente para ejecutar las instrucciones. El mismo programa en su formato de código fuente legible para humanos, del cual se derivan los programas ejecutables (por ejemplo, compilados), le permite a un programador estudiar y desarrollar sus algoritmos. Una colección de programas de computadora y datos relacionados se conoce como software.
Generalmente, el código fuente lo escriben profesionales conocidos como programadores de computadora. Este código se escribe en un lenguaje de programación que sigue uno de los siguientes dos paradigmas: imperativo o declarativo, y que posteriormente puede ser convertido en un archivo ejecutable (usualmente llamado un programa ejecutable o un binario) por un compilador y más tarde ejecutado por una unidad central de procesamiento. Por otra parte, los programas de computadora se pueden ejecutar con la ayuda de un intérprete, o pueden ser empotrados directamente en hardware.
De acuerdo a sus funciones, los programas informáticos se clasifican en software de sistema y software de aplicación. En las computadoras de 2015, al hecho de ejecutar varios programas de forma simultánea y eficiente, se lo conoce como multitarea.

1.2.4.- PROGRAMACIÓN

La programación informática o programación algorítmica, acortada como programación, es el proceso de diseñar, codificar, depurar y mantener el código fuente de programas computacionales. El código fuente es escrito en un lenguaje de programación. El propósito de la programación es crear programas que exhiban un comportamiento deseado. El proceso de escribir código requiere frecuentemente conocimientos en varias áreas distintas, además del dominio del lenguaje a utilizar, algoritmos especializados y lógica formal. Programar no involucra necesariamente otras tareas tales como el análisis y diseño de la aplicación (pero sí el diseño del código), aunque sí suelen estar fusionadas en el desarrollo de pequeñas aplicaciones.
Del proceso de programación surge lo que comúnmente se conoce como software (conjunto de programas), aunque estrictamente este último abarca mucho más que solo la programación.

1.2.5.- PARADIGMAS DE PROGRAMACIÓN

En nuestro contexto, los paradigmas de programación nos indican las diversas formas que, a lo largo de la evolución de los lenguajes, han sido aceptadas como estilos para programar y para resolver los problemas por medio de una computadora.
En general la mayoría son variantes de los dos tipos principales, imperativa y declarativa:
·         Programación imperativa o por procedimientos: es el más usado en general, se basa en dar instrucciones al ordenador de como hacer las cosas en forma de algoritmos. La programación imperativa es la más usada y la más antigua, el ejemplo principal es el lenguaje de máquina. Ejemplos de lenguajes puros de este paradigma serían el C, BASIC o Pascal.

·         Programación orientada a objetos: está basada en el imperativo, pero encapsula elementos denominados objetos que incluyen tanto variables como funciones. Está representado por C++, C#, Java o Python entre otros, pero el más representativo sería el Smalltalk que está completamente orientado a objetos.

·         Programación dinámica: está definida como el proceso de romper problemas en partes pequeñas para analizarlos y resolverlos de forma lo más cercana al óptimo, busca resolver problemas en O(n) sin usar por tanto métodos recursivos. Este paradigma está más basado en el modo de realizar los algoritmos, por lo que se puede usar con cualquier lenguaje imperativo.

·         Programación dirigida por eventos: la programación dirigida por eventos es un paradigma de programación en el que tanto la estructura como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema, definidos por el usuario o que ellos mismos provoquen.

·         Programación declarativa: está basado en describir el problema declarando propiedades y reglas que deben cumplirse, en lugar de instrucciones. Hay lenguajes para la programación funcional, la programación lógica, o la combinación lógico-funcional. Unos de los primeros lenguajes funcionales fueron Lisp y Prolog.

·         Programación funcional: basada en la definición los predicados y es de corte más matemático, está representado por Scheme (una variante de Lisp) o Haskell. Python también representa este paradigma.

·         Programación lógica: basado en la definición de relaciones lógicas, está representado por Prolog.

·         Programación con restricciones: similar a la lógica usando ecuaciones. Casi todos los lenguajes son variantes del Prolog.

·         Programación multiparadigma: es el uso de dos o más paradigmas dentro de un programa. El lenguaje Lisp se considera multiparadigma. Al igual que Python, que es orientado a objetos, reflexivo, imperativo y funcional.

·         Lenguaje específico del dominio o DSL: se denomina así a los lenguajes desarrollados para resolver un problema específico, pudiendo entrar dentro de cualquier grupo anterior. El más representativo sería SQL para el manejo de las bases de datos, de tipo declarativo, pero los hay imperativos, como el Logo.
Si bien puede seleccionarse la forma pura de estos paradigmas al momento de programar, en la práctica es habitual que se mezclen, dando lugar a la programación multiparadigma o lenguajes de programación multiparadigma.

1.2.6.- EDITORES DE TEXTO

Un editor de texto es un programa que permite crear y modificar archivos digitales compuestos únicamente por texto sin formato, conocidos comúnmente como archivos de texto o texto plano.
Tipos de editores de texto
Hay una gran variedad de editores de texto. Algunos son de uso general, mientras que otros están diseñados para escribir o programar en un lenguaje. Algunos son muy sencillos, mientras que otros tienen implementadas gran cantidad de funciones.
Ejemplos
ü     Bloc de notas, editor integrado en Windows, también conocido como Notepad (en inglés).
ü     Emacs, otro editor muy común en Unix.
ü     Gedit, editor libre que se distribuye junto con GNOME para sistemas tipo Unix. También disponible para Windows.
ü     jEdit, editor popular multiplataforma.
ü     Kate, editor para Unix.
ü     Notepad++, editor de código fuente para Windows.
ü     Vi, editor muy común en Unix.

1.2.7.- COMPILADORES E INTERPRETES


COMPILADOR
Un compilador acepta programas escritos en un lenguaje de alto nivel y los traduce a otro lenguaje, generando un programa equivalente independiente, que puede ejecutarse tantas veces como se quiera.


En un compilador hay que distinguir tres lenguajes diferentes:


El de los programas de partida (LA)

El de los programas equivalentes traducidos (LB), normalmente el lenguaje de máquina

El lenguaje en que está escrito el propio compilador (LC), que puede ser igual o diferente a uno de los otros dos.


Los programas interpretados suelen ser más lentos que los compilados, pero los intérpretes son más flexibles como entornos de programación y depuración. Comparando su actuación con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intérprete corresponde al intérprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito.

INTERPRETE
Un intérprete traduce un código fuente en lenguaje máquina también. El intérprete difiere del compilador en que ejecuta cada orden una vez que se traduce. Este proceso puede hacer más lenta la ejecución del programa, así que los intérpretes se utilizan menos que los compiladores. Un intérprete es otra manera de implementar un lenguaje de programación. La interpretación comparte muchos aspectos con el compilador. Los análisis léxico, sintáctico y verificación de tipos son exactamente los mismos que en un compilador.


Pero en lugar de generar código del árbol sintáctico, el árbol sintáctico se procesa directamente para evaluar expresiones y ejecutar sentencias, y así hasta terminar. Un intérprete puede necesitar evaluar la misma parte del árbol sintáctico varias veces (por ejemplo cuando se hacen ciclos), por eso la interpretación puede ser más lenta que la ejecución de un programa compilado. Pero escribir un intérprete es más fácil de mover a una máquina diferente, así que para aplicaciones donde la velocidad no importa, lo mejor es utilizar un intérprete.

Es muy útil sabe cómo se hace un intérprete o un compilador, porque esto permite a los programadores tener una idea de lo que hacen los programas de alto nivel, lo que a su vez, ayudará a los programadores para crear código más eficiente. Otras razones. Los errores que devuelven los compiladores proporcionan una manera fácil de entender el código fuente; además, se conoce la diferencia entre errores léxicos, sintácticos, errores de tipos, y así.

1.2.8.- EJECUTABLE

Archivo que tiene la capacidad de poder ser ejecutado de forma independiente, o en otras palabras, que no necesita ser ejecutado por una aplicación externa. Estos archivos son ejecutados y controlados por el sistema operativo. Un archivo ejecutable contiene un programa, y generalmente necesitan de otros archivos para funcionar (aunque no es necesario).
Un ejemplo de archivo ejecutable en Windows son los .EXE, o los .COM en MS-DOS.

En general, los archivos ejecutables son el principal medio de transmisión de virus y malware.

1.2.9.- CONSOLA DE LINEA DE COMANDOS


Es un método que permite a las personas dar instrucciones a algún programa informático por medio de una línea de texto simple. Debe notarse que los conceptos de CLI, Shell y Emulador de Terminal no son lo mismo, aunque suelen utilizarse como sinónimos.

La Línea de Comandos de Windows es una implementación de la consola MS-DOS para la interfaz gráfica de las diversas versiones Microsoft Windows.

La Línea de Comandos ha estado presente en forma activa en el sistema operativo Windows desde la versión 3.0 hasta la versión Windows 98, donde los programas de la interfaz gráfica eran ejecutados por medio de la consola y sobre la cual todo el sistema operativo era montado.

A partir de la versión de Windows XP, la línea de comandos pasó a segundo plano como un complemento de sistema, sin que perdiera la funcionalidad de la misma

Asignatura: Taller de Aplicaciones I

Curso: 4° Informática

Profesora: Evangelina Rivero


1) Para poder realizar las actividades vamos a mirar el siguiente video: https://www.youtube.com/watch?v=7N2SjoqRHn8
2) Realizar los siguientes trabajos prácticos en la computadora


Aplicaciones I - Planillas de Cálculo

  Asignatura: Aplicaciones I Curso: 4° Informática Profesora: Evangelina Rivero - e-mail:evange_rivero@hotmail.com Tema: Planillas de Cálcul...