Está en la página 1de 26

Escuela Superior Politcnica del Litoral

Faculta de Ingeniera en Electricidad y Computacin.

Tarea # 1 SINTESIS VHDL


INGENIERO EN ELECTRICIDAD Y ELECTRONICA ESPECIALIZADO EN AUTOMATIZACION INDUSTRIAL Presentado por:

Carlos Rivera Jara. Diego Sierra.

SINTESIS VHDL
Sntesis es el proceso de transformacin del modelo de un diseo, generalmente descrito en HDL, de un nivel de abstraccin a otro inferior.

Objetivo de la sntesis:

El diseador pueda describir circuitos digitales con alto nivel de abstraccin. El modelo obtenido pueda ser manejado por las herramientas de implementacin hardware (FPGAs y ASICs).

La sntesis opera sobre 3 tipos de informacin:

El modelo del circuito. Conjunto de restricciones del circuito. Conjunto de componentes a utilizar para construir el circuito. Los sintetizadores comerciales traducen el nivel RTL al nivel lgico. Alguno hace la traduccin al nivel fsico. No todas las construcciones de VHDL pueden emplearse en sntesis. Ejemplo: A <= not(B) after 11 ns; if (ce=1 and (clkevent and clk=1)...; Slo se emplea un subconjunto de VHDL en la sntesis.

Restricciones sintcticas y semnticas. Se usan para asegurar una eficacia mnima en el proceso de sntesis. Para identificar hardware asociado a un determinado comportamiento hay que aadir semntica hardware a la descripcin.

En general cada herramienta de sntesis tiene sus propias restricciones sintcticas lo que dificulta la reutilizacin del cdigo

SUBCONJUNTO VHDL PARA SNTESIS RTL.


La norma IEEE Std 1076.6-1999 define el estndar para la sntesis RTL de VHDL. El objetivo de este estndar es definir la sintaxis y semntica para la sntesis RTL de VHDL. Se define un subconjunto de VHDL que deben soportar todas las herramientas de sntesis VHDL. Esto permite a los diseadores realizar diseos cuyo comportamiento ser independiente del sintetizador empleado. Las herramientas compatibles pueden tener caractersticas superiores a las impuestas por la norma.

DEFINICIONES DE 1076.3

Modelo compatible. Para que un modelo sea compatible con la norma IEEE
1076.6 ste debe: Utilizar nicamente las construcciones soportadas o ignoradas por la norma IEEE 1076.6. Ajustarse a la semntica indicada por la norma.

Herramienta compatible. Para que un sintetizador sea compatible con la


norma debe: Aceptar todos los modelos compatibles con la norma segn lo expuesto en el punto anterior. Aceptar los pragmas (directivas de sntesis) definidas por la norma. Ajustarse a los criterios de verificacin que define la norma. Un sintetizador no tiene por qu interpretar todas las construcciones VHDL que acepta, sino slo las que impone la norma IEEE 1076.6.

Las construcciones VHDL se clasifican en:


Soportadas. El sintetizador debe interpretar la construccin, es decir, mapearla en hardware. Ignoradas. El sintetizador debe ignorar la construccin. El procesamiento de esta construccin no debe provocar un error de sntesis, si bien la simulacin del circuito simulado puede diferir de la del cdigo VHDL original. La herramienta de

sntesis puede informar al usuario de que esa construccin no est definida por el estndar. No soportadas. El sintetizador no soporta la construccin. Se supone que estas construcciones no deben aparecer en el cdigo VHDL por lo que el modo de fallo est indefinido.

RESTRICCIONES.
Valores de inicializacin: no se aceptan los asignados a objetos en la definicin. El modelo debe poseer un mecanismo de inicializacin hardware externo (seal de reset). constant tpd: TIME := 15 ns; signal A,B: std_logic:=0; A <= not (B) after tpd; .. COLOR ROJO SIGNIFICA INCORRECTO

TIPOS DE DATOS.
Escalares. Enteros (si se aceptan) Reales (no se aceptan, se ignoran) Enumerados (si se aceptan) Fsicos (no se aceptan, se ignoran)

Compuestos Vectores (si se aceptan) Registro (si se aceptan) Ficheros (no se aceptan) Acceso (no se aceptan) Adems debe soportar los tipos definidos por el usuario y sus tipos derivados.

TIPOS ESCALARES: ENTEROS.


Los tipos INTEGER estn soportados as como sus derivados NATURAL y POSITIVE. Si no se limita el rango el nmero de bits a emplear en la codificacin depender de cada herramienta en particular (normalmente 32 bits). Para no malgastar recursos innecesariamente, es deseable que el usuario limite el rango de los tipos enteros segn las necesidades de la aplicacin.

La norma recomienda que durante la implementacin el sintetizador convierta los tipos enteros a su tipo equivalente definido en el paquete

NUMERIC_BIT (derivados de bit_vector). Si el rango contiene slo valores positivos se trata como un UNSIGNED. Si el rango contiene valores positivos y negativos se trata como un SIGNED. En ambos casos se sintetizan como si el valor 0 perteneciese al rango.

-- Ejemplo: Enteros con rango. signal A: integer range 8 to 10; -- Se sintetiza igual (4 bits) que: signal A: integer range 0 to 15;

Tipos bsicos predefinidos


INTEGER: A veces utilizado para ndices de loops, constantes, valores genricos, etc BOOLEAN: ENUMERATED: Pueden tomar los valores true false Enumeracin de valores definidos por el usuario.

TIPOS COMPUESTOS
BIT: Puede tomar los valores 0 1 BIT_VECTOR: Agrupacin de bits signal salida :BIT_VECTOR (0 to 3); salida <=1000; esto significa que salida(0)=1 salida(1)=0 salida(2)=0 salida(3)=0 signal salida :BIT_VECTOR (3 downto 0); salida <=1000; esto significa que salida(3)=1 salida(2)=0 salida(1)=0 salida(0)=0

Por ejemplo: type estado is (inicio, arriba, abajo, stop)

Tipo STD_LOGIC
Para describir buses se utiliza el tipo std_logic_vector, que es un array de std_logic Los tipos std_logic y std_logic_vector son los estndares industriales. Todos los valores son vlidos en un simulador VHDL, sin embargo Solo: 0, 1, Z, L, H y se reconocen para la sntesis.

En el paquete IEEE.std_logic_1164 aparecen otros dos tipos: std_ulogic y std_ulogic_vector. Son los mismos, pero sin haber pasado por la funcin de resolucin. Esta funcin decide cul debe ser el valor de la seal cuando tiene dos fuentes que le asignan valores distintos. Por ejemplo, si una fuente asigna un 1 y la otra una L, la funcin de resolucin dice que la seal se queda a 1

ATRIBUTOS.
El uso de atributos por parte de los sintetizadores para controlar ciertos aspectos de la sntesis es algo muy comn, si bien slo ENUM_ENCODING est normalizado. El atributo ENUM_ENCODING permite especificar la codificacin de un tipo enumerado. En cualquier caso el cdigo fuente debe incluir la declaracin de este atributo antes de ser utilizado:

attribute ENUM_ENCODING: STRING; -- Declarations

type COLOR is (ROJO, VERDE, AZUL, NEGRO, BLANCO); attribute ENUM_ENCODING: string; attribute ENUM_ENCODING of COLOR:type is "10000 01000 00100 00010 00001";

INTERPRETACIN DE TIPOS CON SEMNTICA HARDWARE


Tratamiento del valor de alta impedancia Z. Su uso solo est permitido en asignaciones condicionales cuando forma parte del valor de salida de una de las condiciones. Representa un dispositivo con salida en alta impedancia.

signal A,B,S,E: std_logic; S <= (A and B) when E=1 else Z;

E A B

In[0] In[1]

Para poder interpretarlo el tipo de semntica se ilustra un ejemplo siguiente: Si los literales aparecen en comparaciones de igualdad/desigualdad stas siempre se evalan como falsas/ciertas.

process(A) begin if (A = "00_0") then B <= '1'; else B <= '0'; end if; end process; B <= '1' when (A = "00_0") else '0';

Si B <= '0';

Si los literales aparecen en sentencias case / with select el sintetizador interpreta que dicha opcin no va a ocurrir. case sel is when "000" => S <= '0'; when "001" => S <= '1'; when "01X" => S <= '0'; when others => S <= '0'; end case; case sel is when "000" => S <= '0'; when "001" => S <= '1'; when others => S <= '0'; end case;

with sel select S <= '0' when "00", S <= '1' when "01", S <= '0' when "1X";

with sel select S <= '0' when "00", S <= '1' when "01;

Para operadores lgicos se considera como un error. B <= (A and 00X1); -- error

Para operadores relacionales se considera como un error if s<00-01" then z<=0'; else z<=1'; end if; D <= 1 when (A > 00X1) else 0;

OBSERVACION: Para las operaciones de concatenacin y conversin de tipos la norma no establece ninguna restriccin durante la sntesis.

DECLARACIONES EN VHDL PARA SNTESIS


DECLARACIN DE COMPONENTES.
La declaracin de componentes debe estar soportada salvo la palabra reservada is. component identificador [ declaracin_genricos] port ( CLOCK : in std_logic; [ declaracin puertos] RESET : in std_logic; end component [ identificador]; D : in std_logic_vector(N-1 downto 0); Q : out std_logic_vector(N-1 downto 0)); end component;

is

component registro generic(N : Integer := 8); -- Nmero de bits.

MODELADO DE CIRCUITOS COMBINACIONALES. El modelado de circuitos combinacionales puede realizarse:


Mediante asignaciones concurrentes de seal. Mediante procesos: mayor flexibilidad.

Toda asignacin concurrente de seal tiene su modelo equivalente mediante un proceso. Independientemente del mtodo a emplear en el modelado deben evitarse. Los bucles combinacionales. Las asignaciones condicionales incompletamente definidas.

Se suelen emplear para modelar bloques sencillos que se pueden describir con expresiones sencillas. Para bloques ms complejos es preferible emplear procesos debido a su mayor flexibilidad. architecture rtl of ejemplo is signal A,B,C,D,E: std_logic; begin D <= A or B; E <= D and C; end rtl;

A B C

Estas estructuras se implementan mediante multiplexores. sel <= sel1 & sel0; with sel select z <= D0 when 00, D1 when 01, D2 when 10, D3 when 11, X when others;

El anidamiento de las clusulas condicionales se traduce en una cadena de multiplexores conectados en cascada. sel <= sel1 & sel0; z <= D0 when (sel=00) else D1 when (sel=01) else D2 when (sel=10) else D3 when (sel=11) else X;

MODELADO MEDIANTE PROCESOS.


Ms flexible que las asignaciones concurrentes de seal. Los procesos utilizados para el modelado de circuitos combinacionales responden a la siguiente plantilla: -- Proceso combinacional. process ({seales de entrada}) {declaracin de variables}; begin {algoritmo de funcionamiento} end process;

El circuito slo puede conmutar cuando lo hace una de sus seales de entrada.

En la lista de sensibilidad deben aparecer t

MODELADO MEDIANTE PROCESOS: PRECAUCIONES


Todas las seales utilizadas en las formas de onda de las asignaciones secuenciales de seal o variables deben incluirse en la lista de sensibilidades del proceso: se producen diferencias entre la simulacin presntesis y la postsntesis process(a) begin if (a='1' and b='1') then z <= '1'; else z <= 0'; end if; end process; process(a,b) begin if (a='1' and b='1') then z <= '1'; else z <= 0'; end if; end process;

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de seal son aplicables para los procesos. Evitar bucles combinacionales.

Utilizar preferiblemente sentencias case frente a

if then.

mux
process(sel1,sel2,D0,D1,D2,D3) variable sel :std_logic_vector(1 downto 0); begin sel := sel1 & sel0; case sel is when 00 => z <= D0; when 01 => z <= D1; when 10 => z <= D2; when 11 => z <= D3; when others => z <= 00; end case; end process;

Mux en cascada
process(sel1,sel2,D0,D1,D2,D3) variable sel :std_logic_vector(1 downto 0); begin sel := sel1 & sel0; if (sel == 00) then z <= D0; elsif (sel == 01) then z <= D1; elsif (sel == 10) then z <= D2; elsif (sel == 11) then z <= D3; else z <= 00; end if; end process;

Evitar sentencias condicionales incompletamente definidas. La inferencia errnea de latches se puede evitar realizando una asignacin del valor por defecto o utilizando la clusula else.

- Inferencia de latch. process(a,b,c,d) begin if (a=1) then y <= c; elsif ( b = 1) then y <= d; end if; end process;
d
S1

Multiplexor
D

c
S8

S
C1 C2 C3 HAB.

GRB

a b

R
process(A, B) begin if (B = '1') then Z <= A; end if; end process;

CLR

Asignando con la clusula else.


process(a,b,c,d) begin y <= 0; if (a=1) then process(a,b,c,d) begin if (a=1) then y <= c;

y <= c; elsif ( b = 1) then y <= d; end if; end process;

elsif ( b = 1) then y <= d; else y <= 0; end if; end process;

Bajo cualquier condicin de ejecucin, se deben asignar valor a todos los


elementos de los vectores. process (selec) is begin case selec is when "00"=> salida(0)<= '1'; when "01"=> salida(1)<= '1'; when "10"=> salida(2)<= '1'; when "11"=> salida(3)<= '1'; when others=> salida<= (others=>'0'); end case; end process;
Salida<= (others=>'0');

MODELADO DE SALIDAS EN ALTA IMPEDANCIA


Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicin) en las que para una de las condiciones, a la seal destino se le asigna (others => Z). Ejemplo: Disear el interface de un perifrico dotado de cuatro registros bidireccionales de 8 bits. library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; entity periferico is port(data: inout std_logic_vector(7 downto 0); adrs: in std_logic(1 downto 0); R_W, CS: in std_logic); end periferico;

Cuando son de alta impedancia ejemplo:

architecture inside of bus_bidir is signal bus_int : std_logic_vector(7 downto 0); signal reg0, reg1, reg2, reg3 : std_logic_vector(7 downto 0); signal SEL: std_logic_vector(3 downto 0); begin decod: process(adrs,CS) -- Decodificacin de seales de seleccin. begin for i in SEL'range loop if (to_integer(unsigned(adrs)) =i and CS='0') then SEL(i) <= '1'; else SEL(i) <= '0'; end if; end loop; end process; -- Excitacin del bus de datos interno. bus_int <= reg0 when (SEL(0)='1' and R_W='1') else (others =>'Z'); bus_int <= reg1 when (SEL(1)='1' and R_W='1') else (others =>'Z'); bus_int <= reg2 when (SEL(2)='1' and R_W='1') else (others =>'Z'); bus_int <= reg3 when (SEL(3)='1' and R_W='1') else (others =>'Z'); -- Excitacin de los terminales de datos. data <= bus_int when (CS='0' and R_W='1') else (others =>'Z');

MODELADO DE CIRCUITOS SECUENCIALES ACTIVOS POR NIVEL

Los latches se modelan mediante expresiones condicionales incompletamente definidas. Debe tratar de evitarse su uso: Acarrean problemas de diseo y estabilidad (carreras). Casi siempre es posible realizar el diseo empleando biestables. Elevado consumo de recursos en algunas FPGAs.

architecture rtl of ejemplo is signal D,Q,ENABLE: std_logic; begin D <= Q when (ENABLE=1); end rtl;
a

GRB

CLR

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologa destino los circuitos sintetizados (biestables activos por flanco).Los modelos VHDL de estos circuitos se suelen realizar mediante procesos (mayor flexibilidad que las asignaciones concurrentes).Los procesos deben incluir expresiones booleanas de deteccin de flanco.

(clkevent and clk=1)

Forma ms comn de indicar un flanco de subida

not clkstable and clk=0 wait until clk=1 ;

Formas equivalentes soportadas por algunas herramientas.

(clkevent and clk=1and clklast_value=0;)

Forma recomendada por algunas herramientas para seales std_logic.

rising_edge(clk) falling_edge(clk)

Funciones estandarizadas en el paquete de sntesis IEEE 1076.3

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla: process (reloj, {seales_asncronas}) {declaracin de variables}; begin if (seales_asncronas_activas) then {asignaciones_asincronas} elsif (expresin_booleana_de_deteccin_flanco) then {algoritmo de funcionamiento sncrono} end if; end process;

El circuito slo pude conmutar debido a las

En la lista de sensibilidad slo aparecen

seales asncronas o la seal de reloj.


Las seales asncronas tienen preferencia sobre la seal de reloj.

las seales asncronas y la seal de reloj. La activacin de las seales asncronas se evala antes que la seal de reloj.

Si no existen seales asncronas la plantilla se transforma en: process (reloj) {declaracin de variables}; begin if (expresin_booleana_de_deteccin_flanco) then {algoritmo de funcionamiento sncrono} end if; end process;

Siendo equivalente a: process {declaracin de variables}; begin wait until (expresin_booleana_de_deteccin_flanco) {algoritmo de funcionamiento sncrono} end process;

Bibliografia:

http://rua.ua.es/dspace/bitstream/10045/3930/1/S2_4_TIPOS%20DE%20DATOS.pdf

http://books.google.com.ec/books?id=NpwGwLW0AzUC&printsec=frontcover&source=gb s_ge_summary_r&cad=0#v=onepage&q&f=false

ftp://ftp.ehu.es/cidira/dptos/depjt/Microelectronica/VHDL/ManualVHDL-SEC-UPM.pdf

http://tapec.uv.es/VHDL/vhdl_1ed/

También podría gustarte