Práctica I Modelado y simulación de una máquina expendedora de refrescos



Documentos relacionados
INGENIERÍA DE COMPUTADORES III. Solución al examen de Septiembre 2013

CONTADORES. Definición. Diseño y analisis de un contador binario hacia arriba de 3 bits con flip-flops JK. Otros contadores típicos.

Tutorial I Diseño de una máquina de refrescos utilizando el WebPack de XILINX TM

CODIFICADORES CON PRIORIDAD. Grupo 2

1. Módulo de desarrollo Spartan 3 STARTER KIT con un FPGA xc3s200 ft Software de diseño XILINX ISE versión 10.1

INFORMÁTICA INDUSTRIAL. 3º INGENIERÍA TÉCNICA ELECTRÓNICA TRABAJO TUTORADO DE VHDL. Primer Cuatrimestre Curso 2005/2006.

PRÁCTICA: LENGUAJE VHDL

Electrónica Digital Departamento de Electrónica VHDL. Bioingeniería Facultad de Ingeniería - UNER

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Septiembre 2016

4. SUMADORES EN BINARIO PURO (I)

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2013, Segunda Semana

TEMA IV: SÍNTESIS HARDWARE

Introducción a la simulación con ModelSim.

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 4

INGENIERÍA DE COMPUTADORES 3. Solución al Trabajo Práctico - Junio de 2013

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS FACULTAD DE INGENIERIA ELECTRONICA ESCUELA DE ELECTRONICA

Diseño Lógico I Facultad de Ciencias Exactas y Tecnología UNT. LENGUAJES DE DESCRIPCIÓN DE HARDWARE

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 8

Tutorial de ModelSim PE Student Edition

VI. Especificación del Comportamiento

Tutorial de VHDL: Contadores y Simulación

VHDL. Carlos Andrés Luna Vázquez. Lección 5. Sentencias concurrentes

DISEÑO DE CIRCUITOS SECUENCIALES

DECODIFICADORES. Para cualquier código dado en las entradas solo se activa una de las N posibles salidas. 2 N

MAQUINA DE ESTADO FINITO (FSM) Autómata finito

VHDL y el método de diseño basado en descripción y síntesis. RESUMEN.

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2017, Primera Semana

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2015, Segunda Semana

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 3

UNIVERSIDAD CARLOS III DE MADRID. Ejercicios de VHDL. Circuitos Integrados y Microelectrónica. Luis Entrena. Celia López.

INGENIERÍA DE COMPUTADORES III. Solución al examen de Septiembre 2014

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 10

MICROPROCESADOR (CÓDIGO EN VHDL) TOMADO DEL LIBRO PARDO Y BOLUDA

INTRODUCCIÓN AL SOFTWARE ISE (Integrated Software Environment) DE XILINX

Recursos y Metodologías. Función. Programas

MAQUINA DE ESTADO FINITO (FSM) Autómata finito

3.1 Introducción a VHDL

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2014, Primera Semana

Simulación avanzada con TestBench en HDL. Ing. Andrés Miguel Airabella. Ing. Facundo Aguilera.

Laboratorio de Dispositivos Integrados Especializados / Diseño de Circuitos y Sistemas Electrónicos

Manual de referencia de la tarjeta BASYS 2

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 1

Un ejemplo teórico de trigger podría ser éste:

Practica No. 8 Introducción a las Máquinas de Estados. 1. En la figura 1 se muestra el comportamiento de un robot que evade obstáculos.

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 5

GESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS

Hardware Libre: Clasificación y desarrollo de hardware reconfigurable en entornos GNU/Linux

MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO

Documentación del CK-BaaB

18. Camino de datos y unidad de control

Ejercicios - Persistencia en Android: ficheros y SQLite

Sistemas Electrónicos Digitales Curso de adaptación al Grado

Arquitectura de Computadores. Práctica 1: Diseño Hardware de Procesadores. Práctica 1/1

Practica No. 5 Diseño de un Multiplicador

Universidad Autónoma de Baja California Facultad de Ingeniería Mexicali

Desde la pantalla de Ventas TPV Multilíneas (VE200001) se habilita un nuevo botón llamado Abono Parcial que realizará lo siguiente:

Practica No. 5 Diseño de un Multiplicador

Tema 16 ELECTRÓNICA DIGITAL LENGUAJES DE DESCRIPCIÓN DE LOS SISTEMAS DIGITALES (PARTE 1)

MANUAL DE USUARIO DEL MÓDULO TPV

INGENIERÍA DE COMPUTADORES III. Solución al examen de Junio 2012, Segunda Semana

Manual de operación Tausend Monitor

VHDL: Código Secuencial. Arquitectura del Computador 2017

MANUAL DE AYUDA. SAT Móvil (Movilidad del Servicio Técnico)

REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS

Software Criptográfico FNMT-RCM

ÍNDICE DISEÑO DE CONTADORES SÍNCRONOS JESÚS PIZARRO PELÁEZ

5.4. Manual de usuario

DE INGENIERÍA TÉCNICA INDUSTRIAL. ESPECIALIDAD EN ELECTRÓNICA INDUSTRIAL

VHDL. Lenguaje de descripción hardware Introducción e historia

CATÁLOGO CATÁLOGO CATÁLOGO CATÁLOGO CATÁLOGO

Árboles AVL. Laboratorio de Programación II

CICLO DE LOS PARTES DE TRABAJO EN EL PROGRAMA PARA LA GESTIÓN DEL MANTENIMIENTO

Manual para el uso del Correo Electrónico Institucional Via Webmail

AUTOMATIZACIÓN INDUSTRIAL

LABORATORIO Nº 1 Sistemas de Información asociados a los Formularios en Excel

Simulación con un banco de pruebas VHDL - test bench.

34.- Cómo Hacer Evaluación del Desempeño

PROCEDIMIENTOS DE TÍTULOS. Para solicitar los títulos al finalizar determinadas enseñanzas es preciso seguir un proceso en la aplicación Plumier XXI.

PS.Vending Almacén Pocket PC

INGENIERÍA DE COMPUTADORES 3. Solución al Trabajo Práctico - Septiembre de 2016

Extrapresupuestarios 8.6. LIQUIDACIÓN DE IVA.

Laboratorio 2: Mediciones Digitales

Diseño VHDL de módulos combinacionales básicos

COMO HACER LA FACTURACIÓN DE LAS CUOTAS

1. Representación de la información en los sistemas digitales

Manual de rol gestor de GAV para moodle 2.5

WINDOWS : COPIAS DE SEGURIDAD

Práctica 5. Curso

Simulín. Qué es Simulín? Características. Simulador de circuitos digitales para uso docente. v5.60 (Julio 2014) Función lógica (expresión algebraica)

MANUAL DE AYUDA MÓDULOS 2011 MACOS

Circuitos Electrónicos. Septiembre 2005/2006. Problema 1º parcial

I. T. en Informática de Sistemas. Facultad de Informática

CAPÍTULO 3 Servidor de Modelo de Usuario

INGENIERÍA DE COMPUTADORES III. Solución al examen de Septiembre 2012

INGENIERÍA DE COMPUTADORES 3. Solución al Trabajo Práctico - Junio de 2017

VHDL. Lenguaje de descripción hardware

by Tim Tran:

Tema 11: Sistemas combinacionales

UNIDAD EJECUTORA DE CONSERVACION VIAL MANUAL DEL USUARIO DEL SISTEMA INTEGRAL DE CONTROL DE PROYECTOS

Transcripción:

Práctica I Modelado y simulación de una máquina expendedora de refrescos

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática 2 1.1. Objetivos. En esta práctica vamos a modelar el comportamiento de un sistema descrito desde el nivel de transferencia de registros, a través de su diagrama ASM. 1.2. Ejemplo. En primer lugar vamos a realizar un ejemplo del proceso completo. Este ejemplo será el sistema de control de una máquina expendedora de refrescos. Dicha áquina contará con las siguientes características: Únicamente dispone de un tipo de refresco, con un precio total de 32 unidades. Puede admitir monedas por un valor mínimo de 1 unidad, a través del puerto moneda. Las monedas son detectadas cuando se produce un cambio en una señal, denominada moneda_ins. Tiene la capacidad de devolver cambio, con un valor máximo de almacenamiento de 256 unidades. Dispone de un señal, denominada botón, para solicitar la expulsión del refresco y la devolución del cambio. Solamente se expulsará el refresco y devolverá el cambio (cuando la señal refresco tome el valor 1, y se devolverá la cantidad almacenada en vuelta), cuando se halla introducido una cantidad superior o igual al precio del refresco. Se tratará de un sistema síncrono, por lo que existirá una señal de reloj llamada clk. El diagrama ASM corresopndiente a dicho sistema se muestra en la figura 1.1. En ella podemos apreciar tres bloques ASM (que se ejecutarán en ciclos de reloj diferentes) con las tres operaciones básicas que debe realizar el sistema: Almacenar la cantidad Obtener el valor de la vuelta En función de dicha vuelta, expulsar el refresco. Para incluir este diagrama en el software de XILINX, hay que seguir los pasos comentados en las prácticas iniciales, es decir Crear un nuevo proyecto Añadir una nueva fuente, la cual tendrá los siguientes puertos: Puerto de entrada clk Puerto de entrada botón Puerto de entrada moneda_ins Bus de entrada moneda, con un tamaño de 8 bits (correspondiente al máximo de 256 unidades) Puerto de salida refresco

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática 3 cantidad = cantidad + moneda Selección de refresco si A = cantidad - precio no A >= 0 si no expulsar refresco devolver A cantidad = 0 Figura 1.1.- Diagrama ASM correspondiente a la máquina expendedora de refrescos. Bus de salida vuelta, con un tamaño de 8 bits (correspondiente al máximo de 256 unidades). Crear un testbench para poder realizar las simulaciones de comprobación. Sintetizar el sistema. Implementar el sistema. El código VHDL del sistema se muestra a continuación (en el que se han eliminado los comentarios que introduce el software por defecto; únicamente se han dejado los comentarios aclaratorios del código, en rojo): library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity refresco is Port ( clk, boton, moneda_ins : in STD_LOGIC; moneda : in STD_LOGIC_VECTOR ( downto 0); refresco : out STD_LOGIC; vuelta : out STD_LOGIC_VECTOR ( downto 0)); end refresco; architecture Behavioral of refresco is type estado is (almacenamiento, seleccion, expulsion); signal ep, pe: estado; -- En esta parte declarativa se han definido los tres estados por los que va a pasar el sistema -- (correspondiente a las tres operaciones antes mencionadas). Estos estados han sido denominados: -- almacenamiento, selección y expulsión (salvo por los acentos) -- De la mismo forma, también han sido declaradas las señales del estado presente (ep) y próximo -- estado (pe). signal cantidad: std_logic_vector( downto 0):="00000000"; -- Ha sido necesario declarar un bus interno para almacenar las cantidades insertadas en la máquina,

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática 4 -- Dicho bus ha sido denominado cantidad. constant precio: std_logic_vector( downto 0):="00100000"; -- Por último, se ha incluido el precio del refresco como una constante con un valor igual a 32, es decir -- a 00100000 en binario. -- Un proceso es el elemento VHDL para introducir instrucciones secuenciales, y por lo tanto, -- poder describir algoritmos. Puede tener una lista de sensibilidad (lista de señales entre paréntesis -- separadas por, ), que al cambiar alguna de sus componentes provocará la ejecución del proceso. -- Tendrá su parte declarativa (local al proceso) y su cuerpo. -- -- Este proceso se ejecutará cada vez que cambie alguna de las siguientes señales: moneda_ins (inserción -- de monedas), boton (solicitud de refrescos) o ep (estado presente del sistema) -- En función del estado presente, deberá realizar las operaciones indicadas en cada estado. P1:process(moneda_ins, boton, ep) -- Parte declarativa -- Cuerpo case ep is when almacenamiento => -- A la hora de dar valores a las señales hay que diferenciar entre valores simples (que van entre -- comillas simples ) y buses (que van entre comillas dobles ) refresco <= '0'; vuelta <= "00000000"; cantidad <= cantidad+moneda; -- Habiendo cargado las librerías adecuadas podemos hacer uso de funciones aritméticas. -- Dicha librería es IEEE.STD_LOGIC_ARITH.all, la cual fue cargada al principio del código. if (boton = '1') then pe<=seleccion; when seleccion => vuelta <= cantidad-precio; -- Para evitar problemas con los números negativos, se ha optado por la comparación entre la -- cantidad almacenada y el precio, en lugar de la vuelta con el 0. if (cantidad >= precio) then pe <=expulsion; else pe <= almacenamiento; when expulsion => refresco <= '1'; cantidad <= "00000000"; pe <= almacenamiento; end case; -- Con este proceso, actualizaremos el estado cuando suba la señal de reloj (clk), por lo que -- únicamente deberá ejecutarse cuando cambie dicha señal. P2:process(clk) if (clk = '1' and clk'event) then ep <= pe; end Behavioral; Con respecto al testbench, podemos utilizar el siguiente: LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; USE ieee.numeric_std.all; ENTITY refresco_tb1_vhd IS

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática 5 END refresco_tb1_vhd; ARCHITECTURE behavior OF refresco_tb1_vhd IS -- Component Declaration for the Unit Under Test (UUT) COMPONENT refresco PORT( clk : IN std_logic; boton : IN std_logic; moneda_ins: IN std_logic; moneda : IN std_logic_vector( downto 0); refresco : OUT std_logic; vuelta : OUT std_logic_vector( downto 0) ); END COMPONENT; --Inputs SIGNAL clk : std_logic := '0'; SIGNAL boton, moneda_ins : std_logic := '0'; SIGNAL moneda : std_logic_vector( downto 0) := (others=>'0'); --Outputs SIGNAL refresco1 : std_logic:='0'; SIGNAL vuelta : std_logic_vector( downto 0):="00000000"; -- Declaración de la referencia temporal como una constante. constant periodo: time:=40 ns; BEGIN -- Instantiate the Unit Under Test (UUT) uut: refresco PORT MAP( clk => clk, boton => boton, moneda_ins => moneda_ins, moneda => moneda, refresco => refresco1, vuelta => vuelta ); -- Como las señales de reloj, inserción de monedas y expulsión de refrescos no tienen porque estar -- sincronizadas, se han obtenido de forma separada, con un asignamiento concurrente para el reloj y -- dos procesos. -- No obstante hemos utilizado la misma referencia temporal para las tres señales. clk <= not clk after periodo/2; tb : PROCESS BEGIN -- Para no complicar demasiado el testbench se ha supuesto que siempre se inserta el mismo tipo -- de moneda, correspondiente a cuatro unidades moneda <= "00000100"; moneda_ins <= not moneda_ins; wait for periodo; END PROCESS; tb1 : process boton <= '0'; wait for periodo*1.2; boton <= '1';

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática 6 END; wait for periodo; En la figura 1.2 podemos ver las formas de onda correspondiente a la simulación de comportamiento. En dicha figura, además de mostrar los puertos de entrada y salida del sistema, también se muestran la señal interna con la cantidad almacenada y el estado presente del sistema. Pordemos apreciar que el estado presente y la cantidad se actualizan cada vez que cambian algunas de las señales de la lista de sensibilidad del proceso correspondiente. También se puede apreciar el comportamiento corecto: únicamente la señal refresco tomará el valor 1 cuando el valor de la vuelta sea positivo. Figura 1.2.- Formas de onda correspondiente a la simulación de comportamiento. Una vez que la simulación de comportamiento ha resultado satisfactoria, pasamos a la realización del proceso de síntesis. Una vez realizado éste, podemos ver la estructura del sistema sintetizado eligiendo la opción View RTL schematic de la tarea de síntesis. Esta opción nos mostrará una caja negra (realmente el color es gris) con los puertos de entrada y salida, con la cual podemos movernos por la jerarquía con un doble click o con las opciones Push into selected Instance (para descender) y Pop to the calling Instance (para ascender) desplegadas con el botón derecho del ratón. El primer nivel inferior se muestra en la figura 1.3. En esta figura podemos apreciar los diferentes módulos que ha utilizado. El esquema no tiene porqué ser plano (es decir, sin ningún nivel adicional de jerarquía); de hecho, en este esquema existe más de un nivel de jerarquíacomo podréis apreciar. Únicamente se podrá descender en la jerarquía en los bloques sintetizados, y no en los elementos de la librería de XILINX.

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática Figura 1.3.- Esquemático RTL del modelo VHDL del sistema. Una vez realizada la implementación, podemos realizar una simulación post-rutado para verificar que el diseño funcionará correctamente. No obstante, puede que esta simulación no funcionará, seguramente debido a la inserción de los retrasos. Esta situación es la que se presenta en la figura 1.4. En este caso particular, el principal problema radica en que la cantidad almacenada no es correcta. Podemos ayudarnos del esquema RTL para tratar de solucionar el problema. (Aunque dicha solución no será realizada en este ejemplo). También se puede obtener el par controlador-procesador del diagrama ASM anterior y modelarlo con el software de XILINX.De esta forma, el par controlador-procesador se muestra en la figura 1.5. En ella podemos distinguir el procesador y el controaldor, así como las señales de estado (señal comp) y de control (señales ep(2), ep(2) + ep(0)). El modelo VHDL de esta representación se muestra a continuación: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity refresco is Port ( clk, boton, moneda_ins : in STD_LOGIC; moneda : in STD_LOGIC_VECTOR ( downto 0); refresco : out STD_LOGIC; vuelta : out STD_LOGIC_VECTOR ( downto 0));

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática 8 end refresco; Figura 1.4.- Formas de onda de la simulación post-rutado. architecture Behavioral1 of refresco is signal ep, pe: std_logic_vector(2 downto 0):="001"; signal cantidad, cantidad1, vuelta1:std_logic_vector( downto 0):="00000000"; signal comp: std_logic; constant precio: std_logic_vector( downto 0):="00100000"; -- Controlador pe(0) <= (ep(0) and not boton) or (ep(1) and not comp) or ep(2); pe(1) <= (ep(0) and boton); pe(2) <= ep(1) and comp; p1:process (clk) if (clk = 1 and clk event) then ep <= pe; -- -- procesador -- -- sumador- acumulador cantidad <= cantidad1 + moneda; p2:process (clk) if (clk = 1 and clk event) then if (ep(2) = 1 ) then cantidad1 <= "00000000"; elsif (ep(0) = 1 && moenda_ins event) then cantidad1 <= cantidad;

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática 9 CONTROLADOR botón clk D0 Q0 D1 Q1 D2 Q2 refresco PROCESADOR moneda + moneda_ins 0 0 1 G D Q precio A B precio + vuelta 0 1 0 a<b a=b a>b A<B A=B A>B comp Figura 1.5.- Esquema a nivel de componentes del diagrama ASM. -- restador vuelta1 <= cantidad - precio; -- comparador

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática 10 p3:process(vuelta1) if (cantidad >= precio) then comp <= 1 ; else comp <= 0 ; -- señales de salida vuelta <= vuelta1; refresco <= ep(2); end Behavioral1; En las figura 1.6 se muestran las formas de onda de las simulaciones de post-rutado, correspondiente al mismo testbench que se mostró anteriormente. Podemos observar que el comportamiento, en este caso, es correcto.. Figura 1.6.- Formas de onda de la simulación post-rutado.