0% encontró este documento útil (0 votos)
554 vistas12 páginas

Asignación 03

Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
554 vistas12 páginas

Asignación 03

Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

DISEÑO DE SISTEMA DE CONTROL DE ACCESO Y

COBRO PARA UN ESTACIONAMIENTO USANDO FPGA


Lorena A. Estévez1 y Esther D. Velásquez2

UNEXPO, Vicerrectorado Puerto Ordaz, Maestría en Ingeniería Electrónica,


(1) Email: [email protected]; (2) Email: [email protected].

RESUMEN

En el siguiente trabajo se presentará el diseño de un Sistema de Control para un


estacionamiento con capacidad para cien (100) vehículos. El diseño se realizará utilizando
una FPGA de la serie Spartan de Xilinx. El sistema permitirá el acceso de un máximo de 100
vehículos y tendrá control de pago a la salida, es decir sólo podrán salir aquellos vehículos
que paguen el estacionamiento.

INTRODUCCIÓN

Los Dispositivos Lógicos Programables permiten la implementación de una solución a


cualquier problema digital, con la sola modificación del código. Las FPGAs son un ejemplo de
este tipo de dispositivos, las cuales pueden contener hasta varios millones de compuertas
lógicas en su interior. Esta capacidad y versatilidad es empleada para infinitas aplicaciones.
En el siguiente trabajo se hará uso de una XC3S200 de la serie Spartan de Xilinx, en la cual
se implementará un sistema de control para un estacionamiento con una capacidad de 100
vehículos y pago por el servicio a la salida. Con esto se pondrá en práctica la lógica
necesaria, demostrando las capacidades que tienen estos dispositivos en la solución de
problemas reales.

MAQUINAS DE ESTADO FINITO CON VHDL

Las máquinas de estado finito constituyen una técnica especial de modelado para circuitos
de lógica secuencial. Como un modelo que puede ser de mucha utilidad en el diseño de
ciertos tipos de sistemas, particularmente aquellos cuyas acciones forman una secuencia
bien definida (controladores digitales, por ejemplo).

La figura 1 muestra un diagrama de bloques de lo que sería una máquina de estado de una
sola fase. Como se visualiza en la figura, la sección inferior contiene la lógica secuencial (flip-
flops), mientras que la sección superior contiene la lógica combinacional.
Entrada Salida
Lógica
Combinacional

Estado Próximo
Actual Estado

Lógica
Clock
Secuencial Reset

Figura 1. Diagrama de Máquina de Estado (Mealy y Moore).

Si la salida de la máquina depende no solamente del estado presente, sino que también de la
entrada actual, entonces se clasifica como máquina de Mealy. Por otra parte, si su salida
depende solo del estado actual, se clasifica como máquina de Moore.

La separación del circuito en dos secciones permite que el diseño sea dividido en dos partes
también. Desde la perspectiva de VHDL, está claro que la sección inferior, siendo secuencial,
requerirá de un process, mientras que la sección superior, siendo combinacional, no
necesitará de éste.

Las señales de reloj (clock) y reset, normalmente aparecen en la lista de sensibilidad del
process de la sección superior (a menos que el reset sea asíncrono o se use la instrucción
wait en vez de if para detectar el flanco del reloj). Cuando el reset es activado, el estado
actual será el estado inicial de la máquina. En otro caso, en el flanco apropiado del reloj los
flip-flops almacenarán el estado siguiente, por lo que será transferido a la salida de la sección
inferior.

Como una regla general, para el enfoque de FSM (máquinas de estado finito), es
aconsejable en aquellos sistemas donde los estados constituyen un listado bien definido,
realizar su numeración. Es decir, en la implementación típica de una FSM, lo primero que
veremos en su arquitectura, datos de tipo enumerados definidos por el usuario, los cuales
contienen la lista de los posibles estados del sistema.

En el diseño de la sección inferior (secuencial), las señales de reloj (clock) y reset están
presentes como entradas, la otra entrada es el estado actual, mientras que el estado futuro
es solo salida. El código 1 muestra una forma genérica para esta sección.

PROCESS (reset, clock)


BEGIN
IF (reset='1') THEN
pr_state <= state0;
ELSIF (clock'EVENT AND clock='1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
Código 1. Código Genérico para la Sección Secuencial de una FSM.
La implementación de la sección superior es netamente combinacional, así que su código no
necesita ser secuencial; código de tipo concurrente puede ser usado también. En el ejemplo
de código mostrado a continuación, se empleó código secuencial, con la instrucción case, la
cual juega el papel principal.

PROCESS (input, pr_state)


BEGIN
CASE pr_state IS
WHEN state0 =>
IF (input = ...) THEN
output <= <value>;
nx_state <= state1;
ELSE ...
END IF;
WHEN state1 =>
IF (input = ...) THEN
output <= <value>;
nx_state <= state2;
ELSE ...
END IF;
WHEN state2 =>
IF (input = ...) THEN
output <= <value>;
nx_state <= state2;
ELSE ...
END IF;
...
END CASE;
END PROCESS;
Código 2. Código Genérico para la Sección Combinacional de una FSM.

Como se puede observar, el código es sencillo, realiza principalmente dos operaciones, (a)
asigna el valor a la salida y (b) establece el siguiente estado. Todas las señales de entrada
están presentes en la lista de sensibilidad del process. Por último, se debe observar que no
existe asignación de señales a la transición de otra señal, así que ningún flip-flop interferirá
con otro.

FPGA SPARTAN XC3S200

La familia de FPGA Spartan™-3 está diseñada específicamente para satisfacer las


necesidades de alto volumen, y bajo coste para aplicaciones de electrónica de consumo. La
familia de ocho miembros ofrece densidades que van de 50.000 a
cinco millones de compuertas, según muestra la tabla 1.

Tabla 1. Atributos de la Familia SpartanTM-3.


Arquitectura

La arquitectura de la familia Spartan-3 se compone básicamente de cinco elementos


funcionales programables.

 Bloques Lógicos Configurables (CLB) contienen las Tablas Look-Up (LUT) basadas
en RAM para poner en práctica elementos de la lógica y de almacenamiento que
pueden ser utilizado como flip-flop o latches.
 Bloques de Entrada / Salida (IOBs) para controlar el flujo de datos entre los pines I /
O y la lógica interna del dispositivo.
 Bloque de memoria RAM proporciona almacenamiento de datos en forma de bloques
de doble puerto de 18 Kbit.
 Bloques multiplicadores aceptan dos números binarios de 18 bits como entradas y
calculan el producto.
 Bloques manejadores de Reloj Digita (DCM) proporcionan auto-calibración,
soluciones completamente digitales en la distribución, retardando, multiplicando,
dividiendo y desplazando de fase las señales del reloj.

Figura 2. Arquitectura de FPGA de la familia Spartan-3.

Capacidad I/O

En la tabla 2, se pueden observar las capacidades en cuanto Entradas/Salidas de las FPGAs


Spartan-3.
Tabla 2. Entradas/Salidas disponibles en FPGA de la familia Spartan-3

XILINX ISE

Es un software producido por Xilinx para la síntesis y análisis de diseños HDL, el cual permite
al desarrollador sintetizar (compilar), realizar análisis de sincronización, examinar diagramas
RTL, simular las reacciones de los diseños ante diversos estímulos y configurar los
dispositivos con el programador.

CONTROL DE ESTACIONAMIENTO Y COBRO A LA SALIDA

La aplicación consiste en controlar un estacionamiento que posee capacidad para cien


vehículos, y que cobra Bs. 2 por el servicio. Dicho pago es efectuado cuando el vehículo se
dispone a salir del estacionamiento, a través de una máquina que traga monedas y billetes.
Las monedas que acepta la máquina son de denominación Bs. 0,5 y Bs. 1, y billetes de Bs.
2.

Para controlar la entrada de vehículos existen dos sensores, el primero se ubica antes de la
barra de entrada y el segundo luego de dicha barra, al llegar un carro, el sensor manda un
pulso, se verifica si hay disponibilidad de puestos (contador de carros < 100), en caso de ser
positivo se abre la barra. Cuando el vehículo pasa, el sensor 2 detecta que ha ingresado y
baja la barra de entrada.

Para controlar la salida de vehículos existen también dos sensores, el primero posicionado
antes de la barra de salida y el segundo después de dicha barra. Cuando un vehículo desea
salir, éste se posicionará delante de la barra donde está ubicada la máquina de cobro,
mientras el vehículo esté en esa posición, la señal del sensor 1 activará la máquina de cobro.
Cuando el usuario haya introducido el dinero correspondiente para acumular Bs. 2, se
levantará la barra de salida y luego el sensor 2 detectará cuando el carro haya salido y se
encargará de bajar la barra de salida.
Figura 3. Sistema de Control de Estacionamiento.

DISEÑO E IMPLEMENTACIÓN DEL CÓDIGO

Entidad

El sistema de control de estacionamiento fue implementado en una sola entidad, tal y como
muestra el código 3. Como se visualiza en la figura 3, las entradas de dicha entidad estarán
representadas por las señales que se especifican en la tabla XX.

ENTITY Parking IS
PORT ( mon1, mon2, clk, rst, CE, CE1, CS, CS1: IN STD_LOGIC;
salida, entrada: OUT STD_LOGIC;
COUNT_OUT : OUT STD_LOGIC_VECTOR (7 downto 0);
LuzRoja : OUT STD_LOGIC;
LuzVerde : OUT STD_LOGIC );
END Parking;
Código 3. Entidad Parking.

Señal en el Sistema Característica Señal en el Código


Entradas
Envía un pulso para indicar que hay un carro
Sensor 1 Entrada CE
en la entrada
Envía un pulso para indicar que ha ingresado
Sensor 2 Entrada CE1
el carro
Envía un pulso para indicar que hay un carro
Sensor 1 Salida CS
a la salida y activa la máquina de cobro
Envía un pulso indicando que el vehículo ha
Sensor 2 Salida CS1
salido y se debe bajar la barra
mon1
Maquina Cobradora Envía 2 bits, (ver tópico Máquina de cobro)
mon2
Reloj del Sistema Sincroniza los circuitos de conteo y FSM clk
Reset para máquina
Resetea la máquina de cobro rst
de cobro
Salidas
Led Verde Indica que hay disponibilidad de puestos LuzVerde
Led Rojo Indica que no hay disponibilidad de puestos LuzRoja
Activación de la barra que permite entrar a
Barra de Entrada entrada
los vehículos
Activación de la barra que permite salir a los
Barra de Salida salida
vehículos
Conteo de carros Se puede conectar a un decodificador para
COUNT_OUT
estacionados ser mostrado en un display
Tabla 3. Detalle de Entradas y Salida de la Entidad y el Sistema Real.

Arquitectura

En el código 4, se declaran las señales internas que utiliza el programa para funcionar. Cabe
destacar las que pertenecen a la FSM, los estados declarados como A, B, C, … y H, así
como los estados actual (pr_state) y futuro (nx_state). La señal de conteo interna (count_int),
el resto de las señales en su mayoría pertenecen a circuitos de tipo RS para activación y
desactivación de las señales de entrada y salida de la entidad.

ARCHITECTURE state_machine OF Parking IS


TYPE state IS (A, B, C, D, E, F, G, H);
SIGNAL pr_state, nx_state: state;
SIGNAL count_int : STD_LOGIC_VECTOR(7 downto 0) := "00000000";
SIGNAL Q, Qn : STD_LOGIC;
SIGNAL clk_en : STD_LOGIC;
SIGNAL BarraE, BarraEn : STD_LOGIC;
SIGNAL Cobro, CobroN : STD_LOGIC;
SIGNAL BarraS, BarraSn, salida_aux : STD_LOGIC;
BEGIN
Código 4. Declaración de la Arquitectura y Señales Internas.

Así mismo, se proceden a explicar los códigos de los seis procesos que corren al unísono
para controlar el estacionamiento.

Proceso: Control de la Entrada

Este proceso es el que se encarga de activar la salida entrada, que levanta la barra para que
un vehículo ingrese al estacionamiento. Es básicamente un circuito biestable, cuyas entradas
R y S son las entradas de los sensores de entrada CE1 y CE respectivamente. La activación
de dicha barra viene condicionada por la existencia de puestos disponibles (count_int <
"01100100") .

process(CE, CE1, BarraE, BarraEn, count_int)


begin
BarraE <= '0';
entrada <= BarraE;
if (count_int < "01100100") then
if(CE = '0' and CE1 = '0') then
BarraE <= BarraE; BarraEn <= BarraEn;
elsif (CE = '0' and CE1 = '1') then
BarraE <= '0'; BarraEn <= '1';
elsif (CE = '1' and CE1 = '0') then
BarraE <= '1'; BarraEn <= '0';
end if;
end if;
end process;
Código 5. Proceso que Controla la Barra de Entrada.

Proceso: Conteo de Puestos y Luces de Disponibilidad

El código 6 representa el proceso que se lleva a cabo para contar los puestos y activar las
luces roja y verde que indican la disponibilidad del servicio. Se diseñó un contador
ascendente/descendente, la señal Q, define si el conteo es ascendente (1) o descendente
(0). El conteo posee topes, ya que no se ingresarán más de 100 vehículos y no saldrán más
de los vehículos que estén estacionados internamente.

Ya que el contador es un dispositivo síncrono, y éste debe contar un vehículo a la entrada,


existe un habilitador del reloj (clk_en) para que éste cuente una vez al querer ingresar un
vehículo y cuando vaya a salir un vehículo.

process (clk, CE, CS, Q, Qn, count_int)


begin
if (CE = '0' and CS = '0') then
Q <= Q; Qn <= Qn;
elsif (CE = '0' and CS = '1') then
Q <= '0'; Qn <= '1';
elsif (CE = '1' and CS = '0') then
Q <= '1'; Qn <= '0';
else Q <= '-'; Qn <= '-';
-- Se usa '-' para el caso no válido
end if;

clk_en <= CE or CS;

if (rising_edge(clk) and clk_en='1') then


if (Q)='1' then
if (count_int < "01100100") then
count_int <= count_int + 1;
--entrada <='1';
end if;
else
if (count_int > "00000000") then
count_int <= count_int - 1;
end if;
end if;
end if;

if (count_int < "01100100") then


LuzVerde <= '1';
LuzRoja <= '0';
else
LuzVerde <= '0';
LuzRoja <= '1';
end if;
end process;
COUNT_OUT <= count_int;
Código 6. Proceso de Conteo de Puestos y Luces de Disponibilidad.

Las salidas LuzVerde y LuzRoja son definidas en éste código de manera muy simple, si el
contador es menor a cien hay disponibilidad, por lo tanto la luz verde estará encendida (1) y
la luz roja apagada (0), si esto resultase falso, se visualizará el caso contrario.

Procesos: Máquina de Cobro (Combinacional y Secuencial)

Para la realización del sistema de cobro a la salida del estacionamiento, se realizó una
Máquina de Estado Finita (FSM). El costo del estacionamiento es de 2 Bs., recibiendo la
máquina monedas de 0,5 Bs. y 1 Bs. y billetes de 2 Bs., esta máquina no da vuelto pero
acumula el dinero sobrante. La máquina transmite dos bits a la FPGA, que ingresan como las
señales de entrada mon1 y mon2. A continuación se muestra la tabla de equivalencia en Bs.
de los valores de las entradas mon1 y mon2.

Luego se visualiza la tabla XX donde se definen los diferentes Estados, su valor en Bs y la


salida que generan. En la figura xx el Diagrama de Estados de la Máquina.

Mon1 0 0 1 1
Mon2 0 1 0 1
Bs. 0 0,5 1 2
Tabla 4. Equivalencia entre las señales mon1, mon2 y las Unidades de Dinero.

Estado Bs. Salida


A 0 0
B 0,5 0
C 1 0
D 2 1
E 1,5 0
F 0,5 1
G 1 1
H 1,5 1
Tabla 5. Estados, Equivalencia en Bs y Salida de la FSM de la Máquina de Cobro.

mon1 = 1
mon2 = 1

mon1 = 1 mon1 = 1
mon1 = 0 mon1 = 0 mon2 = 0 mon1 = 0 mon2 = 0 mon1 = 0
mon2 = 1 mon2 = 1 mon2 = 1 mon2 = 1

A=0 B = 0,5 C=1 E = 1,5 D=2


mon1 = 0 mon1 = 0 mon1 = 0 mon1 = 0
mon2 = 0 Salida = mon2 = 0 Salida = mon2 = 0 Salida = mon2 = 0 Salida = Salida =
0 0 0 0 1
mon1 = 0
mon2 = 1 mon1 = 0 mon1 = 1 mon1 = 0 mon1 = 1 mon1 = 0 mon1 = 1
mon2 = 0 mon2 = 1 mon2 = 0 mon2 = 1 mon2 = 0 mon2 = 1
mon1 = 0 mon1 = 0 mon1 = 0
mon1 = 1 F = 0,5 mon2 = 1 G = 1 mon2 = 1 H = 1,5 mon2 = 1
mon1 = 1 mon1 = 1 mon1 = 1
mon2 = 0 mon2 = 1 Salida = mon2 = 1 Salida = mon2 = 1 Salida =
1 1 1
mon1 = 1 mon1 = 1
mon2 = 0 mon2 = 0

mon1 = 1
mon2 = 0
Figura 4. Diagrama de Estados FSM de la Máquina de Cobro del Estacionamiento.

En el código 7 se muestra la sección de lógica secuencial de la FSM, en éste proceso se


utilizó la instrucción wait until, con lo que el proceso no lleva lista de sensibilidad. Se visualiza
el reset asíncrono (rst) y las señales para los estados actual y futuro.

PROCESS
BEGIN
IF (rst='1') THEN
pr_state <= A;
END IF;
WAIT UNTIL clk='1';
IF (Cobro='1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
Código 7. Proceso Secuencial de la FSM para la Máquina de Cobro.

PROCESS (pr_state, mon1, mon2)


BEGIN
salida_aux<='0';
CASE pr_state IS
WHEN A =>
salida_aux<='0';
if (mon1='0' and mon2='0') then
nx_state <= A;
elsif (mon1='0' and mon2='1') then
nx_state <= B;
elsif (mon1='1' and mon2='0') then
nx_state <= C;
elsif (mon1='1' and mon2='1') then
nx_state <= D;
end if;
WHEN B =>
salida_aux<='0';
if (mon1='0' and mon2='0') then
nx_state <= B;
elsif (mon1='0' and mon2='1') then
nx_state <= C;
elsif (mon1='1' and mon2='0') then
nx_state <= E;
elsif (mon1='1' and mon2='1') then
nx_state <= F;
end if;
WHEN C =>
salida_aux<='0';
if (mon1='0' and mon2='0') then
nx_state <= C;
elsif (mon1='0' and mon2='1') then
nx_state <= E;
elsif (mon1='1' and mon2='0') then
nx_state <= D;
elsif (mon1='1' and mon2='1') then
nx_state <= G;
end if;
WHEN D =>
salida_aux <='1';
nx_state <= A;
WHEN E =>
salida_aux<='0';
if (mon1='0' and mon2='0') then
nx_state <= E;
elsif (mon1='0' and mon2='1') then
nx_state <= D;
elsif (mon1='1' and mon2='0') then
nx_state <= F;
elsif (mon1='1' and mon2='1') then
nx_state <= H;
end if;
WHEN F =>
salida_aux<='1';
if (mon1='0' and mon2='0') then
nx_state <= B;
elsif (mon1='0' and mon2='1') then
nx_state <= C;
elsif (mon1='1' and mon2='0') then
nx_state <= E;
elsif (mon1='1' and mon2='1') then
nx_state <= F;
end if;
WHEN G =>
salida_aux<='1';
if (mon1='0' and mon2='0') then
nx_state <= C;
elsif (mon1='0' and mon2='1') then
nx_state <= E;
elsif (mon1='1' and mon2='0') then
nx_state <= D;
elsif (mon1='1' and mon2='1') then
nx_state <= G;
end if;
WHEN H =>
salida_aux<='1';
if (mon1='0' and mon2='0') then
nx_state <= E;
elsif (mon1='0' and mon2='1') then
nx_state <= D;
elsif (mon1='1' and mon2='0') then
nx_state <= F;
elsif (mon1='1' and mon2='1') then
nx_state <= H;
end if;
END CASE;
END PROCESS;
Código 8. Proceso de Lógica Combinacional de la FSM para la Máquina de Cobro.

El código 8 corresponde al proceso de lógica combinacional de la FSM, siendo el proceso


más largo del programa, no es el más complicado, sin embargo en él hay embebido un
análisis profundo del funcionamiento de las etapas por las cuales debe pasar el proceso de
cobro y que depende del valor de las entradas y de la salida.
Para analizar los casos que representan a los estados de la FSM basta con visualizar el
diagrama de la figura 4, allí se especifica la trayectoria que toma la máquina según sus
entradas y salida para cada uno de los ocho estados.

CONCLUSIONES

Es posible implementar un modulador PWM basándose en Máquinas de Estado Finito.

Con el uso de FPGAs y utilizando el Lenguaje de Descripción de Hardware VHDL es se


pueden implementar máquinas de estado finito FSM.

El software ISE de XILINX permite realizar la programación y la simulación de diseños con


FPGAs.

La FPGA XC3S200 de la familia Spartan de XILINX es una solución de bajo costo y alto
rendimiento para el desarrollo de diseños electrónicos digitales.

BIBLIOGRAFÍA

Definición de Máquina de Mealy. [en línea]. Disponible en


http://es.wikipedia.org/wiki/M%C3%A1quina_de_Mealy , [Consulta 14/02/2011]

Definición de Máquina de Moore. [en línea]. Disponible en


http://es.wikipedia.org/wiki/M%C3%A1quina_de_Moore , [Consulta 14/02/2011]

Xilinx ISE. [en línea]. Disponible en: http://en.wikipedia.org/wiki/Xilinx_ISE , [Consulta


16/02/2011]

Lborra, Andrés. Unidad 8. Diseño basado en Máquinas de Estado Finitas (F.S.M.), Mayo
2003

XILINX. [en línea],Disponible en http://www.xilinx.com, [Consulta 14/02/11]

También podría gustarte