Clase 5 - VHDL de Sintesis
-
Upload
andrespalacios -
Category
Documents
-
view
220 -
download
2
description
Transcript of Clase 5 - VHDL de Sintesis
INTRODUCCIÓN A LOS HDLs
Fernando Iván Arévalo Ramírez
Ingeniería Electrónica
Departamento de Automática y Electrónica
HDL ESTÁNDAR: VHDL
La síntesis de un circuito a partir de VHDL consiste en
reducir el nivel de abstracción de la descripción de un circuito
hasta convertirlo en una definición puramente estructural.
Al final del proceso de síntesis se debe obtener un circuito
que funcionalmente se comporta igual que la descripción que
de él se ha hecho.
En un principio, cualquier descripción en VHDL es
sintetizable, no importa el nivel de abstracción que la
descripción pueda tener.
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
La complejidad del circuito resultante, y también incluso la posibilidad o no de realizar el circuito, va a depender sobre todo del nivel de abstracción inicial que la descripción tenga.
Las herramientas de síntesis se aproximan al circuito final partiendo de la descripción original, reduciendo el nivel de abstracción hasta llegar a un nivel de descripción estructural.
DESCRIPCIÓN COMPORTAMENTAL
DESCRIPCIÓN RTL
DESCRIPCIÓN ESTRUCTURAL
Ecuaciones Lógicas
Mapeo Tecnológico
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
VHDL PARA SÍNTESIS
Las características que se han presentado hasta el momento involucran todas las posibilidades que posee el VHDL como lenguaje pero para llevar un diseño descrito en VHDL a una implementación hardware sintetizable, se debe de tener en cuenta una serie de criterios y utilizar solo una parte de las características del lenguaje.
Asignación de señales: nuevo_estado <= S0;
Asignación de variables: variable := S0;
Comparaciones:
Igualdad, desigualdad: =, /=
Mayor que, menor que: >, <
Mayor o igual que, menor o igual que: >=, <=
Operadores lógicos: AND, OR, NAND, NOR, XOR, XNOR, NOT
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
VHDL PARA SÍNTESIS
Sentencia if: IF X = ’0’ THEN
nuevo_estado <= S0;
ELSE
nuevo_estado <= S2;
END IF;
Sentencias case, when else: CASE current_state IS
WHEN RESET => count_end <= ’0’;
...
WHEN RAMPA1 => count_clk_en <= NOT end_counter;
...
WHEN OTHERS => count_end <= ’-’;
up_down <= ’-’;
END CASE;
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
VHDL PARA SÍNTESIS
Sentencia for: FOR i IN 15 DOWNTO 0 LOOP
IF data_in(i) = ’0’ THEN
pb_temp := ’0’;
ELSE
pb_temp := ’1’;
END IF;
END LOOP;
Bloque process: clock: PROCESS
BEGIN
WAIT FOR 50 ns;
clk <= NOT clk;
END PROCESS;
Clock:
PROCESS(clk)
BEGIN
clk <= NOT clk;
END PROCESS;
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
DIFERENCIA ENTRE SEÑAL Y VARIABLE:
ENTITY ej_en IS
PORT(a,b : IN STD_LOGIC_VECTOR (3 DOWNTO 0);
y: OUT STD_LOGIC_VECTOR (4 DOWNTO 0) );
END ej_en;
ARCHITECTURE ej_arch OF ej_en IS
SIGNAL x: integer;
BEGIN
p1: PROCESS(a,b)
VARIABLE c: integer;
BEGIN
c:=a; -- Inmediato
x<=c+2;
c:=b; -- Inmediato
y<=c+2;
END PROCESS p1;
END ej_arch;
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
VHDL PARA SÍNTESIS
Cosas importantes para recordar:
Todo lo que se especifique dentro de un PROCESS es secuencial.
Diferencias señal-variable.
Señales de reloj: • clk='1' AND clk'EVENT --Para flanco de subida
• clk='0' AND clk'EVENT --Para flanco de bajada
Asignaciones únicas.
Evitar IFs anidados.
Utilizar CASE mejor que varios IFs.
Utilizar el estilo indicado para las máquinas de estado.
Minimizar el número de señales en la lista de sensibilidad.
Utilizar los tipos de VHDL que se encuentran definidos en el sintetizador: std_logic, std_logic_vector, std_ulogic,
std_ulogic_vector
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
VHDL PARA SÍNTESIS
Construcciones básicas:
El primer paso es ver si un circuito describe lógica combinacional o secuencial.
Un circuito describe lógica combinacional si ante una entrada dada, la salida es siempre la misma.
Un circuito describe lógica secuencial cuando la salida depende de la entrada actual y de las entradas anteriores, (la salida depende de la entrada y del estado del sistema).
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
VHDL PARA SÍNTESIS
Construcciones básicas:
Descripción de lógica combinacional: La idea básica es que si en la estructura del lenguaje no introducimos “elementos de memoria” entonces estaremos delante de una descripción combinacional.
La señal que esta siendo asignada no interviene en la asignación: – a<=b WHEN h='1' ELSE c; -- combinacional
– a<=b WHEN h='1' ELSE a; -- secuencial
– a<=b WHEN a='1' ELSE c; -- secuencial
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
VHDL PARA SÍNTESIS
Construcciones básicas:
Descripción de lógica combinacional: La idea básica es que si en la estructura del lenguaje no introducimos “elementos de memoria” entonces estaremos delante de una descripción combinacional.
Si la ejecución es concurrente se define lógica combinacional cuando:
-- Secuencial -- Combinacional
d<=b AND a; d<=b AND c;
a<=d OR e; a<=d OR e;
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
VHDL PARA SÍNTESIS
Construcciones básicas: Si la descripción es comportamental (PROCESS) se sintetiza
lógica combinacional cuando:
La lista sensible de un proceso incluye todas las señales implicadas en las asignaciones
-- Combinacional -- Secuencial PROCESS(b,c,e,d) PROCESS(b,c,e,d)
BEGIN BEGIN
IF b='1' THEN IF b='1' THEN
d<=c; d<=c; ELSE END IF;
d<=0; a<=d OR e;
END IF; END PROCESS;
a<=d OR e;
END PROCESS;
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
VHDL PARA SÍNTESIS
Construcciones básicas: Descripción de lógica secuencial: Un circuito es secuencial si su salida
puede depender del estado del sistema.
Descripción de latches: Hay varias posibilidades.
Cuando en un proceso no se consideran todas las posibles asignaciones se pone un LATCH en esa señal:
-- Biestable tipo D: PROCESS(d,en)
BEGIN
IF (en='1') THEN q<=d;
END IF;
END PROCESS;
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
VHDL PARA SÍNTESIS
Construcciones básicas:
Descripción de lógica secuencial: Un circuito es secuencial si su salida puede depender del estado del sistema.
Descripción de latches: Hay varias posibilidades.
Cuando no se especifican todas las señales en la lista sensible:
PROCESS(b)
BEGIN
a<=d OR b; -- d esta "latcheado" por b
END PROCESS;
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
VHDL PARA SÍNTESIS
Construcciones básicas:
Descripción de lógica secuencial: Un circuito es secuencial si su salida puede depender del estado del sistema.
Descripción de registros: Los registros son como los latches pero la entrada pasa a la salida cuando se produce un flanco de la señal de reloj:
PROCESS(clk,reset) PROCESS(clk)
BEGIN BEGIN
IF reset='1' THEN IF clk='1' THEN
q<='0'; q<=d;
ELSIF clk'EVENT AND clk='1' THEN END IF;
q<=d; END PROCESS;
END IF;
END PROCESS;
Solo cuando en
las lista sensible
se definen
varias señales
AREVALO 2015 Sistemas Programables
HDL ESTÁNDAR: VHDL
VHDL PARA SÍNTESIS Errores más comunes:
• La asignación a una misma variable en procesos diferentes.
• La asignación a una misma señal en instrucciones concurrentes diferentes o en PROCESS diferentes.
• Pensar que las señales se comportan como variables dentro de los procesos.
• Confusión en la diferencia del lugar de declaración de variables y señales.
• Al interfazar botones o pulsos de entrada con duración impredecible, a veces se olvida que el botón se mantiene pulsado durante algún tiempo que normalmente es mucho mayor que la frecuencia del reloj y por supuesto muchísimo mayor que los tiempos de respuesta de los circuitos(Tiempos de Propagación).
AREVALO 2015 Sistemas Programables