250 likes | 637 Views
Síntesis Lógica con HDL. Especificación y Metodología en VHDL. ¿Qué es la Síntesis Lógica?. Obtención automática de una descripción arquitectural a partir de una funcional Utiliza un subset del lenguaje HDL (VHDL) => No es sintetizable cualquier descripción
E N D
Síntesis Lógica con HDL Especificación y Metodología en VHDL
¿Qué es la Síntesis Lógica? • Obtención automática de una descripción arquitectural a partir de una funcional • Utiliza un subset del lenguaje HDL (VHDL) => No es sintetizable cualquier descripción • El estilo de descripción influye notablemente. Las descripciones deben realizarse pensando en que se van a convertir en puertas reales • HDLs más comunes: VHDL y VERILOG • Es capaz de optimizar respecto del número de puertas y respecto de la temporización: • Relación área/tiempo => Trade-off • Síntesis = Traslación a puertas + Optimización
Estilos de Descripción (1/2) • En VHDL exiten únicamente 3 estilos definidos: • dataflow: Implica una estructura y un comportamiento • behavioral: No existe información estructural • structural: Se describen las interconexiones de los componentes (comportamiento implícito) • Se pueden combinar los estilos anteriores en una misma descripción • Estas descripciones hacen referencia a la forma de especificar el objeto de VHDL architecture
Estilo de Descripción (2/2) • Hoy en día, el estilo que mejor se adapta a las herramientas de Síntesis Lógica combina los 3 anteriores junto con las experiencia de los diseñadores y las recomendaciones de aquellas: • Realizar una partición jerárquica adecuada al diseño • Los bloques a sintetizar no deben ser excesivamente grandes • Aritmética entera • Descripciones explícitas y a nivel de transferencia entre registros (RTL)
architecture dataflow of ejemplo1 is begin C<=not(A xor B); end dataflow; Ejemplo: Data_flow architecture behavioral of ejemplo1 is begin process (A,B) begin if (A = B) then C <= ‘1’; else C <= ‘0’; end if; end process; end behavioral; Ejemplo: Behavioral Ejemplos (1/2)
architecture structural of ejemplo1 is signal I: bit; component XR2, INV,...; begin U0: XR2 port map (I,A,B); U1: INV port map (C,I); end structural; Se declaran señales internas y los componentes que se utilizan Los componentes han de estar definidos en una libreria structural Ejemplos (2/2) U0 A U1 C I XR2 INV B
Variables vs Señales (1/3) • Similitudes: • Ambas son objetos de VHDL cuyo valor puede ser cambiado • Ambas son sintetizadas como lógica combinacional y/o conexiones • En ambos casos existen reglas de ámbito y persistencia como en los lenguajes de programación • Diferencias: • Las variables se usan exclusivamente dentro de los procesos (process) y subprogramas (procedure y function) • Las variables son siempre asignadas a un valor en simulación, por lo que su procesamiento es más rápido • Siempre que sea posible, desde el punto de vista de la síntesis lógica, se han de usar variables
Variables vs Señales (2/3) • Recomendaciones: • Usar señales en operaciones de poca complejidad computacional • Usar variables para tipos y expresiones complejas • Asignar señales a variables, de forma temporal, siempre que sea posible • Usar señales para comunicar procesos • No usar NUNCA tipos reales (No son sintetizables) • Reservar el tipo INTEGER para operaciones que así lo impongan • Intentar usar STD_LOGIC,STD_ULOGIC, BIT • Las operaciones tienen una precedencia por defecto, salvo que se usen paréntesis • El uso de paréntesis también impacta en el resultado final de la síntesis
signal A,B,C,X,Y: mi_vector; begin process(A,B,C) begin C <= A; IGNORADA X <= C + 2; C <= B; PROCESADA Y <= C + 2; end process; signal A,B,X,Y:mi_vector; begin process(A,B) variable C: mi_vector; begin C:= A; INMEDIATO X <= C + 2; C:= B; INMEDIATO Y <= C + 2; end process; Variables vs Señales (3/3) X 2 X 2 + + A B B Y Y + + 2 2
z = a + b + c + d z = (a + b) + (c + d) a b c d a b c d SUMADOR SUMADOR SUMADOR SUMADOR SUMADOR SUMADOR z z Ejemplo
Sentencia concurrente: Signal S,A:std_logic; S <= A and B; Equivale a una forma abreviada del process Cada sentencia da lugar a un process Siempre señales Se evalua siempre que cambia A y/o B Process: Signal S,A:std_logic; Process (A) begin S <= A and B; end process; Variables o señales Se activa solo si en A se produce un evento Puede haber varios process en paralelo Procesos y Sentencias Concurrentes
Síntesis de Sentencias Concurrentes (1/3) • Se ejecutan de forma asíncrona, sin un orden prefijado • Siempre dentro de una architecture y entre señales • Se usan en descripciones de tipo structural, dataflow y/o RTL • Ejemplo: A <= B + C; D <= E + F; • Este ejemplo produciría el mismo Hw dentro y fuera de un process. Sólo si las señales B, C, E y F estan en la lista de sensibilidad daría los mismos resultados en simulación B A + C E + D F
Síntesis de Sentencias Concurrentes (2/3) • El resultado de la síntesis es siempre combinacional • Existen 2 formas de asignación de valores en sentencias concurrentes: • Condicional: Similar a las sentencias ifde los process • Selección: Similar a las sentencias case de los process • Ejemplo: Z<= A when (X>3) else B when (Y=5) else C; X > 3 Y =5 C 0 Multiplexores con orden de prioridad 0 Z B 1 A 1
Síntesis de Sentencias Concurrentes (3/3) • Se deben evitar la realimentación de una señal en la misma sentencia, pues se sintetizan bucles asíncronos A <= B + A; • El compilador advierte de esta situación! • La existencia de una asignación múltiple a una señal necesita de una función de resolución que indique como se ha de resolver C <= A; C <= B; B A + A A C B
Síntesis de Sentencias Secuenciales (VHDL, VERILOG) • Las más utilizadas IF Y CASE. Son más explícitas • IF codifica prioridades • CASE codifica tablas de verdad y máquinas de estados (FSM) • FOR y WHILE son menos utilizadas. Son mas implícitas • Operaciones directamente sintetizables: • Sumas, restas, incrementos y decrementos • Operaciones booleanas
IF en Lógica Combinacional VHDL: process (a,b,sel) begin if(sel = ‘1’) then c <= a; else c <= b; end if; end process; 1 a mux c b 0 sel
IF sin ELSE en Expresión Combinacional VHDL: process(a,sel) begin if(sel = ‘1’) then b <= a; end if; end process; b a D Q E QN sel
process begin wait until clk´’event and clk´=‘1’; if(sel = ‘1’) c <= a; else c <= b; end if; end process; 1 a mux D Q c b 0 CK sel clk IF en Lógica Secuencial VHDL:
process begin wait until clk’event and clk=‘1’; if(sel=‘1’) then c <= a; end if; end process; 0 mux D Q c a 1 CK sel clk IF sin ELSE en Lógica Secuencial VHDL:
Condiciones Asíncronas VHDL: process(clk,reset) begin if(reset=‘0’) then c <= ‘0’; elsif (clk’event and clk =‘1’) then if(sel=’1’) then c <= a; end if; end process; 0 mux D Q c a 1 sel CK clr clk reset
process(bcd) begin case(bcd) is when 0=>led=“1111110”; when 1=>led=“1100000”; when 2=>led=“1011011”; when 3=>led=“1110011”; when 4=>led=“1100101”; when 5=>led=“0110111”; when 6=>led=“0111111”; when 7=>led=“1100010”; when 8=>led=“1111111”; when 9=>led=“1110111”; when others=>led =“-------”; end case; end process; CASE en Combinacionales VHDL:
CASE en Secuenciales. FSM VHDL: process(clk,reset) begin if(reset=‘0’) then status<=0; elsif (clk’event and clk=‘1’) then case(status) is when 0=>if(c=‘1’) then status<=1; end if; when 1=>status<=2; when 2=>if(c=‘1’) then status<=1; else status<=0; end if; end case; end if; end process; c=0 0 c=1 1 c=0 c=X 2 c=1
Atributos y Restricciones • Se aplican desde la propia librería de componentes y desde las preferencias del usuario • fan-out, hold y setup marcados por la librería • Área, frecuencia máxima de trabajo, capacidades marcados por el usuario • Influyen en el trade-off del sintetizador • Los sintetizadores suelen incorporar una herramienta de análisis de tiempos
LIBRERÍA DE COMPONENTES DESCRIPCIÓN FUNCIONAL RESTRICCIONES SÍNTESIS INFORME DE CARACTERIZACIÓN DESCRIPCIÓN ESTRUCTURAL Flujo Síntesis Lógica
CONCLUSIONES • A la hora de especificar para síntesis no hay que perder de vista que el resultado será hardware • Restricciones en el lenguaje HDL • Restricciones físicas: retardos y área