Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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).
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
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.
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.
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 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
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:
type COLOR is (ROJO, VERDE, AZUL, NEGRO, BLANCO); attribute ENUM_ENCODING: string; attribute ENUM_ENCODING of COLOR:type is "10000 01000 00100 00010 00001";
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.
is
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;
El circuito slo puede conmutar cuando lo hace una de sus seales de entrada.
Las mismas recomendaciones enunciadas para las asignaciones concurrentes de seal son aplicables para los procesos. Evitar bucles combinacionales.
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
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');
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.
rising_edge(clk) falling_edge(clk)
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;
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/