Diseño Digital con VHDL
Enviado por trikitroll • 26 de Enero de 2021 • Trabajo • 1.155 Palabras (5 Páginas) • 65 Visitas
Instituto Tecnológico de Celaya
Departamento de Ingeniería Electrónica
Diseño Digital con VHDL
Timer genérico.[pic 1]
Objetivo: Desarrollar el diseño de un bloque hardware para controlar el tiempo de una acción a realizar(generar tiempos de espera), esto con 2 maneras de implementación según sea el caso, redisparable o no redisparable.
Diego Isaac Macias Rodríguez
23 de enero de 2020
1.-Introducción
En la vida cotidiana existen diferentes situaciones o problemas por lo cual el uso de la electrónica a facilitado estos problemas o ha ayudado a hacerlo más fácil y practico. Esto gracias a diferentes factores como son la automatización, la rapidez, los costos, la infraestructura entre otros más.
En este caso el uso de la automatización es demasiado útil para diferentes sistemas que necesiten control del tiempo y así llevar control al llevar a cabo 1 tarea. Por este motivo es necesario de diferentes bloques que puedan llevar el control del tiempo.
En este modulo se explica la elaboración de un bloque denominado “Timer”, que genera tiempos de espera para realizar una acción, ya sea redisparable o no redisparable.
El bloque únicamente consta de 2 entradas de 1bit, una de disparo (TRIGGER) esta accionara el bloque, otra para sincronizar el conteo (CLK) y su única salida de 1bit que durara el tiempo establecido dependiendo si es redisparable o no.
El tiempo se calcula mediante la siguiente formula:
[pic 2]
[pic 3]
[pic 4]
2.-Interface del módulo Timer.
[pic 5]
Figura 1 Puertos del timer.
En la Figura 1 se muestra la interface del módulo timer. Sus entradas son la de disparo (TRIGGER) y el reloj (CLK). La salida es Q, esta durara el tiempo preestablecido en la descripción del bloque con ayuda de la formula antes mencionada.
[pic 6]
Figura 2 Diagrama esquemático del timer.
En la figura 2 se muestra el contenido de nuestro timer, 1 contador que ira contando hasta la constante(N) que nosotros establezcamos para la duración de la salida Q y un comparador que nos dirá hasta cuando el contador llego a N. Mas adelante se menciona como calcular esa constante para la implementación de nuestro bloque.
3.-Código del módulo.
- Descripción comportamental del timer.
entity timer is
GENERIC (N: INTEGER RANGE 20 TO 500000000 := 100);
Port ( CLK, TRIGGER : in STD_LOGIC;
Q : out STD_LOGIC);
end timer;
architecture Behavioral of timer is
signal conteo : integer range 0 to N:=N;
begin
process(clk)
begin
if rising_edge(clk)
then if trigger = '1' and conteo=N
then conteo <= 0;
elsif conteo < N
then conteo <= conteo + 1;
end if;
end if;
end process;
q <= '1' when conteo < N else '0';
end Behavioral;
Al agregar o eliminar lo marcado en color verde en nuestra descripción, determina si nuestro timer es redisparable o no redisparable. Al no agregar la condición en color verde decimos que es un timer redisparable, ya que en cualquier momento que exista una señal de disparo (TRIGGER) el contador se pondrá en ‘0’ y comenzara a contar hasta ‘N’, esto aunque ya lleve previo un conteo. Pero con esta condición incluida, decimos que es un timer no redisparable y no únicamente cuando exista una señal ‘N’ comenzara a contar sino hasta que también el conteo sea igual a ‘N’, esto hace referencia a que aunque ya exista un conteo y volvamos a aplicar una señal de disparo, el contador no se pondrá en ‘0’ y volverá a contar.
4.- Ejemplo: 2 timers con diferente tiempo.
Se desarrollará un circuito que tiene una entrada (trigger) y dos salidas (Q1 y Q2). Al activar el trigger en Q1 ocurrirá un pulso con duración de un microsegundo y en Q2 otro pulso con duración de 3 microsegundos.
Para 1ms; [pic 7]
Para 2ms; [pic 8]
- Descripción estructural de los 2 timers.
entity MODULO_TIMER is
Port ( CLK,TRIGGER : in STD_LOGIC;
Q1, Q2 : out STD_LOGIC);
end MODULO_TIMER;
architecture ESTRUCTURAL of MODULO_TIMER is
begin
U1: entity work.timer generic map (50) port map (trigger=>trigger,clk=>clk,Q=>Q1);
...