Haz una pregunta
  Foros de Electrónica » Diseño digital » Circuitos lógicos combinacionales y secuenciales
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

08/12/2010 #21


Hola que tal estoy siguiendo el codigo pero lo ocupo un poco diferente pero no se que pasa me da varios error y no se como repararlo, les enseño el codigo ke ando tratando de hacer.

PD: No se programar solo intento seguir el codigo

Código:
Name     Name ;
PartNo   00 ;
Date     08/12/2010 ;
Revision 01 ;
Designer Engineer ;
Company  Tez ;
Assembly None ;
Location  ;
Device   g22v10 ;

/* *************** INPUT PINS *********************/
PIN     1=CLK                         ; /*                                 */ 
PIN     2=A                         ; /*                                 */ 
PIN     3=B                        ; /*                                 */ 
PIN     4=C                         ; /*                                 */ 

/* *************** OUTPUT PINS *********************/
PIN     20= Q0                        ; /*                                 */ 
PIN     21= Q1                        ; /*                                 */ 
PIN     22= Q2                        ; /*                                 */ 
PIN     23= Q3                        ; /*                                 */ 

FIELD PUSH1=[Q3,Q2,Q1,Q0];
FIELD PUSH2=[Q3,Q2,Q1,Q0];
FIELD PUSH3=[Q3,Q2,Q1,Q0];

$DEFINE QA 'b' 0000
$DEFINE QB 'b' 0000 
$DEFINE Q0 'b' 1010 
$DEFINE Q1 'b' 1001 
$DEFINE Q2 'b' 0101  
$DEFINE Q3 'b' 0110

SEQUENCE PUSH1{ 
	PRESENT QA 
		NEXT Q0;
	PRESENT Q0
		IF A NEXT Q1;
	PRESENT Q1
		IF A NEXT Q2;
	PRESENT Q2
		IF A NEXT Q3;
	PRESENT Q3
		NEXT QA;	} /* Aqui lo que quiero hacer es que solamente de 3 ciclos */

SEQUENCE PUSH2{ 
	PRESENT QA 
		NEXT Q3;
	PRESENT Q3
		IF B NEXT Q2;
	PRESENT Q2
		IF B NEXT Q1;
	PRESENT Q1
		IF B NEXT Q0;
	PRESENT Q0
		NEXT QB; 	 

	PRESENT QB 
		NEXT Q0;
	PRESENT Q0
		IF A NEXT Q1;
	PRESENT Q1
		IF A NEXT Q2;
	PRESENT Q2
		IF A NEXT Q3;
	PRESENT Q3
		NEXT QA;        }   /* Aqui que de 2 ciclos hacia la izq y 2 ciclos a la der. */


SEQUENCE PUSH3{ 
	PRESENT QA 
		NEXT Q3;
	PRESENT Q3
		IF B NEXT Q2;
	PRESENT Q2
		IF B NEXT Q1;
	PRESENT Q1
		IF B NEXT Q0;
	PRESENT Q0
		NEXT QB; 	 

	PRESENT QB 
		NEXT Q0;
	PRESENT Q0
		IF A NEXT Q1;
	PRESENT Q1
		IF A NEXT Q2;
	PRESENT Q2
		IF A NEXT Q3;
	PRESENT Q3
		NEXT QA; 	

	PRESENT QA 
		NEXT Q3;
	PRESENT Q3
		IF B NEXT Q2;
	PRESENT Q2
		IF B NEXT Q1;
	PRESENT Q1
		IF B NEXT Q0;
	PRESENT Q0
		NEXT QB;	/* y por ultimo que de 2 ciclos a la izq, 2 ciclos a la der y 1 ciclo a la izq.*/
}
17/12/2010 #22

Avatar de jaimepsantos

Tez, el programa que tenia originalmente igual es para un motor a pasos lo que hace es que dependiendo las entradas declaradas, y también las salidas, donde el campo ( FIELD ), es donde indicamos que es un solo dato en nuestro caso de 4 bits, lo que tu quieres hacer es que con un push boton cambie, poes asi con esta base no se puede, es combinacional, no es activada con interrupciones, a menos que le pongas unos FF a la entrada para que te guarden el dato ,, a volviendo al programa, donde dice DEFINE, estamos declarando los estados de la maquina, la cual la de debemos inicializar en cero y luego ya tu diras lo que hace segun tus entradas, poniendo sintaxis parecida a esta

...
sequence cont{
present S0 next S1;

present S1
if STOP&AVANZA next S1;
if STOP&!AVANZA next S1;
if !STOP&AVANZA next S2;
if !STOP&!AVANZA next S4;

present S2
if STOP&AVANZA next S2;
...


lo que hacemos aqui es decir que si el estado es S0 pase al S1 asi, ya en el S1 si la entrada declarada como stop Y(and) avanza son 1 el siguiente es el estado S1, se enclava ,, y asi le vas poniendo tus combinaciones.
27/05/2012 #23


Uso de WinCupl
Hola tengo un conflicto tengo que diseñar esta maquina de estados en WinCupl y la neta no tengo idea de como espero me puedan ayudar
Imágenes Adjuntas
Tipo de Archivo: jpg Sin título.jpg (37,5 KB (Kilobytes), 26 visitas)
26/08/2013 #24


Para los que tienen problemas con sequenciales, El programa BOOLE-DEUSTO les puede ayudar, ya que:
1. Es gratis
2. Te permite hacer tu maquina de estados graficamente
3. Te da el codigo para las gal 22V10

El link para descarga es:

http://paginaspersonales.deusto.es/zubia/
26/02/2014 #25


Les dejo la siguiente aportación de como definir una máqina de estados fínita en WinCUPL
si no quieres copiar el código, les dejo un archivo de txt que lo incluye
Máquinas de estado con WincuPL

Empesamos por definir los estados con #DEFINE

$DEFINE S0 'b'000 // En este caso llamamos a este estado SO para no tener que estar
/* escribiendo su representacion binaria 000 en este caso */
$DEFINE S1 'b'110 // nota que no necesariamente sigue un orden binario
// ya que #DEFINE solo le dice a Winucpl que sustituya S1 por 110

Una vez definidos los estados, definimos la máquina de estados finita(FSM).
Para ello útilizamos la siguiente estructura
SEQUENCE nombre
{
La definición completa de la máquina de estado esta comprendido entre estos curly braces
}

Para declarar los estados usamos la palabra PRESENT, debe haber un PRESENT por cada estado
que deseamos

PRESENT S0 /* Define estado S0 */
PRESENT S1 /* Define estado S1 */

Ahora viene lo interesante:
ya que dependiendo del tipo de máquina que deseamos (Syncronica ó asyncronica)
usamos diferentes definiciones de las transiciones.
/* TABLA 1. Transiciones posibles en CUPL .
Statement Description
IF NEXT Transición condicional al siguiente estado
IF NEXT OUT Transición condicional al siguiente estado con salida Syncronica
NEXT Transición Incondicional al siguiente estado
NEXT OUT Transición Incondicional al siguiente estado con salida Asyncronica
OUT salida asyncronica Incondicional
IF OUT salida asyncronica condicional
usamos DEFAULT despues de un IF como sustituto de ELSE
DEFAULT NEXT Transición condicional al siguiente estado si el IF no se cumplio
DEFAULT OUT Transición condicional al siguiente estado con salida Asyncronica
DEFAULT NEXT OUT Transición condicional al siguiente estado con salida syncronica
*/
Un ejemplo aclara un poco

/* Uso Field para agrupar salidas o entradas a una palabra en este caso estados*/
/* me agrupa las salidas Q3,Q2,Q1,Q0 */

FIELD estados = [Q3, Q2, Q1, Q0] ;

/* Defino los estados por comodidad sigo el binario */
$DEFINE S0 'b' 0000 /* Rojo - - - */
$DEFINE S1 'b' 0001 /* Rojo Naranja - - */
$DEFINE S2 'b' 0010 /* - Naranja - - */
$DEFINE S3 'b' 0011 /* - Naranja Verde - */
$DEFINE S4 'b' 0100 /* - - Verde - */
$DEFINE S5 'b' 0101 /* - Naranja Verde - Ahora en reversa */
$DEFINE S6 'b' 0110 /* - Naranja - - Ahora en reversa*/
$DEFINE S7 'b' 0111 /* Rojo Naranja - - Ahora en reversa */
$DEFINE S8 'b' 1000 /* Rojo - - Cuenta Ahora en reversa */

/* y defino la máquina de estados por medio de las transiciones entre estados
/* máquina Asyncronica no entradas solo el reloj el cúal cambia los estados
// Nota: Solo el GAL22V10 tiene Reset asincronico (.AR), la 16V8 o la 20v8 solo
// puede ser usada con Reset Syncronico.
Nota: aunque no esta documentado, se puede usar // para hacer un comentario de linea
como lo hace c++.
Tambien aunque no esta documentado, WinCUPL no acepta acentos o guiones, ni
siquiera en los comentarios */
SEQUENCE estados
{
PRESENT S0
OUT Rojo ; // Forzo la Salida Rojo mientras este en el estado
IF Rst NEXT S1; // Entrada Rst= 1 lleva la transicion al estado S1
DEFAULT NEXT S0 ; // Entrada Rst = 0 me mantiene en el mismo estado
PRESENT S1
OUT Rojo, Naranja ; // Dos salidas, se tienen que separar con una coma
IF Rst NEXT S2; // Entrada Rst= 1 lleva la transicion al estado S1
DEFAULT NEXT S0 ; // Entrada Rst = 0 me lleva al estado de restauracion S0
PRESENT S2
OUT Naranja ; // No olviden el ;
IF Rst NEXT S3; // Si hay mas variables usar un operador logico ej.
DEFAULT NEXT S0 ; // Rst & Q3
PRESENT S3
OUT Naranja, Verde ; // y continuamos con los demas estados
IF Rst NEXT S4;
DEFAULT NEXT S0 ;
PRESENT S4
OUT Verde ; // observa que la salida solo depende del estado
IF Rst NEXT S5; // y no de las entradas.
DEFAULT NEXT S0 ;
PRESENT S5
OUT Naranja, Verde ; // Pero la transicion depende de las entradas y
IF Rst NEXT S6; // y tambien puede de los estados anteriores.
DEFAULT NEXT S0 ;
PRESENT S6
OUT Naranja ; /* Forzo la Salida Naranja */
IF Rst NEXT S7;
DEFAULT NEXT S0 ;
PRESENT S7
OUT Rojo, Naranja ; /* Forzo la Salidas Rojo y Naranja */
IF Rst NEXT S8;
DEFAULT NEXT S0 ;
PRESENT S8
OUT Rojo, Cuenta; /* Forzo la Salidas Rojo y Cuenta */
IF Rst NEXT S1;
DEFAULT NEXT S0 ;
}

Ahora veamos el otro caso, la declaracion de los estados es el mismo
pero las transiciones no lo son

SEQUENCE estados
{
PRESENT S0
// Entrada Rst= 1 lleva la transicion al estado S1
IF Rst NEXT S1 OUT Rojo ; // y la salida cambia con la transicion
// como cuando definimos entrada /salida
DEFAULT NEXT S0 ; // Entrada Rst = 0 me mantiene en el mismo estado
PRESENT S1
IF Rst NEXT S2 OUT Rojo, Naranja ;
DEFAULT NEXT S0 ; // Entrada Rst = 0 me lleva al estado de restauracion S0
PRESENT S2
IF Rst NEXT S3 OUT Naranja ; // Si hay mas variables usar un operador logico ej.
DEFAULT NEXT S0 ; // Rst & Q3
// y continuamos con los demas estados
PRESENT S3
IF Rst NEXT S4 OUT Naranja, Verde;
DEFAULT NEXT S0 ;
PRESENT S4
// observa que la salida depende del estado anterior y la(s) entrada(s)
IF Rst NEXT S5 OUT Verde ;; // que causan la transicion.
DEFAULT NEXT S0 ;
PRESENT S5
IF Rst NEXT S6 OUT Naranja, Verde ; // Tambien que se usa DEFAULT como si
DEFAULT NEXT S0 ; // fuera el "ELSE" del condicional "IF"
PRESENT S6
IF Rst NEXT S7 OUT Naranja ;
DEFAULT NEXT S0 ;
PRESENT S7
IF Rst NEXT S8 OUT Rojo, Naranja ;
DEFAULT NEXT S0 ;
PRESENT S8
IF Rst NEXT S1 OUT Rojo, Cuenta; // facil verdad?
DEFAULT NEXT S0 ;
}
Archivos Adjuntos
Tipo de Archivo: txt Acerca de maquinas de estado.txt (6,2 KB (Kilobytes), 0 visitas)
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Circuitos lógicos combinacionales y secuenciales

Compuertas, flips flops, registros, PLDs, codificadores, contadores, multiplexores, ...

Cerrar
Foros de Electrónica » Diseño digital » Circuitos lógicos combinacionales y secuenciales

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.