Lab - 1sistemas Diitales 2

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 24

UNIVERSIDAD DE EL SALVADOR

FACULTAD DE INGENIERÍA Y ARQUITECTURA


ESCUELA DE INGENIERÍA ELÉCTRICA

Asignatura:
Sistemas Digitales II

Catedrático:
Ing. Salvador De Jesús German

Instructores:

Br. Walter Ernesto pineda callejas


Br. José Rigoberto peña Castañeda

Integrantes del grupo:


Carnet:
Edwin José Murcia Vargas mv18027
Samuel Eduardo Hernández Hernández hh18015

CICLO II - 2020
Introducción

En el siguiente trabajo daremos a conocer el planteamiento y funcionamiento de la máquina


expendedora de dulces con los objetivos de poner en práctica y conocer el nuevo software
como lo son liverwire, Boole tomando en cuenta el análisis y síntesis del circuito secuencial
síncrono.
La máquina expendedora de dulce de la que hablaremos en este trabajo se trata de una
máquina de dulces operada con monedas, el dulce de esta máquina cuesta 20 centavos y la
máquina acepta monedas de 5 y 10.Hay que devolver cambio si se depositan más de 20
centavos. No se pueden depositar más de 25 centavos en una sola compra, por tanto el
máximo cambio es una moneda de 5 centavos.
Por otro lado el software Livewire es un Laboratorio electrónico virtual que permite hacer
simulaciones que demuestran los principios de funcionamiento de los circuitos electrónicos
basados en leyes fundamentales como la ley de ohm y la leyes de Kirchosft. Permite
verificar el funcionamiento del circuito en base a varios parámetros establecidos con
anterioridad.
También se presentaran el funcionamiento del circuito mediante un video asi como
diagramas de estados códigos vhdl y su respectiva simulación con modelSim etc.
Enunciado.

Se tiene una máquina dispensadora de dulces, con entradas de control C Y D, que son las salidas del
detector de monedas, si se deposita una moneda de 5 centavos habrá una salida 1 en C, si se
deposita una moneda de diez centavos habrá una salida de 1 en D.

Los valores de C y D regresan de forma automática a cero en el siguiente pulso de reloj, se


supondrá que no se pueden insertar dos monedas al mismo tiempo, por lo que no se tendrá el estado
donde C y D sean 1 en el mismo periodo de reloj.

La máquina tiene dos salidas, E y V, el dulce se entregará si hay un 1 en la variable de salida E, y el


vuelto de cinco centavos se entregará si hay una salida 1 en V. La máquina sólo puede recibir 25
centavos como máximo y el costo del dulce es de 20 centavos.

Si se deposita una cantidad que sobrepase los 20 centavos, pero no sobrepase los 25 centavos, la
máquina hará entrega del dulce y del vuelto (cinco centavos), pero si se deposita la cantidad exacta
de 20 centavos, la máquina entregará solamente el dulce.

Solución:
 Diagrama funcional de la máquina dispensadora de dulces

E Unidad de
C entrega de
Detector de dulces
moneda Unidad de control
D
V Unidad de
entrega de
cambio

 Elaboramos un diagrama de estados que cumpla con los requerimientos planteados. Este
diagrama de estados se muestra a continuación.
Diagrama de Estados.

 En el diagrama anterior, los estados a, b, c y d de la unidad de control representan la


Cantidad total del dinero depositado para la compra. Cuando la moneda depositada
incrementa la cantidad a 20 centavos o 25 centavos, la unidad de control regresa al estado a
y entrega el dulce junto con el cambio en caso necesario.
El conjunto de estados es entonces:
Estado a: representa que no se ha depositado ningún dinero, estado inicial
Estado b: representa que se han depositado 5 centavos
Estado c: representa que se han depositado 10 centavos
Estado d: representa que se han depositado 15 centavos

 Como hay 4 estados necesitaremos 2 flip-flops JK que llamaremos flip-flop A y flipflop B


 Asignaremos los siguientes valores binarios a los estados de nuestra Unidad de control.
A B
Estado a 0 0
Estado b 0 1
Estado c 1 0
Estado d 1 1

 Teniendo en cuenta la tabla de excitación de un flip-flop JK que se muestra a continuación,


se puede elaborar la tabla de excitación de los flip-flops A y B a partir del diagrama de
estados.

Q J K
Q(t+1)
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0

Tabla de excitación de un flip-flop JK


X: condición de “no importa”

Est.Presente Entradas Estado siguiente Entradas de excitación


A B C D A B JA KA JB KB
0 0 0 0 0 0 0 X 0 X
0 0 0 1 1 0 1 X 0 X
0 0 1 0 0 1 0 X 1 X
0 0 1 1 X X X X X X
0 1 0 0 0 1 0 X X 0
0 1 0 1 1 1 1 X X 0
0 1 1 0 1 0 1 X X 1
0 1 1 1 X X X X X X
1 0 0 0 1 0 X 0 0 X
1 0 0 1 0 0 X 1 0 X
1 0 1 0 1 1 X 0 1 X
1 0 1 1 X X X X X X
1 1 0 0 1 1 X 0 X 0
1 1 0 1 0 0 X 1 X 1
1 1 1 0 0 0 X 1 X 1
1 1 1 1 X X X X X X

Tabla de excitación de los flip-flops A y B


En la tabla anterior no se incluyeron los valores de las salidas E y V en cada fila de la
misma por ser relativamente simple.
 De la tabla de excitación anterior se pueden elaborar los siguientes mapas para encontrar las
funciones simplificadas de las excitaciones de los flip-flops A y B.
Mapa K para JA Mapa K para KA

Mapa K para JB Mapa K para KB

 De acuerdo a la simplificación efectuada en los mapas anteriores, las funciones de


excitación de los dos flip-flops serán:

𝐽𝐴 = 𝐾𝐴 = 𝐷 + 𝐵𝐶
𝐽𝐵 = 𝐶
𝐾𝐵 = 𝐶 + 𝐴𝐷

 Los mapas de Karnaugh para las salidas E y V de la Unidad de control se pueden obtener
directamente del diagrama de estados como se muestra a continuación.

Mapa K para E Mapa K para V

𝐸 = 𝐴𝐷 + 𝐴𝐵𝐶
𝑉 = 𝐴𝐵𝐷

 Con estas funciones, se construye el circuito para la Unidad de Control.

E
D

C
V
 Creamos el código en VHDL para nuestro circuito anterior
 Simulando nuestro código VHDL en MODELSIM
 simulando nuestro circuito anterior en LiveWire.

 En este circuito lo que ha pasado es que se han depositado dos monedas de 10 centavos lo
cual hace la suma de 20 centavos por lo tanto se enciende la led de la salida E dando
referencia que se ha entregado el dulce.

D E
C

 En esta otra simulación del circuito se logra observar que los dos led de salida están
encendidos ya que se ha depositado 25 centavos lo cual en la salida E se entrega el dulce y
en la salida V se entrega 5 centavos de cambio.
D
C E

 Simulando el circuito en Boole.


 Por ejemplo:
En esta simulación de este circuito podemos observar el cambio de estado, como también
comprender que se han depositado 4 monedas de a 5 centavos lo cual suman 20 centavos en
esta simulación.
 En este otro caso se puede comprender que se han depositado 2 monedas de a 10 centavos
Preguntas de investigación
1. ¿Cómo simular máquinas de estado en VHDL?

Descripción funcional de una máquina de estado en vhdl


Una de las características de VHDL es que es posible describir circuitos digitales a diferentes
niveles de abstracción. Esto quiere decir que podemos conectar componentes para crear el
circuito que representa la máquina de estados, o que podemos simplemente describir su
funcionamiento usando el lenguaje. La principal ventaja de usar una descripción funcional es
que será la herramienta de síntesis que utilicemos la que a partir de esta descripción generará el
circuito digital resultante, ahorrando muchísimo tiempo al diseñador.

Un proceso o dos procesos para la máquina de estados

 Si utilizamos dos procesos, las salidas se asignarán desde el proceso


combinacional, por tanto tendrán glitches (oscilaciones) y el camino crítico del la
FSM se unirá al camino crítico del módulo al que este conectada la salida de la
máquina. Si necesitamos evitar esto, tendremos que registrar las salidas de la FSM.
 Si usamos una estructura con un solo proceso, las salidas estarán registradas, es
decir se almacenarán en registros, esto ocupará más lógica, pero las señales serán
estables y los caminos críticos estarán separados. Por contra, la salida llevará un
ciclo de reloj de retraso frente a una máquina descrita en dos procesos.

Como se puede ver, si registramos las salidas del proceso combinacional, el


comportamiento de ambas máquinas será exactamente igual. No obstante habrá
ocasiones en que el comportamiento de la máquina de estados de dos procesos será el
que busquemos. Será el diseñador el que tenga que decidir qué necesita en cada
momento.

Máquina de estados con dos procesos

A continuación está el código VHDL de la máquina de estados de Moore de la imagen


anterior descrita con dos procesos, junto al testbench para poder simularla.

El código es simple de entender, utilizamos un tipo enumerado para definir los estados
y luego existe un proceso combinacional que calcula las salidas y el próximo estado a
partir del valor de la entrada y del estado actual.

El segundo proceso, cada vez que hay un flanco de subida del reloj actualiza el registro
que contiene el estado con el valor que hemos calculado en el primer proceso.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity fsm is
port (
clk : in std_logic;
reset : in std_logic;
x : in std_logic;
z : out std_logic
);
end fsm;

architecture Behavioral of fsm is


type estados_t is (q0,q1,q2,q3,q4);
signal estado, estado_siguiente : estados_t;

begin

process(x,estado)
begin
z <= '0';
estado_siguiente <= estado;

case(estado) is
when q0 =>
z <= '0';
if(x='0') then estado_siguiente <= q1;
else estado_siguiente <= q2;
end if;
when q1 =>
z <= '0';
if(x='0') then estado_siguiente <= q1;
else estado_siguiente <= q3;
end if;
when q2 =>
z <= '0';
if(x='0') then estado_siguiente <= q4;
else estado_siguiente <= q2;
end if;
when q3 =>
z <= '1';
if(x='0') then estado_siguiente <= q4;
else estado_siguiente <= q2;
end if;
when q4 =>
z <= '1';
if(x='0') then estado_siguiente <= q1;
else estado_siguiente <= q3;
end if;
when others => null;
end case;
end process;

process (clk,reset) begin


if(reset='1') then
estado <= q0;
elsif rising_edge(clk) then
estado <= estado_siguiente;
end if;
end process;
end Behavioral;

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity test is
end test;

architecture funcional of test is

signal clk : std_logic:='0';


signal reset : std_logic;
signal x : std_logic;
signal z : std_logic;

begin

clk <= not(clk) after 10 ns;


reset <= '1', '0' after 10 ns;
x <= '0', '1' after 50 ns,'0' after 110 ns;

fsm0 : entity work.fsm(Behavioral) port map(clk,reset,x,z);

end architecture;

En la simulación podemos ver el comportamiento del circuito, donde el estado cambia


cuando hay un flanco de reloj, tal y como hemos descrito en el código. También se ve
como en cuanto entramos en el estado q3 o q4 la salida se pone a 1. En el ejemplo con
un solo proceso veremos cómo esto no es así y la salida no se pone a 1 hasta el ciclo
siguiente.
Máquina de estados con un proceso

La máquina de estados descrita con un solo proceso es muy similar, pero utiliza
únicamente un proceso para modelar el sistema. Os dejamos el código a continuación.
El test que usaremos es el mismo que en el ejemplo anterior.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity fsm is
port (
clk : in std_logic;
reset : in std_logic;
x : in std_logic;
z : out std_logic
);
end fsm;

architecture Behavioral of fsm is


type estados_t is (q0,q1,q2,q3,q4);
signal estado : estados_t;

begin

process (clk,reset) begin


if(reset='1') then
estado <= q0;
z <= '0';
elsif rising_edge(clk) then
case(estado) is
when q0 =>
z <= '0';
if(x='0') then estado <= q1;
else estado <= q2;
end if;
when q1 =>
z <= '0';
if(x='0') then estado <= q1;
else estado <= q3;
end if;
when q2 =>
z <= '0';
if(x='0') then estado <= q4;
else estado <= q2;
end if;
when q3 =>
z <= '1';
if(x='0') then estado <= q4;
else estado <= q2;
end if;
when q4 =>
z <= '1';
if(x='0') then estado <= q1;
else estado <= q3;
end if;
when others => null;
end case;
end if;
end process;

En la simulación podemos observar lo que comentábamos anteriormente. el


comportamiento es muy similar, pero al estar las salidas registradas, ya que se asignan
dentro de un proceso secuencial, estas se activan con un ciclo de retraso frente al
ejemplo con dos procesos.

2. ¿Cómo implementar un código VHDL en FPGA?


Adquisición de señal y promediado
Para realizar las pruebas en laboratorio, se ha utilizado una placa de circuito integrado desarrollada
en la empresa AD Telecom. Esta placa integra una FPGA de la familia Virtex-II, modelo
XC2V2000, fabricada por Xilinx, así como dos conversores A/D de 12 bits y una serie de puertos
de expansión; todo ello útil para la realización de las pruebas necesarias.
La adquisición de la señal se realiza mediante los conversores A/D. Éstos proporcionan a la FPGA
las muestras de la señal que hay a la entrada, que se almacenan en la memoria RAM4 interna que
tiene la FPGA, que permite un ancho de bus de direcciones de hasta 15 bits para un ancho de bus de
datos de 12 bits. Esto corresponde a una memoria interna de 128 kbytes (2 15 12 bits) y permite
almacenar 2 15 = 32768 muestras, que a una frecuencia de muestreo de 1 MHz corresponden a 32
ms de señal.
El promediado de señales consecutivas puede realizarse sin necesidad de consumir más memoria.
A medida que se adquieren señales, se suman a la que ya se tiene en memoria, con lo que al
finalizar la recepcion se tiene en memoria la suma de todas las señales recibidas. De este modo se
tiene la suma de todas las señales y se facilita el promediado. El único problema es el posible
desbordamiento de valores en la memoria. Esto se puede solucionar de diferentes maneras:

 Promediando un número reducido de señales, de modo que no de lugar a desbordamiento.


Ésta opción es poco deseable, ya que interesa minimizar el nivel de ruido, promediando un
número elevado de señales.
 Aumentando el número de bits de cada palabra de la memoria RAM. Esto puede no ser
posible sin el uso de una memoria externa, ya que la memoria interna de las FPGA es
típicamente muy reducida.
 Controlando internamente cuando se produce el desbordamiento y desechando los bits
menos significativos, que son los más ruidosos y los que menos información transportan.
Esto puede ser peligroso, ya que, en presencia de mucho ruido, es posible que la excursión
de la señal útil comprenda un número reducido de bits, y el resto de la señal sea ruido. En
este caso, al realizar los promediados, se observa cómo los bits más significativos tienen
siempre el valor 0.

PROCESADO POSTERIOR

 En la práctica, se adopta un compromiso entre las tres soluciones anteriores. Se usa tanta
memoria como sea posible, controlando que no ocurra desbordamiento, y realizando un
número adecuado de promediados, de modo que no se pierda información.
Para finalizar el proceso de promediado, hace falta dividir por el número total de señales que se han
sumado. Las operaciones con valores en coma flotante, especialmente las multiplicaciones y
divisiones, necesitan de un número muy elevado de recursos físicos cuando se compara con los
necesitados por las operaciones con valores enteros, recursos que son muy limitados en dispositivos
como las FPGA, por lo que se intenta evitar la realización de operaciones en coma flotante en la
medida de lo posible. Por este motivo se trabaja con la señal sin haberla dividido por este valor,
teniendo siempre en cuenta que se está trabajando con una señal temporal escalada por un cierto
factor. En caso que sea absolutamente imprescindible encontrar el valor promediado real, se trabaja
con un número de señales que sea potencia de 2, ya que para dividir un número por 2^n basta con
desplazar la representación binaria entera de dicho número n bits a la derecha, y no era necesario
implementar ninguna operación con valores en coma flotante. El resto de operaciones descritas en
el capítulo 4 consiste en diezmar la señal, interpolarla o usar la técnica de sobre muestro. Todas
estas operaciones son factibles de ser implementadas con relativa facilidad.
Procesado posterior
El resto del procesado que se aplica a la señal después de realizar el procesado a frecuencia
intermedia consiste en el análisis espectral. Para llevar a cabo estas técnicas es necesario
implementar diversos algoritmos, como por ejemplo el de la transformada rápida de Fourier o uno
para resolver sistemas de ecuaciones lineales para poder aplicar los estimadores espectrales
paramétricos. Estos y otros algoritmos se implementan con mayor facilidad usando lenguajes como
C que describiéndolos directamente en hardware, ya que una implementación de estas rutinas en
VHDL requiere trabajar con números en coma flotante y realizar un número elevado operaciones
aritméticas y lógicas con ellos, lo que supone el uso de una gran cantidad de lógica electrónica.
Una posible solución consiste en la utilización de los denominados IP Core, que consisten en
unidades lógicas reutilizables que realizan una función determinada. Estos núcleos suelen realizar
operaciones que tienen un elevado coste de diseño y desarrollo, y son propiedad de la empresa que
los ha desarrollado para licenciarlos. El precio de un IP core es muy elevado, pero ahorra el coste de
desarrollo por parte de la empresa que requiere de su uso. Son módulos que tienen una interfaz que
permite su integración en el resto de un diseño, y se tratan como cajas negras, ya que no se tiene
acceso al código de desarrollo, y no se posee información sobre ellos más allá de las que
proporciona el distribuidor. En el presente caso, se podrían usar IP cores que realizaran tareas como
la transformada de Fourier, por ejemplo. Si se tiene en cuenta que una vez adquiridas las muestras
de la señal a analizar ya no es crítico realizar estas operaciones en tiempo real, motivo por el que se
suelen usar las FPGA; otra posible solución sería aprovechar la interfaz de comunicación entre la
FPGA y la presencia del micro controlador en el sistema de control del equipo para trasladar el
control sobre el procesado de señal al micro controlador, en el que resulta mucho menos complicada
la implementación de los diversos algoritmos utilizados. Esta solución eliminaría la desventaja que
supondría la dependencia de los distribuidores de IP Cores, y resultaría más económica a largo
plazo.

Detalles de implementación
En la figura se representa un esquema de la integración del presente proyecto con los otros dos
proyectos finales de carrera que han sido desarrollados paralelamente, comentados en el capítulo 1.
La parte correspondiente a este proyecto es el cuadro azul con título Procesado de señal. Cada una
de las tres interfaces representadas se implementa como un módulo en la FPGA, y se describe en
lenguaje VHDL. La figura 9.2 esquematiza el funcionamiento de la adquisición de una señal
durante un experimento. Por una parte, la FPGA espera una señal por la interfaz de control que
indique en qué momento exacto se debe iniciar la captura. El equipo de control sincroniza todo el
sistema para que la captura se haga en el momento adecuado. Para realizar la captura se ha
desarrollado un módulo en VHDL que aprovecha la memoria RAM interna de la FPGA. Este
módulo permite adquirir diversas señales secuencialmente
Para realizar un promediado que reduzca la potencia de ruido. La fase de adquisición de la señal
proveniente del equipo RF es crítica, ya que debe hacerse en tiempo real y con una sincronización
perfecta, motivo por el cual se utiliza una FPGA, ya que el microprocesador del equipo de control
debe ejecutar a diversos procesos y no puede dedicarse exclusivamente a la captura. Cualquier
pequeño retardo introducido por el sistema operativo durante la adquisición de la señal invalidaría
el experimento. Una vez la FPGA ha recogido la señal del experimento, el procesado posterior no
tiene restricciones tan rígidas de tiempo, y puede hacerse tanto en la FPGA como en el procesador
del sistema de control. En un primer prototipo, el procesado se realiza en el procesador, por lo que
la FPGA transmite la señal recibida al sistema de control mediante la interfaz de datos que conecta
ambos subsistemas. Una vez se han transmitido los datos, el sistema de control procesa los datos y
presenta el resultado al usuario final. La posibilidad de implementar y realizar parte del procesado
en la FPGA aligeraría la carga del procesador en caso necesario.
Anexos:
Datasheet de integrados utilizados:

 74LS76
Conclusión:
En el código VHDL, a la hora de realizar o simular una máquina de estado en vhdl se necesitan más
procesos que en el típico código de circuitos de compuertas que en base a sus ecuaciones se van
especificando de forma sencilla en el código vhdl y para simular siempre de las misma forma se
puede ver un apartado en la simulación de model sim que describe los estados.
En este trabajo se aprendió a utilizar de forma básica una poderosa herramienta Livewire (LW). El
uso de simuladores como este programa facilita el diseño de circuitos ya que se pueden
observar los errores al momento y se pueden hacer pruebas sin correr el riesgo de dañar
algún componente.

En programa Boole se logró comprender mucho la secuencia de nuestro circuito es muy práctico y
fácil de usar.

También podría gustarte