Upload
carlos-andres-rivera
View
71
Download
0
Embed Size (px)
Citation preview
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
(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
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
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
Bibliografia
httpruauaesdspacebitstream1004539301S2_4_TIPOS20DE20DATOSpdf
httpbooksgooglecomecbooks
id=NpwGwLW0AzUCampprintsec=frontcoverampsource=gbs_ge_summary_rampcad=0v=onepag
eampqampf=false
ftpftpehuescidiradptosdepjtMicroelectronicaVHDLManualVHDL-SEC-UPMpdf
httptapecuvesVHDLvhdl_1ed