Lab - 1sistemas Diitales 2
Lab - 1sistemas Diitales 2
Lab - 1sistemas Diitales 2
Asignatura:
Sistemas Digitales II
Catedrático:
Ing. Salvador De Jesús German
Instructores:
CICLO II - 2020
Introducción
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.
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.
Q J K
Q(t+1)
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0
𝐽𝐴 = 𝐾𝐴 = 𝐷 + 𝐵𝐶
𝐽𝐵 = 𝐶
𝐾𝐵 = 𝐶 + 𝐴𝐷
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.
𝐸 = 𝐴𝐷 + 𝐴𝐵𝐶
𝑉 = 𝐴𝐵𝐷
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
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;
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;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity test is
end test;
begin
end architecture;
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;
begin
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.