SINTESIS VHDL

34
Escuela Superior Politécnica del Litoral Faculta de Ingeniería en Electricidad y Computación. Tarea # 1 SINTESIS VHDL INGENIERO EN ELECTRICIDAD Y ELECTRONICA ESPECIALIZADO EN AUTOMATIZACION INDUSTRIAL Presentado por:

Transcript of SINTESIS VHDL

Page 1: SINTESIS VHDL

Escuela Superior Politeacutecnica del Litoral

Faculta de Ingenieriacutea en Electricidad y Computacioacuten

Tarea 1

SINTESIS VHDL

INGENIERO EN ELECTRICIDAD Y ELECTRONICA ESPECIALIZADO EN

AUTOMATIZACION INDUSTRIAL

Presentado por

Carlos Rivera Jara

Diego Sierra

SINTESIS VHDL

Siacutentesis es el proceso de transformacioacuten del modelo de un disentildeo generalmente descrito

en HDL de un nivel de abstraccioacuten a otro inferior

Objetivo de la siacutentesis

bull El disentildeador pueda describir circuitos digitales con alto nivel de abstraccioacuten

bull El modelo obtenido pueda ser manejado por las herramientas de implementacioacuten

hardware (FPGAs y ASICs)

La siacutentesis opera sobre 3 tipos de informacioacuten

bull El modelo del circuito

bull Conjunto de restricciones del circuito

bull Conjunto de componentes a utilizar para construir el circuito

Los sintetizadores comerciales traducen el nivel RTL al nivel loacutegico

Alguno hace la traduccioacuten al nivel fiacutesico

No todas las construcciones de VHDL pueden emplearse en siacutentesis

1048697 Ejemplo A lt= not(B) after 11 ns

if (ce=lsquo1rsquo and (clkrsquoevent and clk=lsquo1rsquo)

Soacutelo se emplea un subconjunto de VHDL en la siacutentesis

Restricciones sintaacutecticas y semaacutenticas

Se usan para asegurar una eficacia miacutenima en el proceso de siacutentesis

Para identificar hardware asociado a un determinado comportamiento hay que

antildeadir semaacutentica hardware a la descripcioacuten

En general cada herramienta de siacutentesis tiene sus propias restricciones sintaacutecticas

lo que dificulta la reutilizacioacuten del coacutedigo

SUBCONJUNTO VHDL PARA SIacuteNTESIS RTL

La norma IEEE Std 10766-1999 define el estaacutendar para la siacutentesis RTL de VHDL

El objetivo de este estaacutendar es definir la sintaxis y semaacutentica para la siacutentesis RTL

de VHDL

Se define un subconjunto de VHDL que deben soportar todas las herramientas de

siacutentesis VHDL

Esto permite a los disentildeadores realizar disentildeos cuyo comportamiento seraacute

independiente del sintetizador empleado

Las herramientas compatibles pueden tener caracteriacutesticas superiores a las

impuestas por la norma

DEFINICIONES DE 10763

Modelo compatible Para que un modelo sea compatible con la norma IEEE

10766 eacuteste debe

Utilizar uacutenicamente las construcciones soportadas o ignoradas por la norma

IEEE 10766

Ajustarse a la semaacutentica indicada por la norma

Herramienta compatible Para que un sintetizador sea compatible con la

norma debe

Aceptar todos los modelos compatibles con la norma seguacuten lo expuesto en

el punto anterior

Aceptar los pragmas (directivas de siacutentesis) definidas por la norma

Ajustarse a los criterios de verificacioacuten que define la norma

Un sintetizador no tiene por queacute interpretar todas las construcciones VHDL

que acepta sino soacutelo las que impone la norma IEEE 10766

Las construcciones VHDL se clasifican en

Soportadas El sintetizador debe interpretar la construccioacuten es decir mapearla en

hardware

Ignoradas El sintetizador debe ignorar la construccioacuten El procesamiento de esta

construccioacuten no debe provocar un error de siacutentesis si bien la simulacioacuten del

circuito simulado puede diferir de la del coacutedigo VHDL original La herramienta de

siacutentesis puede informar al usuario de que esa construccioacuten no estaacute definida por el

estaacutendar

No soportadas El sintetizador no soporta la construccioacuten Se supone que estas

construcciones no deben aparecer en el coacutedigo VHDL por lo que el modo de fallo

estaacute indefinido

RESTRICCIONES

Valores de inicializacioacuten no se aceptan los asignados a objetos en la definicioacuten

El modelo debe poseer un mecanismo de inicializacioacuten hardware externo (sentildeal de

reset)

constant tpd TIME = 15 ns signal AB std_logic=lsquo0rsquo A lt= 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)

Fiacutesicos (no se aceptan se ignoran)

Compuestos

Vectores (si se aceptan)

Registro (si se aceptan)

Ficheros (no se aceptan)

Acceso (no se aceptan)

Ademaacutes debe soportar los tipos definidos por el usuario y sus tipos derivados

TIPOS ESCALARES ENTEROS

Los tipos INTEGER estaacuten soportados asiacute como sus derivados NATURAL y POSITIVE

Si no se limita el rango el nuacutemero de bits a emplear en la codificacioacuten dependeraacute 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 seguacuten las necesidades de la aplicacioacuten

La norma recomienda que durante la implementacioacuten el sintetizador convierta los

tipos enteros a su tipo equivalente definido en el paquete

NUMERIC_BIT (derivados de bit_vector)

Si el rango contiene soacutelo 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 rangosignal A integer range 8 to 10-- Se sintetiza igual (4 bits) quesignal A integer range 0 to 15

Tipos baacutesicos predefinidos

INTEGER A veces utilizado para iacutendices de loops

constantes valores geneacutericos etc

BOOLEAN Pueden tomar los valores lsquotruersquo oacute lsquofalsersquo

ENUMERATED Enumeracioacuten de valores definidos por el

usuario

TIPOS COMPUESTOS

BIT Puede tomar los valores lsquo0rsquo oacute lsquo1rsquo

BIT_VECTOR Agrupacioacuten de bits

signal salida BIT_VECTOR (0 to 3) signal salida BIT_VECTOR (3 downto

salida lt=ldquo1000rdquo

esto significa que

salida(0)=lsquo1rsquo

salida(1)=lsquo0rsquo

salida(2)=lsquo0rsquo

salida(3)=lsquo0rsquo

0)

salida lt=ldquo1000rdquo

esto significa que

salida(3)=lsquo1rsquo

salida(2)=lsquo0rsquo

salida(1)=lsquo0rsquo

salida(0)=lsquo0

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 estaacutendares industriales

Todos los valores son vaacutelidos en un simulador VHDL sin embargo Solo lsquo0rsquo lsquo1rsquo lsquoZrsquo lsquoLrsquo lsquoHrsquo y

lsquolsquondashrsquo se reconocen para la siacutentesis

En el paquete IEEEstd_logic_1164 aparecen otros dos tipos

std_ulogic y std_ulogic_vector Son los mismos pero sin haber pasado por la funcioacuten de

resolucioacuten

Esta funcioacuten decide cuaacutel debe ser el valor de la sentildeal cuando tiene dos fuentes que le

asignan valores distintos Por ejemplo si una fuente asigna un lsquo1rsquo y la otra una lsquoLrsquo la

funcioacuten de resolucioacuten dice que la sentildeal se queda a lsquo1rsquo

ATRIBUTOS

El uso de atributos por parte de los sintetizadores para controlar ciertos aspectos

de la siacutentesis es algo muy comuacuten si bien soacutelo ENUM_ENCODING estaacute normalizado

El atributo ENUM_ENCODING permite especificar la codificacioacuten de un tipo

enumerado

En cualquier caso el coacutedigo fuente debe incluir la declaracioacuten 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 COLORtype is 10000 01000 00100

00010 00001

INTERPRETACIOacuteN DE TIPOS CON SEMAacuteNTICA

HARDWARE

Tratamiento del valor de alta impedancia lsquoZrsquo

Su uso solo estaacute permitido en asignaciones condicionales cuando forma parte del

valor de salida de una de las condiciones

Representa un dispositivo con salida en alta impedancia

Para poder interpretarlo el tipo de semaacutentica se ilustra un ejemplo siguiente

Si los literales aparecen en comparaciones de igualdaddesigualdad eacutestas siempre se

evaluacutean como falsasciertas

process(A)

begin

if (A = 00_0) then

B lt= 1

Si

B lt= 0

signal ABSE std_logic

S lt= (A and B) when E=lsquo1rsquo else

lsquoZrsquo

else

B lt= 0

end if

end process

B lt= 1 when (A = 00_0) else 0

Si los literales aparecen en sentencias case with select el sintetizador interpreta que

dicha opcioacuten no va a ocurrir

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when 01X =gt

S lt= 0

when others =gt

S lt= 0

end case

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when others =gt

S lt= 0

end case

with sel select

S lt= 0 when 00

S lt= 1 when 01

with sel select

S lt= 0 when 00

S lt= 1 when 01

S lt= 0 when 1X

Para operadores loacutegicos se considera como un error

B lt= (A and ldquo00X1rdquo) -- error

Para operadores relacionales se considera como un error

if sltldquo00-01 then

zlt=rsquo0

else

zlt=rsquo1

end if

D lt= lsquo1rsquo when (A gt ldquo00X1rdquo) else lsquo0rsquo

OBSERVACION Para las operaciones de concatenacioacuten y conversioacuten de tipos la norma no

establece ninguna restriccioacuten durante la siacutentesis

DECLARACIONES EN VHDL PARA SIacuteNTESIS

DECLARACIOacuteN DE COMPONENTES

La declaracioacuten de componentes debe estar soportada salvo la palabra reservada is

component identificador is

[ declaracioacuten_geneacutericos]

[ declaracioacuten puertos]

end component [ identificador]

component registro

generic(N Integer = 8) -- Nuacutemero de bits

port ( CLOCK in std_logic

RESET in std_logic

D in std_logic_vector(N-1 downto 0)

Q out std_logic_vector(N-1 downto 0))

end component

MODELADO DE CIRCUITOS COMBINACIONALES

ŠEl modelado de circuitos combinacionales puede realizarse

Mediante asignaciones concurrentes de sentildeal

Mediante procesos mayor flexibilidad

ŠToda asignacioacuten concurrente de sentildeal tiene su modelo equivalente mediante un proceso

ŠIndependientemente del meacutetodo 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 maacutes complejos es preferible emplear procesos debido

a su mayor flexibilidad

architecture rtl of ejemplo is

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 2: SINTESIS VHDL

SINTESIS VHDL

Siacutentesis es el proceso de transformacioacuten del modelo de un disentildeo generalmente descrito

en HDL de un nivel de abstraccioacuten a otro inferior

Objetivo de la siacutentesis

bull El disentildeador pueda describir circuitos digitales con alto nivel de abstraccioacuten

bull El modelo obtenido pueda ser manejado por las herramientas de implementacioacuten

hardware (FPGAs y ASICs)

La siacutentesis opera sobre 3 tipos de informacioacuten

bull El modelo del circuito

bull Conjunto de restricciones del circuito

bull Conjunto de componentes a utilizar para construir el circuito

Los sintetizadores comerciales traducen el nivel RTL al nivel loacutegico

Alguno hace la traduccioacuten al nivel fiacutesico

No todas las construcciones de VHDL pueden emplearse en siacutentesis

1048697 Ejemplo A lt= not(B) after 11 ns

if (ce=lsquo1rsquo and (clkrsquoevent and clk=lsquo1rsquo)

Soacutelo se emplea un subconjunto de VHDL en la siacutentesis

Restricciones sintaacutecticas y semaacutenticas

Se usan para asegurar una eficacia miacutenima en el proceso de siacutentesis

Para identificar hardware asociado a un determinado comportamiento hay que

antildeadir semaacutentica hardware a la descripcioacuten

En general cada herramienta de siacutentesis tiene sus propias restricciones sintaacutecticas

lo que dificulta la reutilizacioacuten del coacutedigo

SUBCONJUNTO VHDL PARA SIacuteNTESIS RTL

La norma IEEE Std 10766-1999 define el estaacutendar para la siacutentesis RTL de VHDL

El objetivo de este estaacutendar es definir la sintaxis y semaacutentica para la siacutentesis RTL

de VHDL

Se define un subconjunto de VHDL que deben soportar todas las herramientas de

siacutentesis VHDL

Esto permite a los disentildeadores realizar disentildeos cuyo comportamiento seraacute

independiente del sintetizador empleado

Las herramientas compatibles pueden tener caracteriacutesticas superiores a las

impuestas por la norma

DEFINICIONES DE 10763

Modelo compatible Para que un modelo sea compatible con la norma IEEE

10766 eacuteste debe

Utilizar uacutenicamente las construcciones soportadas o ignoradas por la norma

IEEE 10766

Ajustarse a la semaacutentica indicada por la norma

Herramienta compatible Para que un sintetizador sea compatible con la

norma debe

Aceptar todos los modelos compatibles con la norma seguacuten lo expuesto en

el punto anterior

Aceptar los pragmas (directivas de siacutentesis) definidas por la norma

Ajustarse a los criterios de verificacioacuten que define la norma

Un sintetizador no tiene por queacute interpretar todas las construcciones VHDL

que acepta sino soacutelo las que impone la norma IEEE 10766

Las construcciones VHDL se clasifican en

Soportadas El sintetizador debe interpretar la construccioacuten es decir mapearla en

hardware

Ignoradas El sintetizador debe ignorar la construccioacuten El procesamiento de esta

construccioacuten no debe provocar un error de siacutentesis si bien la simulacioacuten del

circuito simulado puede diferir de la del coacutedigo VHDL original La herramienta de

siacutentesis puede informar al usuario de que esa construccioacuten no estaacute definida por el

estaacutendar

No soportadas El sintetizador no soporta la construccioacuten Se supone que estas

construcciones no deben aparecer en el coacutedigo VHDL por lo que el modo de fallo

estaacute indefinido

RESTRICCIONES

Valores de inicializacioacuten no se aceptan los asignados a objetos en la definicioacuten

El modelo debe poseer un mecanismo de inicializacioacuten hardware externo (sentildeal de

reset)

constant tpd TIME = 15 ns signal AB std_logic=lsquo0rsquo A lt= 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)

Fiacutesicos (no se aceptan se ignoran)

Compuestos

Vectores (si se aceptan)

Registro (si se aceptan)

Ficheros (no se aceptan)

Acceso (no se aceptan)

Ademaacutes debe soportar los tipos definidos por el usuario y sus tipos derivados

TIPOS ESCALARES ENTEROS

Los tipos INTEGER estaacuten soportados asiacute como sus derivados NATURAL y POSITIVE

Si no se limita el rango el nuacutemero de bits a emplear en la codificacioacuten dependeraacute 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 seguacuten las necesidades de la aplicacioacuten

La norma recomienda que durante la implementacioacuten el sintetizador convierta los

tipos enteros a su tipo equivalente definido en el paquete

NUMERIC_BIT (derivados de bit_vector)

Si el rango contiene soacutelo 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 rangosignal A integer range 8 to 10-- Se sintetiza igual (4 bits) quesignal A integer range 0 to 15

Tipos baacutesicos predefinidos

INTEGER A veces utilizado para iacutendices de loops

constantes valores geneacutericos etc

BOOLEAN Pueden tomar los valores lsquotruersquo oacute lsquofalsersquo

ENUMERATED Enumeracioacuten de valores definidos por el

usuario

TIPOS COMPUESTOS

BIT Puede tomar los valores lsquo0rsquo oacute lsquo1rsquo

BIT_VECTOR Agrupacioacuten de bits

signal salida BIT_VECTOR (0 to 3) signal salida BIT_VECTOR (3 downto

salida lt=ldquo1000rdquo

esto significa que

salida(0)=lsquo1rsquo

salida(1)=lsquo0rsquo

salida(2)=lsquo0rsquo

salida(3)=lsquo0rsquo

0)

salida lt=ldquo1000rdquo

esto significa que

salida(3)=lsquo1rsquo

salida(2)=lsquo0rsquo

salida(1)=lsquo0rsquo

salida(0)=lsquo0

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 estaacutendares industriales

Todos los valores son vaacutelidos en un simulador VHDL sin embargo Solo lsquo0rsquo lsquo1rsquo lsquoZrsquo lsquoLrsquo lsquoHrsquo y

lsquolsquondashrsquo se reconocen para la siacutentesis

En el paquete IEEEstd_logic_1164 aparecen otros dos tipos

std_ulogic y std_ulogic_vector Son los mismos pero sin haber pasado por la funcioacuten de

resolucioacuten

Esta funcioacuten decide cuaacutel debe ser el valor de la sentildeal cuando tiene dos fuentes que le

asignan valores distintos Por ejemplo si una fuente asigna un lsquo1rsquo y la otra una lsquoLrsquo la

funcioacuten de resolucioacuten dice que la sentildeal se queda a lsquo1rsquo

ATRIBUTOS

El uso de atributos por parte de los sintetizadores para controlar ciertos aspectos

de la siacutentesis es algo muy comuacuten si bien soacutelo ENUM_ENCODING estaacute normalizado

El atributo ENUM_ENCODING permite especificar la codificacioacuten de un tipo

enumerado

En cualquier caso el coacutedigo fuente debe incluir la declaracioacuten 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 COLORtype is 10000 01000 00100

00010 00001

INTERPRETACIOacuteN DE TIPOS CON SEMAacuteNTICA

HARDWARE

Tratamiento del valor de alta impedancia lsquoZrsquo

Su uso solo estaacute permitido en asignaciones condicionales cuando forma parte del

valor de salida de una de las condiciones

Representa un dispositivo con salida en alta impedancia

Para poder interpretarlo el tipo de semaacutentica se ilustra un ejemplo siguiente

Si los literales aparecen en comparaciones de igualdaddesigualdad eacutestas siempre se

evaluacutean como falsasciertas

process(A)

begin

if (A = 00_0) then

B lt= 1

Si

B lt= 0

signal ABSE std_logic

S lt= (A and B) when E=lsquo1rsquo else

lsquoZrsquo

else

B lt= 0

end if

end process

B lt= 1 when (A = 00_0) else 0

Si los literales aparecen en sentencias case with select el sintetizador interpreta que

dicha opcioacuten no va a ocurrir

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when 01X =gt

S lt= 0

when others =gt

S lt= 0

end case

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when others =gt

S lt= 0

end case

with sel select

S lt= 0 when 00

S lt= 1 when 01

with sel select

S lt= 0 when 00

S lt= 1 when 01

S lt= 0 when 1X

Para operadores loacutegicos se considera como un error

B lt= (A and ldquo00X1rdquo) -- error

Para operadores relacionales se considera como un error

if sltldquo00-01 then

zlt=rsquo0

else

zlt=rsquo1

end if

D lt= lsquo1rsquo when (A gt ldquo00X1rdquo) else lsquo0rsquo

OBSERVACION Para las operaciones de concatenacioacuten y conversioacuten de tipos la norma no

establece ninguna restriccioacuten durante la siacutentesis

DECLARACIONES EN VHDL PARA SIacuteNTESIS

DECLARACIOacuteN DE COMPONENTES

La declaracioacuten de componentes debe estar soportada salvo la palabra reservada is

component identificador is

[ declaracioacuten_geneacutericos]

[ declaracioacuten puertos]

end component [ identificador]

component registro

generic(N Integer = 8) -- Nuacutemero de bits

port ( CLOCK in std_logic

RESET in std_logic

D in std_logic_vector(N-1 downto 0)

Q out std_logic_vector(N-1 downto 0))

end component

MODELADO DE CIRCUITOS COMBINACIONALES

ŠEl modelado de circuitos combinacionales puede realizarse

Mediante asignaciones concurrentes de sentildeal

Mediante procesos mayor flexibilidad

ŠToda asignacioacuten concurrente de sentildeal tiene su modelo equivalente mediante un proceso

ŠIndependientemente del meacutetodo 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 maacutes complejos es preferible emplear procesos debido

a su mayor flexibilidad

architecture rtl of ejemplo is

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 3: SINTESIS VHDL

Restricciones sintaacutecticas y semaacutenticas

Se usan para asegurar una eficacia miacutenima en el proceso de siacutentesis

Para identificar hardware asociado a un determinado comportamiento hay que

antildeadir semaacutentica hardware a la descripcioacuten

En general cada herramienta de siacutentesis tiene sus propias restricciones sintaacutecticas

lo que dificulta la reutilizacioacuten del coacutedigo

SUBCONJUNTO VHDL PARA SIacuteNTESIS RTL

La norma IEEE Std 10766-1999 define el estaacutendar para la siacutentesis RTL de VHDL

El objetivo de este estaacutendar es definir la sintaxis y semaacutentica para la siacutentesis RTL

de VHDL

Se define un subconjunto de VHDL que deben soportar todas las herramientas de

siacutentesis VHDL

Esto permite a los disentildeadores realizar disentildeos cuyo comportamiento seraacute

independiente del sintetizador empleado

Las herramientas compatibles pueden tener caracteriacutesticas superiores a las

impuestas por la norma

DEFINICIONES DE 10763

Modelo compatible Para que un modelo sea compatible con la norma IEEE

10766 eacuteste debe

Utilizar uacutenicamente las construcciones soportadas o ignoradas por la norma

IEEE 10766

Ajustarse a la semaacutentica indicada por la norma

Herramienta compatible Para que un sintetizador sea compatible con la

norma debe

Aceptar todos los modelos compatibles con la norma seguacuten lo expuesto en

el punto anterior

Aceptar los pragmas (directivas de siacutentesis) definidas por la norma

Ajustarse a los criterios de verificacioacuten que define la norma

Un sintetizador no tiene por queacute interpretar todas las construcciones VHDL

que acepta sino soacutelo las que impone la norma IEEE 10766

Las construcciones VHDL se clasifican en

Soportadas El sintetizador debe interpretar la construccioacuten es decir mapearla en

hardware

Ignoradas El sintetizador debe ignorar la construccioacuten El procesamiento de esta

construccioacuten no debe provocar un error de siacutentesis si bien la simulacioacuten del

circuito simulado puede diferir de la del coacutedigo VHDL original La herramienta de

siacutentesis puede informar al usuario de que esa construccioacuten no estaacute definida por el

estaacutendar

No soportadas El sintetizador no soporta la construccioacuten Se supone que estas

construcciones no deben aparecer en el coacutedigo VHDL por lo que el modo de fallo

estaacute indefinido

RESTRICCIONES

Valores de inicializacioacuten no se aceptan los asignados a objetos en la definicioacuten

El modelo debe poseer un mecanismo de inicializacioacuten hardware externo (sentildeal de

reset)

constant tpd TIME = 15 ns signal AB std_logic=lsquo0rsquo A lt= 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)

Fiacutesicos (no se aceptan se ignoran)

Compuestos

Vectores (si se aceptan)

Registro (si se aceptan)

Ficheros (no se aceptan)

Acceso (no se aceptan)

Ademaacutes debe soportar los tipos definidos por el usuario y sus tipos derivados

TIPOS ESCALARES ENTEROS

Los tipos INTEGER estaacuten soportados asiacute como sus derivados NATURAL y POSITIVE

Si no se limita el rango el nuacutemero de bits a emplear en la codificacioacuten dependeraacute 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 seguacuten las necesidades de la aplicacioacuten

La norma recomienda que durante la implementacioacuten el sintetizador convierta los

tipos enteros a su tipo equivalente definido en el paquete

NUMERIC_BIT (derivados de bit_vector)

Si el rango contiene soacutelo 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 rangosignal A integer range 8 to 10-- Se sintetiza igual (4 bits) quesignal A integer range 0 to 15

Tipos baacutesicos predefinidos

INTEGER A veces utilizado para iacutendices de loops

constantes valores geneacutericos etc

BOOLEAN Pueden tomar los valores lsquotruersquo oacute lsquofalsersquo

ENUMERATED Enumeracioacuten de valores definidos por el

usuario

TIPOS COMPUESTOS

BIT Puede tomar los valores lsquo0rsquo oacute lsquo1rsquo

BIT_VECTOR Agrupacioacuten de bits

signal salida BIT_VECTOR (0 to 3) signal salida BIT_VECTOR (3 downto

salida lt=ldquo1000rdquo

esto significa que

salida(0)=lsquo1rsquo

salida(1)=lsquo0rsquo

salida(2)=lsquo0rsquo

salida(3)=lsquo0rsquo

0)

salida lt=ldquo1000rdquo

esto significa que

salida(3)=lsquo1rsquo

salida(2)=lsquo0rsquo

salida(1)=lsquo0rsquo

salida(0)=lsquo0

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 estaacutendares industriales

Todos los valores son vaacutelidos en un simulador VHDL sin embargo Solo lsquo0rsquo lsquo1rsquo lsquoZrsquo lsquoLrsquo lsquoHrsquo y

lsquolsquondashrsquo se reconocen para la siacutentesis

En el paquete IEEEstd_logic_1164 aparecen otros dos tipos

std_ulogic y std_ulogic_vector Son los mismos pero sin haber pasado por la funcioacuten de

resolucioacuten

Esta funcioacuten decide cuaacutel debe ser el valor de la sentildeal cuando tiene dos fuentes que le

asignan valores distintos Por ejemplo si una fuente asigna un lsquo1rsquo y la otra una lsquoLrsquo la

funcioacuten de resolucioacuten dice que la sentildeal se queda a lsquo1rsquo

ATRIBUTOS

El uso de atributos por parte de los sintetizadores para controlar ciertos aspectos

de la siacutentesis es algo muy comuacuten si bien soacutelo ENUM_ENCODING estaacute normalizado

El atributo ENUM_ENCODING permite especificar la codificacioacuten de un tipo

enumerado

En cualquier caso el coacutedigo fuente debe incluir la declaracioacuten 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 COLORtype is 10000 01000 00100

00010 00001

INTERPRETACIOacuteN DE TIPOS CON SEMAacuteNTICA

HARDWARE

Tratamiento del valor de alta impedancia lsquoZrsquo

Su uso solo estaacute permitido en asignaciones condicionales cuando forma parte del

valor de salida de una de las condiciones

Representa un dispositivo con salida en alta impedancia

Para poder interpretarlo el tipo de semaacutentica se ilustra un ejemplo siguiente

Si los literales aparecen en comparaciones de igualdaddesigualdad eacutestas siempre se

evaluacutean como falsasciertas

process(A)

begin

if (A = 00_0) then

B lt= 1

Si

B lt= 0

signal ABSE std_logic

S lt= (A and B) when E=lsquo1rsquo else

lsquoZrsquo

else

B lt= 0

end if

end process

B lt= 1 when (A = 00_0) else 0

Si los literales aparecen en sentencias case with select el sintetizador interpreta que

dicha opcioacuten no va a ocurrir

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when 01X =gt

S lt= 0

when others =gt

S lt= 0

end case

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when others =gt

S lt= 0

end case

with sel select

S lt= 0 when 00

S lt= 1 when 01

with sel select

S lt= 0 when 00

S lt= 1 when 01

S lt= 0 when 1X

Para operadores loacutegicos se considera como un error

B lt= (A and ldquo00X1rdquo) -- error

Para operadores relacionales se considera como un error

if sltldquo00-01 then

zlt=rsquo0

else

zlt=rsquo1

end if

D lt= lsquo1rsquo when (A gt ldquo00X1rdquo) else lsquo0rsquo

OBSERVACION Para las operaciones de concatenacioacuten y conversioacuten de tipos la norma no

establece ninguna restriccioacuten durante la siacutentesis

DECLARACIONES EN VHDL PARA SIacuteNTESIS

DECLARACIOacuteN DE COMPONENTES

La declaracioacuten de componentes debe estar soportada salvo la palabra reservada is

component identificador is

[ declaracioacuten_geneacutericos]

[ declaracioacuten puertos]

end component [ identificador]

component registro

generic(N Integer = 8) -- Nuacutemero de bits

port ( CLOCK in std_logic

RESET in std_logic

D in std_logic_vector(N-1 downto 0)

Q out std_logic_vector(N-1 downto 0))

end component

MODELADO DE CIRCUITOS COMBINACIONALES

ŠEl modelado de circuitos combinacionales puede realizarse

Mediante asignaciones concurrentes de sentildeal

Mediante procesos mayor flexibilidad

ŠToda asignacioacuten concurrente de sentildeal tiene su modelo equivalente mediante un proceso

ŠIndependientemente del meacutetodo 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 maacutes complejos es preferible emplear procesos debido

a su mayor flexibilidad

architecture rtl of ejemplo is

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 4: SINTESIS VHDL

Modelo compatible Para que un modelo sea compatible con la norma IEEE

10766 eacuteste debe

Utilizar uacutenicamente las construcciones soportadas o ignoradas por la norma

IEEE 10766

Ajustarse a la semaacutentica indicada por la norma

Herramienta compatible Para que un sintetizador sea compatible con la

norma debe

Aceptar todos los modelos compatibles con la norma seguacuten lo expuesto en

el punto anterior

Aceptar los pragmas (directivas de siacutentesis) definidas por la norma

Ajustarse a los criterios de verificacioacuten que define la norma

Un sintetizador no tiene por queacute interpretar todas las construcciones VHDL

que acepta sino soacutelo las que impone la norma IEEE 10766

Las construcciones VHDL se clasifican en

Soportadas El sintetizador debe interpretar la construccioacuten es decir mapearla en

hardware

Ignoradas El sintetizador debe ignorar la construccioacuten El procesamiento de esta

construccioacuten no debe provocar un error de siacutentesis si bien la simulacioacuten del

circuito simulado puede diferir de la del coacutedigo VHDL original La herramienta de

siacutentesis puede informar al usuario de que esa construccioacuten no estaacute definida por el

estaacutendar

No soportadas El sintetizador no soporta la construccioacuten Se supone que estas

construcciones no deben aparecer en el coacutedigo VHDL por lo que el modo de fallo

estaacute indefinido

RESTRICCIONES

Valores de inicializacioacuten no se aceptan los asignados a objetos en la definicioacuten

El modelo debe poseer un mecanismo de inicializacioacuten hardware externo (sentildeal de

reset)

constant tpd TIME = 15 ns signal AB std_logic=lsquo0rsquo A lt= 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)

Fiacutesicos (no se aceptan se ignoran)

Compuestos

Vectores (si se aceptan)

Registro (si se aceptan)

Ficheros (no se aceptan)

Acceso (no se aceptan)

Ademaacutes debe soportar los tipos definidos por el usuario y sus tipos derivados

TIPOS ESCALARES ENTEROS

Los tipos INTEGER estaacuten soportados asiacute como sus derivados NATURAL y POSITIVE

Si no se limita el rango el nuacutemero de bits a emplear en la codificacioacuten dependeraacute 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 seguacuten las necesidades de la aplicacioacuten

La norma recomienda que durante la implementacioacuten el sintetizador convierta los

tipos enteros a su tipo equivalente definido en el paquete

NUMERIC_BIT (derivados de bit_vector)

Si el rango contiene soacutelo 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 rangosignal A integer range 8 to 10-- Se sintetiza igual (4 bits) quesignal A integer range 0 to 15

Tipos baacutesicos predefinidos

INTEGER A veces utilizado para iacutendices de loops

constantes valores geneacutericos etc

BOOLEAN Pueden tomar los valores lsquotruersquo oacute lsquofalsersquo

ENUMERATED Enumeracioacuten de valores definidos por el

usuario

TIPOS COMPUESTOS

BIT Puede tomar los valores lsquo0rsquo oacute lsquo1rsquo

BIT_VECTOR Agrupacioacuten de bits

signal salida BIT_VECTOR (0 to 3) signal salida BIT_VECTOR (3 downto

salida lt=ldquo1000rdquo

esto significa que

salida(0)=lsquo1rsquo

salida(1)=lsquo0rsquo

salida(2)=lsquo0rsquo

salida(3)=lsquo0rsquo

0)

salida lt=ldquo1000rdquo

esto significa que

salida(3)=lsquo1rsquo

salida(2)=lsquo0rsquo

salida(1)=lsquo0rsquo

salida(0)=lsquo0

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 estaacutendares industriales

Todos los valores son vaacutelidos en un simulador VHDL sin embargo Solo lsquo0rsquo lsquo1rsquo lsquoZrsquo lsquoLrsquo lsquoHrsquo y

lsquolsquondashrsquo se reconocen para la siacutentesis

En el paquete IEEEstd_logic_1164 aparecen otros dos tipos

std_ulogic y std_ulogic_vector Son los mismos pero sin haber pasado por la funcioacuten de

resolucioacuten

Esta funcioacuten decide cuaacutel debe ser el valor de la sentildeal cuando tiene dos fuentes que le

asignan valores distintos Por ejemplo si una fuente asigna un lsquo1rsquo y la otra una lsquoLrsquo la

funcioacuten de resolucioacuten dice que la sentildeal se queda a lsquo1rsquo

ATRIBUTOS

El uso de atributos por parte de los sintetizadores para controlar ciertos aspectos

de la siacutentesis es algo muy comuacuten si bien soacutelo ENUM_ENCODING estaacute normalizado

El atributo ENUM_ENCODING permite especificar la codificacioacuten de un tipo

enumerado

En cualquier caso el coacutedigo fuente debe incluir la declaracioacuten 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 COLORtype is 10000 01000 00100

00010 00001

INTERPRETACIOacuteN DE TIPOS CON SEMAacuteNTICA

HARDWARE

Tratamiento del valor de alta impedancia lsquoZrsquo

Su uso solo estaacute permitido en asignaciones condicionales cuando forma parte del

valor de salida de una de las condiciones

Representa un dispositivo con salida en alta impedancia

Para poder interpretarlo el tipo de semaacutentica se ilustra un ejemplo siguiente

Si los literales aparecen en comparaciones de igualdaddesigualdad eacutestas siempre se

evaluacutean como falsasciertas

process(A)

begin

if (A = 00_0) then

B lt= 1

Si

B lt= 0

signal ABSE std_logic

S lt= (A and B) when E=lsquo1rsquo else

lsquoZrsquo

else

B lt= 0

end if

end process

B lt= 1 when (A = 00_0) else 0

Si los literales aparecen en sentencias case with select el sintetizador interpreta que

dicha opcioacuten no va a ocurrir

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when 01X =gt

S lt= 0

when others =gt

S lt= 0

end case

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when others =gt

S lt= 0

end case

with sel select

S lt= 0 when 00

S lt= 1 when 01

with sel select

S lt= 0 when 00

S lt= 1 when 01

S lt= 0 when 1X

Para operadores loacutegicos se considera como un error

B lt= (A and ldquo00X1rdquo) -- error

Para operadores relacionales se considera como un error

if sltldquo00-01 then

zlt=rsquo0

else

zlt=rsquo1

end if

D lt= lsquo1rsquo when (A gt ldquo00X1rdquo) else lsquo0rsquo

OBSERVACION Para las operaciones de concatenacioacuten y conversioacuten de tipos la norma no

establece ninguna restriccioacuten durante la siacutentesis

DECLARACIONES EN VHDL PARA SIacuteNTESIS

DECLARACIOacuteN DE COMPONENTES

La declaracioacuten de componentes debe estar soportada salvo la palabra reservada is

component identificador is

[ declaracioacuten_geneacutericos]

[ declaracioacuten puertos]

end component [ identificador]

component registro

generic(N Integer = 8) -- Nuacutemero de bits

port ( CLOCK in std_logic

RESET in std_logic

D in std_logic_vector(N-1 downto 0)

Q out std_logic_vector(N-1 downto 0))

end component

MODELADO DE CIRCUITOS COMBINACIONALES

ŠEl modelado de circuitos combinacionales puede realizarse

Mediante asignaciones concurrentes de sentildeal

Mediante procesos mayor flexibilidad

ŠToda asignacioacuten concurrente de sentildeal tiene su modelo equivalente mediante un proceso

ŠIndependientemente del meacutetodo 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 maacutes complejos es preferible emplear procesos debido

a su mayor flexibilidad

architecture rtl of ejemplo is

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 5: SINTESIS VHDL

No soportadas El sintetizador no soporta la construccioacuten Se supone que estas

construcciones no deben aparecer en el coacutedigo VHDL por lo que el modo de fallo

estaacute indefinido

RESTRICCIONES

Valores de inicializacioacuten no se aceptan los asignados a objetos en la definicioacuten

El modelo debe poseer un mecanismo de inicializacioacuten hardware externo (sentildeal de

reset)

constant tpd TIME = 15 ns signal AB std_logic=lsquo0rsquo A lt= 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)

Fiacutesicos (no se aceptan se ignoran)

Compuestos

Vectores (si se aceptan)

Registro (si se aceptan)

Ficheros (no se aceptan)

Acceso (no se aceptan)

Ademaacutes debe soportar los tipos definidos por el usuario y sus tipos derivados

TIPOS ESCALARES ENTEROS

Los tipos INTEGER estaacuten soportados asiacute como sus derivados NATURAL y POSITIVE

Si no se limita el rango el nuacutemero de bits a emplear en la codificacioacuten dependeraacute 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 seguacuten las necesidades de la aplicacioacuten

La norma recomienda que durante la implementacioacuten el sintetizador convierta los

tipos enteros a su tipo equivalente definido en el paquete

NUMERIC_BIT (derivados de bit_vector)

Si el rango contiene soacutelo 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 rangosignal A integer range 8 to 10-- Se sintetiza igual (4 bits) quesignal A integer range 0 to 15

Tipos baacutesicos predefinidos

INTEGER A veces utilizado para iacutendices de loops

constantes valores geneacutericos etc

BOOLEAN Pueden tomar los valores lsquotruersquo oacute lsquofalsersquo

ENUMERATED Enumeracioacuten de valores definidos por el

usuario

TIPOS COMPUESTOS

BIT Puede tomar los valores lsquo0rsquo oacute lsquo1rsquo

BIT_VECTOR Agrupacioacuten de bits

signal salida BIT_VECTOR (0 to 3) signal salida BIT_VECTOR (3 downto

salida lt=ldquo1000rdquo

esto significa que

salida(0)=lsquo1rsquo

salida(1)=lsquo0rsquo

salida(2)=lsquo0rsquo

salida(3)=lsquo0rsquo

0)

salida lt=ldquo1000rdquo

esto significa que

salida(3)=lsquo1rsquo

salida(2)=lsquo0rsquo

salida(1)=lsquo0rsquo

salida(0)=lsquo0

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 estaacutendares industriales

Todos los valores son vaacutelidos en un simulador VHDL sin embargo Solo lsquo0rsquo lsquo1rsquo lsquoZrsquo lsquoLrsquo lsquoHrsquo y

lsquolsquondashrsquo se reconocen para la siacutentesis

En el paquete IEEEstd_logic_1164 aparecen otros dos tipos

std_ulogic y std_ulogic_vector Son los mismos pero sin haber pasado por la funcioacuten de

resolucioacuten

Esta funcioacuten decide cuaacutel debe ser el valor de la sentildeal cuando tiene dos fuentes que le

asignan valores distintos Por ejemplo si una fuente asigna un lsquo1rsquo y la otra una lsquoLrsquo la

funcioacuten de resolucioacuten dice que la sentildeal se queda a lsquo1rsquo

ATRIBUTOS

El uso de atributos por parte de los sintetizadores para controlar ciertos aspectos

de la siacutentesis es algo muy comuacuten si bien soacutelo ENUM_ENCODING estaacute normalizado

El atributo ENUM_ENCODING permite especificar la codificacioacuten de un tipo

enumerado

En cualquier caso el coacutedigo fuente debe incluir la declaracioacuten 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 COLORtype is 10000 01000 00100

00010 00001

INTERPRETACIOacuteN DE TIPOS CON SEMAacuteNTICA

HARDWARE

Tratamiento del valor de alta impedancia lsquoZrsquo

Su uso solo estaacute permitido en asignaciones condicionales cuando forma parte del

valor de salida de una de las condiciones

Representa un dispositivo con salida en alta impedancia

Para poder interpretarlo el tipo de semaacutentica se ilustra un ejemplo siguiente

Si los literales aparecen en comparaciones de igualdaddesigualdad eacutestas siempre se

evaluacutean como falsasciertas

process(A)

begin

if (A = 00_0) then

B lt= 1

Si

B lt= 0

signal ABSE std_logic

S lt= (A and B) when E=lsquo1rsquo else

lsquoZrsquo

else

B lt= 0

end if

end process

B lt= 1 when (A = 00_0) else 0

Si los literales aparecen en sentencias case with select el sintetizador interpreta que

dicha opcioacuten no va a ocurrir

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when 01X =gt

S lt= 0

when others =gt

S lt= 0

end case

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when others =gt

S lt= 0

end case

with sel select

S lt= 0 when 00

S lt= 1 when 01

with sel select

S lt= 0 when 00

S lt= 1 when 01

S lt= 0 when 1X

Para operadores loacutegicos se considera como un error

B lt= (A and ldquo00X1rdquo) -- error

Para operadores relacionales se considera como un error

if sltldquo00-01 then

zlt=rsquo0

else

zlt=rsquo1

end if

D lt= lsquo1rsquo when (A gt ldquo00X1rdquo) else lsquo0rsquo

OBSERVACION Para las operaciones de concatenacioacuten y conversioacuten de tipos la norma no

establece ninguna restriccioacuten durante la siacutentesis

DECLARACIONES EN VHDL PARA SIacuteNTESIS

DECLARACIOacuteN DE COMPONENTES

La declaracioacuten de componentes debe estar soportada salvo la palabra reservada is

component identificador is

[ declaracioacuten_geneacutericos]

[ declaracioacuten puertos]

end component [ identificador]

component registro

generic(N Integer = 8) -- Nuacutemero de bits

port ( CLOCK in std_logic

RESET in std_logic

D in std_logic_vector(N-1 downto 0)

Q out std_logic_vector(N-1 downto 0))

end component

MODELADO DE CIRCUITOS COMBINACIONALES

ŠEl modelado de circuitos combinacionales puede realizarse

Mediante asignaciones concurrentes de sentildeal

Mediante procesos mayor flexibilidad

ŠToda asignacioacuten concurrente de sentildeal tiene su modelo equivalente mediante un proceso

ŠIndependientemente del meacutetodo 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 maacutes complejos es preferible emplear procesos debido

a su mayor flexibilidad

architecture rtl of ejemplo is

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 6: SINTESIS VHDL

Enteros (si se aceptan)

Reales (no se aceptan se ignoran)

Enumerados (si se aceptan)

Fiacutesicos (no se aceptan se ignoran)

Compuestos

Vectores (si se aceptan)

Registro (si se aceptan)

Ficheros (no se aceptan)

Acceso (no se aceptan)

Ademaacutes debe soportar los tipos definidos por el usuario y sus tipos derivados

TIPOS ESCALARES ENTEROS

Los tipos INTEGER estaacuten soportados asiacute como sus derivados NATURAL y POSITIVE

Si no se limita el rango el nuacutemero de bits a emplear en la codificacioacuten dependeraacute 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 seguacuten las necesidades de la aplicacioacuten

La norma recomienda que durante la implementacioacuten el sintetizador convierta los

tipos enteros a su tipo equivalente definido en el paquete

NUMERIC_BIT (derivados de bit_vector)

Si el rango contiene soacutelo 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 rangosignal A integer range 8 to 10-- Se sintetiza igual (4 bits) quesignal A integer range 0 to 15

Tipos baacutesicos predefinidos

INTEGER A veces utilizado para iacutendices de loops

constantes valores geneacutericos etc

BOOLEAN Pueden tomar los valores lsquotruersquo oacute lsquofalsersquo

ENUMERATED Enumeracioacuten de valores definidos por el

usuario

TIPOS COMPUESTOS

BIT Puede tomar los valores lsquo0rsquo oacute lsquo1rsquo

BIT_VECTOR Agrupacioacuten de bits

signal salida BIT_VECTOR (0 to 3) signal salida BIT_VECTOR (3 downto

salida lt=ldquo1000rdquo

esto significa que

salida(0)=lsquo1rsquo

salida(1)=lsquo0rsquo

salida(2)=lsquo0rsquo

salida(3)=lsquo0rsquo

0)

salida lt=ldquo1000rdquo

esto significa que

salida(3)=lsquo1rsquo

salida(2)=lsquo0rsquo

salida(1)=lsquo0rsquo

salida(0)=lsquo0

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 estaacutendares industriales

Todos los valores son vaacutelidos en un simulador VHDL sin embargo Solo lsquo0rsquo lsquo1rsquo lsquoZrsquo lsquoLrsquo lsquoHrsquo y

lsquolsquondashrsquo se reconocen para la siacutentesis

En el paquete IEEEstd_logic_1164 aparecen otros dos tipos

std_ulogic y std_ulogic_vector Son los mismos pero sin haber pasado por la funcioacuten de

resolucioacuten

Esta funcioacuten decide cuaacutel debe ser el valor de la sentildeal cuando tiene dos fuentes que le

asignan valores distintos Por ejemplo si una fuente asigna un lsquo1rsquo y la otra una lsquoLrsquo la

funcioacuten de resolucioacuten dice que la sentildeal se queda a lsquo1rsquo

ATRIBUTOS

El uso de atributos por parte de los sintetizadores para controlar ciertos aspectos

de la siacutentesis es algo muy comuacuten si bien soacutelo ENUM_ENCODING estaacute normalizado

El atributo ENUM_ENCODING permite especificar la codificacioacuten de un tipo

enumerado

En cualquier caso el coacutedigo fuente debe incluir la declaracioacuten 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 COLORtype is 10000 01000 00100

00010 00001

INTERPRETACIOacuteN DE TIPOS CON SEMAacuteNTICA

HARDWARE

Tratamiento del valor de alta impedancia lsquoZrsquo

Su uso solo estaacute permitido en asignaciones condicionales cuando forma parte del

valor de salida de una de las condiciones

Representa un dispositivo con salida en alta impedancia

Para poder interpretarlo el tipo de semaacutentica se ilustra un ejemplo siguiente

Si los literales aparecen en comparaciones de igualdaddesigualdad eacutestas siempre se

evaluacutean como falsasciertas

process(A)

begin

if (A = 00_0) then

B lt= 1

Si

B lt= 0

signal ABSE std_logic

S lt= (A and B) when E=lsquo1rsquo else

lsquoZrsquo

else

B lt= 0

end if

end process

B lt= 1 when (A = 00_0) else 0

Si los literales aparecen en sentencias case with select el sintetizador interpreta que

dicha opcioacuten no va a ocurrir

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when 01X =gt

S lt= 0

when others =gt

S lt= 0

end case

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when others =gt

S lt= 0

end case

with sel select

S lt= 0 when 00

S lt= 1 when 01

with sel select

S lt= 0 when 00

S lt= 1 when 01

S lt= 0 when 1X

Para operadores loacutegicos se considera como un error

B lt= (A and ldquo00X1rdquo) -- error

Para operadores relacionales se considera como un error

if sltldquo00-01 then

zlt=rsquo0

else

zlt=rsquo1

end if

D lt= lsquo1rsquo when (A gt ldquo00X1rdquo) else lsquo0rsquo

OBSERVACION Para las operaciones de concatenacioacuten y conversioacuten de tipos la norma no

establece ninguna restriccioacuten durante la siacutentesis

DECLARACIONES EN VHDL PARA SIacuteNTESIS

DECLARACIOacuteN DE COMPONENTES

La declaracioacuten de componentes debe estar soportada salvo la palabra reservada is

component identificador is

[ declaracioacuten_geneacutericos]

[ declaracioacuten puertos]

end component [ identificador]

component registro

generic(N Integer = 8) -- Nuacutemero de bits

port ( CLOCK in std_logic

RESET in std_logic

D in std_logic_vector(N-1 downto 0)

Q out std_logic_vector(N-1 downto 0))

end component

MODELADO DE CIRCUITOS COMBINACIONALES

ŠEl modelado de circuitos combinacionales puede realizarse

Mediante asignaciones concurrentes de sentildeal

Mediante procesos mayor flexibilidad

ŠToda asignacioacuten concurrente de sentildeal tiene su modelo equivalente mediante un proceso

ŠIndependientemente del meacutetodo 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 maacutes complejos es preferible emplear procesos debido

a su mayor flexibilidad

architecture rtl of ejemplo is

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 7: SINTESIS VHDL

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 rangosignal A integer range 8 to 10-- Se sintetiza igual (4 bits) quesignal A integer range 0 to 15

Tipos baacutesicos predefinidos

INTEGER A veces utilizado para iacutendices de loops

constantes valores geneacutericos etc

BOOLEAN Pueden tomar los valores lsquotruersquo oacute lsquofalsersquo

ENUMERATED Enumeracioacuten de valores definidos por el

usuario

TIPOS COMPUESTOS

BIT Puede tomar los valores lsquo0rsquo oacute lsquo1rsquo

BIT_VECTOR Agrupacioacuten de bits

signal salida BIT_VECTOR (0 to 3) signal salida BIT_VECTOR (3 downto

salida lt=ldquo1000rdquo

esto significa que

salida(0)=lsquo1rsquo

salida(1)=lsquo0rsquo

salida(2)=lsquo0rsquo

salida(3)=lsquo0rsquo

0)

salida lt=ldquo1000rdquo

esto significa que

salida(3)=lsquo1rsquo

salida(2)=lsquo0rsquo

salida(1)=lsquo0rsquo

salida(0)=lsquo0

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 estaacutendares industriales

Todos los valores son vaacutelidos en un simulador VHDL sin embargo Solo lsquo0rsquo lsquo1rsquo lsquoZrsquo lsquoLrsquo lsquoHrsquo y

lsquolsquondashrsquo se reconocen para la siacutentesis

En el paquete IEEEstd_logic_1164 aparecen otros dos tipos

std_ulogic y std_ulogic_vector Son los mismos pero sin haber pasado por la funcioacuten de

resolucioacuten

Esta funcioacuten decide cuaacutel debe ser el valor de la sentildeal cuando tiene dos fuentes que le

asignan valores distintos Por ejemplo si una fuente asigna un lsquo1rsquo y la otra una lsquoLrsquo la

funcioacuten de resolucioacuten dice que la sentildeal se queda a lsquo1rsquo

ATRIBUTOS

El uso de atributos por parte de los sintetizadores para controlar ciertos aspectos

de la siacutentesis es algo muy comuacuten si bien soacutelo ENUM_ENCODING estaacute normalizado

El atributo ENUM_ENCODING permite especificar la codificacioacuten de un tipo

enumerado

En cualquier caso el coacutedigo fuente debe incluir la declaracioacuten 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 COLORtype is 10000 01000 00100

00010 00001

INTERPRETACIOacuteN DE TIPOS CON SEMAacuteNTICA

HARDWARE

Tratamiento del valor de alta impedancia lsquoZrsquo

Su uso solo estaacute permitido en asignaciones condicionales cuando forma parte del

valor de salida de una de las condiciones

Representa un dispositivo con salida en alta impedancia

Para poder interpretarlo el tipo de semaacutentica se ilustra un ejemplo siguiente

Si los literales aparecen en comparaciones de igualdaddesigualdad eacutestas siempre se

evaluacutean como falsasciertas

process(A)

begin

if (A = 00_0) then

B lt= 1

Si

B lt= 0

signal ABSE std_logic

S lt= (A and B) when E=lsquo1rsquo else

lsquoZrsquo

else

B lt= 0

end if

end process

B lt= 1 when (A = 00_0) else 0

Si los literales aparecen en sentencias case with select el sintetizador interpreta que

dicha opcioacuten no va a ocurrir

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when 01X =gt

S lt= 0

when others =gt

S lt= 0

end case

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when others =gt

S lt= 0

end case

with sel select

S lt= 0 when 00

S lt= 1 when 01

with sel select

S lt= 0 when 00

S lt= 1 when 01

S lt= 0 when 1X

Para operadores loacutegicos se considera como un error

B lt= (A and ldquo00X1rdquo) -- error

Para operadores relacionales se considera como un error

if sltldquo00-01 then

zlt=rsquo0

else

zlt=rsquo1

end if

D lt= lsquo1rsquo when (A gt ldquo00X1rdquo) else lsquo0rsquo

OBSERVACION Para las operaciones de concatenacioacuten y conversioacuten de tipos la norma no

establece ninguna restriccioacuten durante la siacutentesis

DECLARACIONES EN VHDL PARA SIacuteNTESIS

DECLARACIOacuteN DE COMPONENTES

La declaracioacuten de componentes debe estar soportada salvo la palabra reservada is

component identificador is

[ declaracioacuten_geneacutericos]

[ declaracioacuten puertos]

end component [ identificador]

component registro

generic(N Integer = 8) -- Nuacutemero de bits

port ( CLOCK in std_logic

RESET in std_logic

D in std_logic_vector(N-1 downto 0)

Q out std_logic_vector(N-1 downto 0))

end component

MODELADO DE CIRCUITOS COMBINACIONALES

ŠEl modelado de circuitos combinacionales puede realizarse

Mediante asignaciones concurrentes de sentildeal

Mediante procesos mayor flexibilidad

ŠToda asignacioacuten concurrente de sentildeal tiene su modelo equivalente mediante un proceso

ŠIndependientemente del meacutetodo 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 maacutes complejos es preferible emplear procesos debido

a su mayor flexibilidad

architecture rtl of ejemplo is

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 8: SINTESIS VHDL

salida lt=ldquo1000rdquo

esto significa que

salida(0)=lsquo1rsquo

salida(1)=lsquo0rsquo

salida(2)=lsquo0rsquo

salida(3)=lsquo0rsquo

0)

salida lt=ldquo1000rdquo

esto significa que

salida(3)=lsquo1rsquo

salida(2)=lsquo0rsquo

salida(1)=lsquo0rsquo

salida(0)=lsquo0

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 estaacutendares industriales

Todos los valores son vaacutelidos en un simulador VHDL sin embargo Solo lsquo0rsquo lsquo1rsquo lsquoZrsquo lsquoLrsquo lsquoHrsquo y

lsquolsquondashrsquo se reconocen para la siacutentesis

En el paquete IEEEstd_logic_1164 aparecen otros dos tipos

std_ulogic y std_ulogic_vector Son los mismos pero sin haber pasado por la funcioacuten de

resolucioacuten

Esta funcioacuten decide cuaacutel debe ser el valor de la sentildeal cuando tiene dos fuentes que le

asignan valores distintos Por ejemplo si una fuente asigna un lsquo1rsquo y la otra una lsquoLrsquo la

funcioacuten de resolucioacuten dice que la sentildeal se queda a lsquo1rsquo

ATRIBUTOS

El uso de atributos por parte de los sintetizadores para controlar ciertos aspectos

de la siacutentesis es algo muy comuacuten si bien soacutelo ENUM_ENCODING estaacute normalizado

El atributo ENUM_ENCODING permite especificar la codificacioacuten de un tipo

enumerado

En cualquier caso el coacutedigo fuente debe incluir la declaracioacuten 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 COLORtype is 10000 01000 00100

00010 00001

INTERPRETACIOacuteN DE TIPOS CON SEMAacuteNTICA

HARDWARE

Tratamiento del valor de alta impedancia lsquoZrsquo

Su uso solo estaacute permitido en asignaciones condicionales cuando forma parte del

valor de salida de una de las condiciones

Representa un dispositivo con salida en alta impedancia

Para poder interpretarlo el tipo de semaacutentica se ilustra un ejemplo siguiente

Si los literales aparecen en comparaciones de igualdaddesigualdad eacutestas siempre se

evaluacutean como falsasciertas

process(A)

begin

if (A = 00_0) then

B lt= 1

Si

B lt= 0

signal ABSE std_logic

S lt= (A and B) when E=lsquo1rsquo else

lsquoZrsquo

else

B lt= 0

end if

end process

B lt= 1 when (A = 00_0) else 0

Si los literales aparecen en sentencias case with select el sintetizador interpreta que

dicha opcioacuten no va a ocurrir

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when 01X =gt

S lt= 0

when others =gt

S lt= 0

end case

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when others =gt

S lt= 0

end case

with sel select

S lt= 0 when 00

S lt= 1 when 01

with sel select

S lt= 0 when 00

S lt= 1 when 01

S lt= 0 when 1X

Para operadores loacutegicos se considera como un error

B lt= (A and ldquo00X1rdquo) -- error

Para operadores relacionales se considera como un error

if sltldquo00-01 then

zlt=rsquo0

else

zlt=rsquo1

end if

D lt= lsquo1rsquo when (A gt ldquo00X1rdquo) else lsquo0rsquo

OBSERVACION Para las operaciones de concatenacioacuten y conversioacuten de tipos la norma no

establece ninguna restriccioacuten durante la siacutentesis

DECLARACIONES EN VHDL PARA SIacuteNTESIS

DECLARACIOacuteN DE COMPONENTES

La declaracioacuten de componentes debe estar soportada salvo la palabra reservada is

component identificador is

[ declaracioacuten_geneacutericos]

[ declaracioacuten puertos]

end component [ identificador]

component registro

generic(N Integer = 8) -- Nuacutemero de bits

port ( CLOCK in std_logic

RESET in std_logic

D in std_logic_vector(N-1 downto 0)

Q out std_logic_vector(N-1 downto 0))

end component

MODELADO DE CIRCUITOS COMBINACIONALES

ŠEl modelado de circuitos combinacionales puede realizarse

Mediante asignaciones concurrentes de sentildeal

Mediante procesos mayor flexibilidad

ŠToda asignacioacuten concurrente de sentildeal tiene su modelo equivalente mediante un proceso

ŠIndependientemente del meacutetodo 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 maacutes complejos es preferible emplear procesos debido

a su mayor flexibilidad

architecture rtl of ejemplo is

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 9: SINTESIS VHDL

Esta funcioacuten decide cuaacutel debe ser el valor de la sentildeal cuando tiene dos fuentes que le

asignan valores distintos Por ejemplo si una fuente asigna un lsquo1rsquo y la otra una lsquoLrsquo la

funcioacuten de resolucioacuten dice que la sentildeal se queda a lsquo1rsquo

ATRIBUTOS

El uso de atributos por parte de los sintetizadores para controlar ciertos aspectos

de la siacutentesis es algo muy comuacuten si bien soacutelo ENUM_ENCODING estaacute normalizado

El atributo ENUM_ENCODING permite especificar la codificacioacuten de un tipo

enumerado

En cualquier caso el coacutedigo fuente debe incluir la declaracioacuten 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 COLORtype is 10000 01000 00100

00010 00001

INTERPRETACIOacuteN DE TIPOS CON SEMAacuteNTICA

HARDWARE

Tratamiento del valor de alta impedancia lsquoZrsquo

Su uso solo estaacute permitido en asignaciones condicionales cuando forma parte del

valor de salida de una de las condiciones

Representa un dispositivo con salida en alta impedancia

Para poder interpretarlo el tipo de semaacutentica se ilustra un ejemplo siguiente

Si los literales aparecen en comparaciones de igualdaddesigualdad eacutestas siempre se

evaluacutean como falsasciertas

process(A)

begin

if (A = 00_0) then

B lt= 1

Si

B lt= 0

signal ABSE std_logic

S lt= (A and B) when E=lsquo1rsquo else

lsquoZrsquo

else

B lt= 0

end if

end process

B lt= 1 when (A = 00_0) else 0

Si los literales aparecen en sentencias case with select el sintetizador interpreta que

dicha opcioacuten no va a ocurrir

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when 01X =gt

S lt= 0

when others =gt

S lt= 0

end case

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when others =gt

S lt= 0

end case

with sel select

S lt= 0 when 00

S lt= 1 when 01

with sel select

S lt= 0 when 00

S lt= 1 when 01

S lt= 0 when 1X

Para operadores loacutegicos se considera como un error

B lt= (A and ldquo00X1rdquo) -- error

Para operadores relacionales se considera como un error

if sltldquo00-01 then

zlt=rsquo0

else

zlt=rsquo1

end if

D lt= lsquo1rsquo when (A gt ldquo00X1rdquo) else lsquo0rsquo

OBSERVACION Para las operaciones de concatenacioacuten y conversioacuten de tipos la norma no

establece ninguna restriccioacuten durante la siacutentesis

DECLARACIONES EN VHDL PARA SIacuteNTESIS

DECLARACIOacuteN DE COMPONENTES

La declaracioacuten de componentes debe estar soportada salvo la palabra reservada is

component identificador is

[ declaracioacuten_geneacutericos]

[ declaracioacuten puertos]

end component [ identificador]

component registro

generic(N Integer = 8) -- Nuacutemero de bits

port ( CLOCK in std_logic

RESET in std_logic

D in std_logic_vector(N-1 downto 0)

Q out std_logic_vector(N-1 downto 0))

end component

MODELADO DE CIRCUITOS COMBINACIONALES

ŠEl modelado de circuitos combinacionales puede realizarse

Mediante asignaciones concurrentes de sentildeal

Mediante procesos mayor flexibilidad

ŠToda asignacioacuten concurrente de sentildeal tiene su modelo equivalente mediante un proceso

ŠIndependientemente del meacutetodo 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 maacutes complejos es preferible emplear procesos debido

a su mayor flexibilidad

architecture rtl of ejemplo is

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 10: SINTESIS VHDL

Su uso solo estaacute permitido en asignaciones condicionales cuando forma parte del

valor de salida de una de las condiciones

Representa un dispositivo con salida en alta impedancia

Para poder interpretarlo el tipo de semaacutentica se ilustra un ejemplo siguiente

Si los literales aparecen en comparaciones de igualdaddesigualdad eacutestas siempre se

evaluacutean como falsasciertas

process(A)

begin

if (A = 00_0) then

B lt= 1

Si

B lt= 0

signal ABSE std_logic

S lt= (A and B) when E=lsquo1rsquo else

lsquoZrsquo

else

B lt= 0

end if

end process

B lt= 1 when (A = 00_0) else 0

Si los literales aparecen en sentencias case with select el sintetizador interpreta que

dicha opcioacuten no va a ocurrir

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when 01X =gt

S lt= 0

when others =gt

S lt= 0

end case

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when others =gt

S lt= 0

end case

with sel select

S lt= 0 when 00

S lt= 1 when 01

with sel select

S lt= 0 when 00

S lt= 1 when 01

S lt= 0 when 1X

Para operadores loacutegicos se considera como un error

B lt= (A and ldquo00X1rdquo) -- error

Para operadores relacionales se considera como un error

if sltldquo00-01 then

zlt=rsquo0

else

zlt=rsquo1

end if

D lt= lsquo1rsquo when (A gt ldquo00X1rdquo) else lsquo0rsquo

OBSERVACION Para las operaciones de concatenacioacuten y conversioacuten de tipos la norma no

establece ninguna restriccioacuten durante la siacutentesis

DECLARACIONES EN VHDL PARA SIacuteNTESIS

DECLARACIOacuteN DE COMPONENTES

La declaracioacuten de componentes debe estar soportada salvo la palabra reservada is

component identificador is

[ declaracioacuten_geneacutericos]

[ declaracioacuten puertos]

end component [ identificador]

component registro

generic(N Integer = 8) -- Nuacutemero de bits

port ( CLOCK in std_logic

RESET in std_logic

D in std_logic_vector(N-1 downto 0)

Q out std_logic_vector(N-1 downto 0))

end component

MODELADO DE CIRCUITOS COMBINACIONALES

ŠEl modelado de circuitos combinacionales puede realizarse

Mediante asignaciones concurrentes de sentildeal

Mediante procesos mayor flexibilidad

ŠToda asignacioacuten concurrente de sentildeal tiene su modelo equivalente mediante un proceso

ŠIndependientemente del meacutetodo 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 maacutes complejos es preferible emplear procesos debido

a su mayor flexibilidad

architecture rtl of ejemplo is

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 11: SINTESIS VHDL

else

B lt= 0

end if

end process

B lt= 1 when (A = 00_0) else 0

Si los literales aparecen en sentencias case with select el sintetizador interpreta que

dicha opcioacuten no va a ocurrir

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when 01X =gt

S lt= 0

when others =gt

S lt= 0

end case

case sel is

when 000 =gt

S lt= 0

when 001 =gt

S lt= 1

when others =gt

S lt= 0

end case

with sel select

S lt= 0 when 00

S lt= 1 when 01

with sel select

S lt= 0 when 00

S lt= 1 when 01

S lt= 0 when 1X

Para operadores loacutegicos se considera como un error

B lt= (A and ldquo00X1rdquo) -- error

Para operadores relacionales se considera como un error

if sltldquo00-01 then

zlt=rsquo0

else

zlt=rsquo1

end if

D lt= lsquo1rsquo when (A gt ldquo00X1rdquo) else lsquo0rsquo

OBSERVACION Para las operaciones de concatenacioacuten y conversioacuten de tipos la norma no

establece ninguna restriccioacuten durante la siacutentesis

DECLARACIONES EN VHDL PARA SIacuteNTESIS

DECLARACIOacuteN DE COMPONENTES

La declaracioacuten de componentes debe estar soportada salvo la palabra reservada is

component identificador is

[ declaracioacuten_geneacutericos]

[ declaracioacuten puertos]

end component [ identificador]

component registro

generic(N Integer = 8) -- Nuacutemero de bits

port ( CLOCK in std_logic

RESET in std_logic

D in std_logic_vector(N-1 downto 0)

Q out std_logic_vector(N-1 downto 0))

end component

MODELADO DE CIRCUITOS COMBINACIONALES

ŠEl modelado de circuitos combinacionales puede realizarse

Mediante asignaciones concurrentes de sentildeal

Mediante procesos mayor flexibilidad

ŠToda asignacioacuten concurrente de sentildeal tiene su modelo equivalente mediante un proceso

ŠIndependientemente del meacutetodo 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 maacutes complejos es preferible emplear procesos debido

a su mayor flexibilidad

architecture rtl of ejemplo is

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 12: SINTESIS VHDL

S lt= 0 when 1X

Para operadores loacutegicos se considera como un error

B lt= (A and ldquo00X1rdquo) -- error

Para operadores relacionales se considera como un error

if sltldquo00-01 then

zlt=rsquo0

else

zlt=rsquo1

end if

D lt= lsquo1rsquo when (A gt ldquo00X1rdquo) else lsquo0rsquo

OBSERVACION Para las operaciones de concatenacioacuten y conversioacuten de tipos la norma no

establece ninguna restriccioacuten durante la siacutentesis

DECLARACIONES EN VHDL PARA SIacuteNTESIS

DECLARACIOacuteN DE COMPONENTES

La declaracioacuten de componentes debe estar soportada salvo la palabra reservada is

component identificador is

[ declaracioacuten_geneacutericos]

[ declaracioacuten puertos]

end component [ identificador]

component registro

generic(N Integer = 8) -- Nuacutemero de bits

port ( CLOCK in std_logic

RESET in std_logic

D in std_logic_vector(N-1 downto 0)

Q out std_logic_vector(N-1 downto 0))

end component

MODELADO DE CIRCUITOS COMBINACIONALES

ŠEl modelado de circuitos combinacionales puede realizarse

Mediante asignaciones concurrentes de sentildeal

Mediante procesos mayor flexibilidad

ŠToda asignacioacuten concurrente de sentildeal tiene su modelo equivalente mediante un proceso

ŠIndependientemente del meacutetodo 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 maacutes complejos es preferible emplear procesos debido

a su mayor flexibilidad

architecture rtl of ejemplo is

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 13: SINTESIS VHDL

La declaracioacuten de componentes debe estar soportada salvo la palabra reservada is

component identificador is

[ declaracioacuten_geneacutericos]

[ declaracioacuten puertos]

end component [ identificador]

component registro

generic(N Integer = 8) -- Nuacutemero de bits

port ( CLOCK in std_logic

RESET in std_logic

D in std_logic_vector(N-1 downto 0)

Q out std_logic_vector(N-1 downto 0))

end component

MODELADO DE CIRCUITOS COMBINACIONALES

ŠEl modelado de circuitos combinacionales puede realizarse

Mediante asignaciones concurrentes de sentildeal

Mediante procesos mayor flexibilidad

ŠToda asignacioacuten concurrente de sentildeal tiene su modelo equivalente mediante un proceso

ŠIndependientemente del meacutetodo 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 maacutes complejos es preferible emplear procesos debido

a su mayor flexibilidad

architecture rtl of ejemplo is

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 14: SINTESIS VHDL

signal ABCDE std_logic

begin

D lt= A or B

E lt= D and C

end rtl

ŠEstas estructuras se implementan mediante multiplexores

sel lt= sel1 amp sel0

with sel select

z lt= D0 when ldquo00rdquo

D1 when ldquo01rdquo

D2 when ldquo10rdquo

D3 when ldquo11rdquo

lsquoXrsquo when others

El anidamiento de las claacuteusulas condicionales se traduce en una cadena de multiplexores

conectados en cascada

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 15: SINTESIS VHDL

sel lt= sel1 amp sel0

z lt= D0 when (sel=ldquo00rdquo) else

D1 when (sel=ldquo01rdquo) else

D2 when (sel=ldquo10rdquo) else

D3 when (sel=ldquo11rdquo) else lsquoXrsquo

MODELADO MEDIANTE PROCESOSMaacutes flexible que las asignaciones concurrentes de sentildeal

Los procesos utilizados para el modelado de circuitos combinacionales responden a la

siguiente plantilla

-- Proceso combinacional

process (sentildeales de entrada)

declaracioacuten de variables

begin

algoritmo de funcionamiento

end process

El circuito soacutelo puede conmutarcuando lo hace una de sus sentildealesde entrada

En la lista de sensibilidad debenaparecer t

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 16: SINTESIS VHDL

MODELADO MEDIANTE PROCESOS PRECAUCIONES

Todas las sentildeales utilizadas en las formas de onda de las asignaciones secuenciales de

sentildeal o variables deben incluirse en la lista de sensibilidades del proceso se producen

diferencias entre la simulacioacuten presiacutentesis y la postsiacutentesis

process(a)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

process(ab)

begin

if (a=1 and b=1) then

z lt= 1

else

z lt= lsquo0

end if

end process

Las mismas recomendaciones enunciadas para las asignaciones concurrentes de sentildeal son

aplicables para los procesos

Evitar bucles combinacionales

Utilizar preferiblemente sentencias case frente a if then

mux

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 17: SINTESIS VHDL

process(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0case sel iswhen ldquo00rdquo =gt z lt= D0when ldquo01rdquo =gt z lt= D1when ldquo10rdquo =gt z lt= D2when ldquo11rdquo =gt z lt= D3when others =gt z lt= ldquo00rdquoend caseend processMux en cascadaprocess(sel1sel2D0D1D2D3)variable sel std_logic_vector(1 downto 0)beginsel = sel1 amp sel0if (sel == ldquo00rdquo) thenz lt= D0elsif (sel == ldquo01rdquo) thenz lt= D1elsif (sel == ldquo10rdquo) thenz lt= D2elsif (sel == ldquo11rdquo) thenz lt= D3elsez lt= ldquo00rdquoend ifend process

Evitar sentencias condicionales incompletamente definidas

La inferencia erroacutenea de latches se puede evitar realizando una asignacioacuten del

valor por defecto o utilizando la claacuteusula else

- Inferencia de latch

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 18: SINTESIS VHDL

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

end process

process(A B)

begin

if (B = 1) then

Z lt= A

end if

end process

Asignando con la claacuteusula else

process(abcd)

begin

y lt= lsquo0rsquo

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

end if

process(abcd)

begin

if (a=lsquo1rsquo) then

y lt= c

elsif ( b = lsquo1rsquo) then

y lt= d

else

y lt= lsquo0rsquo

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 19: SINTESIS VHDL

end process end if

end process

Bajo cualquier condicioacuten de ejecucioacuten se deben asignar valor a todos los

elementos de los vectores

process (selec) is

begin

case selec is

when 00=gt salida(0)lt= 1

when 01=gt salida(1)lt= 1

when 10=gt salida(2)lt= 1

when 11=gt salida(3)lt= 1

when others=gt salidalt= (others=gt0)

end case

end process

MODELADO DE SALIDAS EN ALTA IMPEDANCIA

Salidalt= (others=gt0)

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 20: SINTESIS VHDL

Se basa en el uso de sentencias if then else (o asignaciones concurrentes con condicioacuten)

en las que para una de las condiciones a la sentildeal destino se le asigna (others =gt lsquoZrsquo)

Ejemplo

Disentildear el interface de un perifeacuterico dotado de cuatro registros bidireccionales de 8 bits

library IEEE

use IEEEstd_logic_1164all

use IEEEnumeric_stdall

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(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 21: SINTESIS VHDL

signal SEL std_logic_vector(3 downto 0)

begin

decod process(adrsCS) -- Decodificacioacuten de sentildeales de seleccioacuten

begin

for i in SELrange loop

if (to_integer(unsigned(adrs)) =i and CS=0) then

SEL(i) lt= 1

else

SEL(i) lt= 0

end if

end loop

end process

-- Excitacioacuten del bus de datos interno

bus_int lt= reg0 when (SEL(0)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg1 when (SEL(1)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg2 when (SEL(2)=1 and R_W=1) else (others =gtZ)

bus_int lt= reg3 when (SEL(3)=1 and R_W=1) else (others =gtZ)

-- Excitacioacuten de los terminales de datos

data lt= bus_int when (CS=0 and R_W=1) else (others =gtZ)

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 disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 22: SINTESIS VHDL

Los latches se modelan mediante expresiones condicionales incompletamente definidas

Debe tratar de evitarse su uso

Acarrean problemas de disentildeo y estabilidad (carreras)

Casi siempre es posible realizar el disentildeo empleando biestables

Elevado consumo de recursos en algunas FPGAs

architecture rtl of ejemplo is

signal DQENABLE std_logic

begin

D lt= Q when (ENABLE=lsquo1rsquo)

end rtl

No se debe perder nunca de vista el tipo de elementos con que se implementan en la tecnologiacutea

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 deteccioacuten de flanco

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 23: SINTESIS VHDL

(clkrsquoevent and clk=lsquo1rsquo) Forma maacutes comuacuten de indicar

un

flanco de subida

not clkrsquostable and clk=rsquo0rsquo

wait until clk=rsquo1rsquo

Formas equivalentes

soportadas

por algunas herramientas

(clkrsquoevent and clk=lsquo1rsquoand

clkrsquolast_value=lsquo0rsquo)

Forma recomendada por

algunas

herramientas para sentildeales

std_logic

rising_edge(clk)

falling_edge(clk)

Funciones estandarizadas en el

paquete de siacutentesis IEEE

10763

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 24: SINTESIS VHDL

PLANTILLAS

Los circuitos secuenciales responden a la siguiente plantilla

process (reloj sentildeales_asiacutencronas)

declaracioacuten de variables

begin

if (sentildeales_asiacutencronas_activas) then

asignaciones_asincronas

elsif (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

El circuito soacutelo pude conmutar debido a

las sentildeales asiacutencronas o la sentildeal de reloj

Las sentildeales asiacutencronas tienen

preferencia sobre la sentildeal de reloj

En la lista de sensibilidad soacutelo aparecen

las sentildeales asiacutencronas y la sentildeal de reloj

La activacioacuten de las sentildeales asiacutencronas

se evaluacutea antes que la sentildeal de reloj

Si no existen sentildeales asiacutencronas la plantilla se transforma en

process (reloj)

declaracioacuten de variables

begin

if (expresioacuten_booleana_de_deteccioacuten_flanco) then

algoritmo de funcionamiento siacutencrono

end if

end process

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 25: SINTESIS VHDL

Siendo equivalente a

process

declaracioacuten de variables

begin

wait until (expresioacuten_booleana_de_deteccioacuten_flanco)

algoritmo de funcionamiento siacutencrono

end process

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed

Page 26: SINTESIS VHDL

Bibliografia

httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf

httpbooksgooglecomecbooks

id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag

eampqampf=false

ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf

httptapecuvesVHDLvhdl_1ed