Upload
independent
View
1
Download
0
Embed Size (px)
Citation preview
SISTEMAS DIGITALES II
FIEC00745FACULTAD DE INGENIERIA EN ELECTRICIDAD Y COMPUTACION
Ing. Ronald Ponguillo Intriago [email protected]
Algunas Observaciones Una manera tradicional (un poco obsoleta) de uso de herramientas CAD consiste en diseñar manualmente el circuito secuencial a partir de un Diagrama de Estados usando los flip-flops, puertas, etc.
Y luego introducir este circuito en el software de diseño y simulación utilizando el Editor Grafico. Utilizando este software se puede simular el comportamiento de la MSS e implementarla en un PLD.
Es bastante trabajoso manualmente sintetizar la MSS a partir de un Diagrama de Estados.
Ing. Ronald Ponguillo Intriago4
Algunas Observaciones Resulta más atractivo describir el Diagrama de Estados utilizando un HDL (Hardware Description Language), por ejemplo, lenguaje VHDL.
Analizaremos el siguiente ejemplo de una Maquina Secuencial Sincrónica Simple
Ing. Ronald Ponguillo Intriago5
ANALISIS DE UNA MAQUINA SECUENCIAL SIMPLE
Ing. Ronald Ponguillo Intriago6
Acceso a la libreria IEEE Uso del paquete std_logic_1164
Entidad creada con la herramienta CAD QUARTUS II de ALTERA
Ing. Ronald Ponguillo Intriago7
Definición de nuevo tipo de dato ESTADO
Creación de senial con el nuevo tipo de dato YTransiciones de estados creado por la herrmienta QUARTUS II
Decodificador de Salida
Decodificador de Estado
Siguiente y Memoria de Estados
Diagrama de Tiempo
Ing. Ronald Ponguillo Intriago8
Diagrama de
Estados?
Circuito creado por Quartus II
Declaraciones concurrentes y secuenciales.
Declaración concurrente.
Ing. Ronald Ponguillo Intriago9
El diagrama indica como las declaraciones concurrentes son ejecutados en VHDL.
Las declaraciones concurrentes son aquellas que aparecen entre declaraciones begin y end de una architecture.
Esta área de architecture se llama área concurrente.
Declaraciones Concurrentes En VHDL todas las declaraciones en el área concurrente son ejecutadas al mismo tiempo y hay cuatro tipos diferentes de declaraciones concurrentes:
1. declaración de señal simple (simple signal assignment)
signal x, y, s : std_logic; Ejemplo: s <= x + y;
2. declaración de señal selecto (selected signal assignment) signal x1, x2, Sel, y : std_logic;
Ing. Ronald Ponguillo Intriago10
Ejemplo: with Sel select y <= x1 when ‘0’, x2 when others;
Declaraciones Concurrentes 3. declaración de señal condicional (condicional signal assignment)
4. declaraciones generar (generate statements).
Nota: se hablara más adelante sobre esta declaración.
Ing. Ronald Ponguillo Intriago11
Ejemplo: z <= '1' when y = c else '0'; Ejemplo: Y <= A when Sel =”00” else B when Sel =”01” else C when Sel =”10” else D when others;
Declaraciones secuenciales.
Ing. Ronald Ponguillo Intriago12
El diagrama muestra como se ejecutan las declaraciones secuenciales en VHDL.
Las declaraciones secuenciales son ejecutadas una después de la otra en el orden que ellas aparecen entre las declaraciones begin y end de un process.
Por esto razón las declaraciones secuenciales siempre deben ser separadas de las declaraciones concurrentes
Declaraciones secuenciales. Mientras las declaraciones if – elsif – else - end if en el process son ejecutadas secuencialmente (una después de la otra), el cuerpo de process es tratado por VHDL como una simple declaración concurrente y es ejecutado al mismo tiempo que otras declaraciones concurrentes.
La declaración process es una declaración concurrente, es decir, si un código VHDL tiene varias declaraciones de process, son ejecutados concurrentemente.
Pero las declaraciones dentro de cada declaración process son secuenciales y son ejecutados en orden, una después de la otra.
Ing. Ronald Ponguillo Intriago13
Algunas Acotaciones La declaración process puede incluir otras declaraciones dentro de ella (declaraciones if – then – elsif – else, case - when y for - loop).
Las declaraciones if, case y loop pueden ser usadas para describir tanto circuitos combinatoriales, como secuenciales dentro de process.
Cuando la declaración if – then – elsif - else es usada para describir lógica combinatorial puede haber varias elsif, pero solo una else al final. Debe terminar con end.
No existe una relación directa entre declaraciones concurrentes y secuenciales y la lógica combinatorial y secuencial
Ing. Ronald Ponguillo Intriago15
Estilo alternativo del código VHDL VHDL no especifica una manera estándar para escribir el código que representa el funcionamiento de una MSS. El código analizado es solo una posibilidad. La otra posibilidad esta presentada a continuación
Dos señales son usadas para representar el estado de la MSS: y_presente, que es el estado presente y y_siguiente que es el estado siguiente.
No se puede usar las letras mayúsculas ya que VHDL no hace diferencia entre letras mayúsculas y minúsculas.
Ing. Ronald Ponguillo Intriago16
Decodificador de estado Siguiente
Ing. Ronald Ponguillo Intriago17
Se describe el bloque del Decodificador de estado Siguiente
Memoria de Estados
Ing. Ronald Ponguillo Intriago18
El código indica que con cada flanco de subida de Clock y_presente va a tomar el valor de y_siguiente
El process también indica que y_presente será igual a “a” cuando Resetn = 0.
Decodificador de Salidas
Ing. Ronald Ponguillo Intriago19
Los circuitos que producirá el compilador de VHDL para cada versión del código serán probablemente diferentes, pero realizaran la misma función.
Circuito creado por Quartus II
Asignación de códigos de estados en VHDL.
La asignación del código puede tener un impacto en la complejidad del circuito diseñado.
Un objetivo obvio del proceso de asignación del código de estados es minimizar el costo de implementación.
Quartus II de Altera trata de encontrar tal codificación de los estados que minimiza el numero total de términos AND que va a ser utilizada en un CPLD donde se carga el circuito.
VHDL permite al usuario asignar los códigos de estados que se desea.
No hay una manera estándar para hacerlo.
Ing. Ronald Ponguillo Intriago21
Algunas Acotaciones Quartus II recomienda hacer la asignación de códigos usando la característica atributo (attribute) del VHDL.
Un attribute se refiere a algún tipo de información sobre un objeto.
Por ejemplo, todas las signals en VHDL automáticamente tienen unos attribute predefinidos.
Un ejemplo es el atributo event que se usa para especificar un flanco de reloj en Clock ‘event.
A parte de los attribute predeterminados, el usuario puede crear sus propios attribute.
Estos atributos pueden ser usados para dar algún tipo de información a un objeto, en nuestro caso, a type estado, en código VHDL.
Ing. Ronald Ponguillo Intriago22
Creación de Atributo en VHDL
Ing. Ronald Ponguillo Intriago23
Primero se define el nuevo atributo llamado enum_encoding que es de tipo string (sarta, cadena).
En la siguiente línea se asocia ENUM_ENCODING con el tipo estado y se especifica que el atributo tiene el valor “00 01 11”.
El compilador de Quartus II usa el valor de ENUM_ENCODING para hacer la asignación de estados “a” = 00, “b” = 01; “c” = 11.
Otra manera de asignar los códigos de Estado
Ing. Ronald Ponguillo Intriago25
En este caso y_presente y y_siguiente están definidos como señales de dos bits. Los nombres de estados son definidos como constantes con el valor correspondiente a codificación deseada.
VHDL requiere que la declaración de case para y_presente incluye una cláusula when para todos los posibles valores de y_presente.
Ya que en este caso y_presente es una señal de std_logic_vector debemos especificar una cláusula when others.