Professional Documents
Culture Documents
DI~~O~~CTRNICO
SeroHn Olloz
Eugenio Villcir
Yago 'forrojo
Lluis Tores
J "
En lo direccin hHp:/ /www.cnm.es/IMB/UbroVHDLJ del Web se pueden encontrar
uno presentacin del libro, ejercicios resueltos, el cdigo completo de los proyectos
utilizados en el libro y algunos secciones complementarias que se irn actualizando
peridicamente.
VHDL
LENGUAJE ESTNDAR
DE DISEO ELECTRNICO
VHDL ,
LENGUAJE
- ESTANDAR
,
DE DISENO ELECTRONICO
Eugenio Villar
Doctor en Ciencias Fsicas
Facultad de Ciencias de Cantabria
Profesor titular de Tecnologa Electrnica (Universidad de Cantabria)
Llus Ters
Doctor en Informtica (UAB)
Colaborador Cientfico deIIMB-CNM (CSIC)
Profesor asociado del Dpto. Informtico (UAB)
Serafn Olcoz
Doctor en Ciencias Fsicas
Universidad de Zaragoza
Jefe del Dpto. de Tecnologas de Diseo (SIDSA)
Yago Torroja
Ingeniero Industrial
Profesor asociado de Tecnologa Electrnica
Universidad Politcnica de Madrid
E. T. Superior de Ingenieros Industriales (UPM)
PRESENTACiN DE:
CARLOS LPEZ BARRIO
Catedrtico de Tecnologa Electrnica ETSIT-UPM
Director de Innovacin de Telefnica I+D
McGraw-Hill
MADRID BUENOS AIRES CARACAS GUATEMALA LISBOA MXICO
NUEVA YORK. PANAM. SAN JUAN. SANTAF DE BOGOT. SANTIAGO SAO PAULO
AUCKLAND HAMBURGO LONDRES MILN MONTREAL NUEVA DELHI PARs
SAN FRANCISCO SIDNEY SINGAPUR STo LOUIS TOKIO TORONTO
La informacin contenida en este trabajo ha sido obtenida
por McGraw-Hill Incorporated procedente de fuentes dig-
nas de crdito. No obstante, ni McGraw-Hill ni los autores
garantizan la exactitud o perfeccin de la informacin pu-
blicada.
Ni McGraw-Hill ni los autores sern responsables de
cualquier error, omisin o dao ocasionados por el uso de
esta informacin. Este trabajo se publica con el reconoci-
miento expreso de que los autores estn proporcionando
una informacin, pero no tratando de prestar ningn tipo de
servicio profesional o tcnico. Si tal servicio fuera necesa-
rio, drjase a un profesional adecuado para tal fin.
ISBN: 84-481-1196-6
Depsito legal: M. 42.860-1997
v
Contenido
PRESENTACIN . xv
PRLOGO . xxi
1. INTRODUCCIN . 1
1.1. EVOLUCIN DEL DISEO ELECTRNICO . 2
1.1.1. Aos setenta . 3
1.1.2. Aos ochenta . 4
1.1.3. Aos noventa . 9
1.2. Los LENGUAJES DE DESCRIPCIN DE HARDWARE ......... 12
1.2.1. Lenguajes de descripcin de Hw versus desarrollo de Sw . 13
1.2.2. Resea histrica de los HDLs . 14
1.2.3. Modelado con HDLs: niveles de abstraccin y estilos descrip-
tivos . 16
1.2.4. Aportaciones de los HDLs al proceso de diseo . 19
1.3. METODOLOGAS y FLUJOS DE DISEO . 21
1.3.1. Flujo de diseo ascendente (bottom-up) . 23
1.3.2. Flujo de diseo descendente (top-down) . 25
1.3.2.1. Construccin o diseo descendente . 26
1.3.2.2 .. Informacin ascendente (bottom-up) . 29
1.3.2.3. Validacin funcional multinivel . 30
1.4. BIBLIOGRAFA ............................................ 31
vii
viii Contenido
4. SNTESIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 179
4.1. INTRODUCCIN 180
4.1.1. Proceso de sntesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 181
4.1.2. Modelado para simulacin frente a modelado para sntesis. .. 190
4.1.3. Objetivos........................................... 192
4.2. APLICACINDE VHDL EN SNTESIS 192
4.2.1. Restricciones sintcticas y semnticas. . . . . . . . . . . . . . . . . . .. 193
4.2.2. Discrepancias entre resultados de simulacin. . . . . . . . . . . . .. 194
4.3. SNTESISRT-LGICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 195
4.3.1. Sntesis lgica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 196
4.3.2. Sntesis RT ".................. 196
4.4. DESCRIPCiNVHDL DE CIRCUITOSDIGITALES 199
4.4.1. Descripcin del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 199
4.4.2. Modelado de la informacin 200
4.4.3. Funciones y operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 201
4.4.4. Paquetes de sntesis P1076.3 201
4.4.4.1. Interpretacin hardware de tipos estndar . . . . . . . . .. 202
4.4.4.2. Expresiones de valor inicial y por defecto . . . . . . . . .. 205
4.4.4.3. Deteccin de la transicin activa de la seal de reloj .. 206
4.4.4.4. Paquetes aritmticos . . . . . . . . . . . . . . . . . . . . . . . . . .. 206
4.4.5. Descripcin de lgica combinacional 210
4.4.6. Descripcin de latches . . . . . .. 217
4.4.7. Descripcin de la seal de reloj y de registros 218
4.4.8. Registros........................................... 219
4.4.8.1. Registros de desplazamiento 223
4.4.8.2. Contadores 223
Contenido xi
APNDICE 1 443
APNDICE 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 461
GLOSARIO 487
NDICE 491
Presentacin
aparece este libro, dando satisfaccin a una necesidad bien identificada entre los tc-
nicos de habla hispana.
Se trata de una obra que recoge los temas fundamentales vinculados a la utiliza-
cin del lenguaje VHDL, tratando los fundamentos de la sintaxis, describiendo los
mecanismos de simulacin, las tcnicas de modelado y la sntesis. No es un libro
ms que nos describe exhaustivamente la sintaxis del lenguaje, como si se tratara de
un manual de referencia, sino que pretende abordar el problema de forma concep-
tual, destacando los elementos clave en el empleo de la metodologa basada en
VHDL.
Es un texto ms para ingenieros de diseo que para especialistas en lengua-
jes de sistemas informticos. Est indicado para estudiantes de ingeniera con una
buena formacin de base en electrnica e informtica o estudiantes de los ltimos
cursos de carrera. Este libro tambin podra emplearse en actividades de post-
grado, orientadas a la formacin de profesionales en la empresa o a un curso de
doctorado.
El enfoque del libro est avalado por la experiencia contrastada de los autores en
su actividad diaria, por la combinacin de profesionales de la empresa, profesores
universitarios e investigadores en microelectrnica.
En sntesis, este trabajo supone una aportacin valiosa en el proceso de adapta-
cin tecnolgica a unas circunstancias cambiantes, que han exigido, exigen yexigi-
rn esfuerzo e imaginacin a los profesionales de un sector tan dinmico como es la
microelectrnica.
mismo, y con el fin de mantener una cierta dinmica viva e interactiva alrededor
de este libro, se han organizado algunas pginas de Internet en la direccin
http://www.cnm.es./IMB/LibroVHDU. donde, adems de la presentacin del libro,
se pueden encontrar ejercicios resueltos, los cdigos VHDL completos de los pro-
yectos utilizados en el libro y algunas secciones complementarias, donde el lec-
tor dispondr de su propio espacio para comentarios y aportaciones, que se irn
actualizando peridicamente.
As pues, vemos que se trata de un texto dirigido tanto a los estudiantes y profe-
sores de cualquier titulacin que incluya materias de diseo electrnico como a los
profesionales del sector. Todos ellos encontrarn en este libro un punto de referencia,
ya sea para iniciarse en el lenguaje y sus aplicaciones, o para aclarar y consolidar
conceptos y asesorarse en el desarrollo de proyectos basados en el uso de estos len-
guajes, y los mtodos y tcnicas de diseo que de ellos se derivan.
En cuanto a los coautores de los distintos captulos, slo decir que se trata de un
colectivo de expertos en diseo electrnico y en la aplicacin de estos lenguajes. La
mayor parte de ellos desarrollan su actividad en el mbito acadmico y de investiga-
cin, pero todos poseen adems una amplia experiencia en desarrollos industriales.
Forman parte del colectivo de profesionales que, desde el nacimiento de estos len-
guajes, se han esforzado y comprometido en su difusin, uso e implantacin tanto a
nivel acadmico como en el contexto industrial.
Los AUTORES
http://www.cnm.es.nMB/LibroVHDU
Captulo 1
,
INTRODUCCION
Llns Ters, Mane) Mor, Eduard Lecha, Fernando Rincn y Joan Vida)
IMB-CNM (CSIC)
Universitat Autnoma de Barcelona
Para avanzar
no es necesario correr,
slo dar el primer paso
y caminar sin miedo ...
1
2 VHDL. Lenguaje estndar de Diseo Electrnico
< 10 pg.
Niveles:
- Elctrico
- Bits (disp.prog.FPGA)
- Geomtrico (Cls)
Durante esta dcada hay una fuerte evolucin de los procesos de fabricacin de cir-
cuitos integrados y junto a las tecnologas bipolares surgen las MOS (Metal-Oxide-
Semiconductor). Estas ltimas, bajo la forma de NMOS, mantienen una cierta hege-
mona en el desarrollo de circuitos digitales hasta la primera mitad de los aos
ochenta; mientras que los circuitos analgicos se basaban mayoritariamente en las
tecnologas bipolares [Que88, Ser94].
Ya fuesen circuitos digitales o analgicos, stos se desarrollaban con el objeti-
vo de ser componentes estndar para su posterior uso en el diseo de sistemas elec-
trnicos especficos. Tales circuitos integrados se desarrollaban completamente (di-
seo y fabricacin) dentro de las propias fbricas (joundries) sin que este nivel de
diseo fuese accesible fuera de dicho contexto.
El esfuerzo de diseo se concentraba en los niveles elctrico (establecer carac-
tersticas e interconexiones de los componentes bsicos a nivel de transistor) y to-
pogrfico (dibujar las mscaras, layout, necesarias para la fabricacin de los dispo-
sitivos y sus interconexiones). El proceso de diseo era altamente manual y a la
medida de las posibilidades de cada tecnologa. No exista prcticamente ninguna
herramienta CAD de ayuda al diseo, a excepcin del SPICE [Nag75], simulador
de esquemas elctricos con modelos personalizables para distintas tecnologas y
que ha sobrevivido al paso del tiempo, pues todava hoy se utiliza l o sus descen-
dientes directos.
4 VHDL. Lenguaje estndar de Diseo Electrnico
ssa;]
Requisitos, restricciones y ,
-c I--
,
...- ..... _,.~
,
Sa;
C"~
~ ::::J
Captura del diseo (esquemticos) Biblioteca
ast de celdas
~E
.- (/)
CQ)
as...!.
oe
IC ::::J Simulaciones (pre/post-diseo fsico):
Q)-
(/)0 Funcional-lgica, temporal, fallos
Ci-Sl
Verificacin y anlisis
Fabricacin
Produccin
Editor Grfico
Esquemas Mscaras
~~
~~
Estmulos
Condiciones
Modelos
Resultados (E) ?
ra 1-2 muestra de forma muy genrica este flujo de diseo ascendente, que se ha
aplicado a partir de medianos de los aos ochenta, donde el nivel funcional estaba
muy poco desarrollado y el mayor esfuerzo de diseo se concentraba en el nivel ar-
quitectural y de puertas, mientras que el nivel fsico se consideraba altamente auto-
matizado.
La estructura de las herramientas de CAD tambin vari considerablemente
durante esta dcada pasando de tener que enfrentarse a distintas herramientas con
sus interfaces especficos para cubrir cada paso de flujo de diseo (Figura 1-4.a), a
poder disponer de entornos integrados de CAD donde bajo una nica base de datos
y un nico interface de usuario se aglutinaban y encadenaban las distintas herra-
mientas (Figura 1-4.b) [RW91, BHNS92].
8 VHDL. Lenguaje estndar de Diseo Electrnico
V
IdUj
.
H,
BdDj
1
IdUI
H
I~.
BdD1
IdUk
~ Hk
BdDk
(a) (b)
IdU
Estndares
Lenguaje de Interface Entorno Informticos
~e g.~ CAD; Electrnicos
c'C :::re.
:2 5l ... _.
CIlCll Mecnicos
):c
al al
0)-0
... P33.
3
_.ceCIl
ale CIl ...
-0._ ::::l III
_0
.'!:
::.:::
.2
~ ~ ~ !ll g:
Leng. de acceso y gestin
BdD
(e) (d)
A finales de los ochenta se consolidan los niveles estructural y fsico, a la vez que
los desarrollos sobre dispositivos programables complejos (FPGAs, CPLDs,
FPLDs) empiezan a crecer en "importancia frente a los ASICs-custom. Con el naci-
miento del VHDL (1987) [IEEE88] se empiezan a desarrollar mtodos y herra-
mientas para abordar el diseo a nivel funcional o comportamental, cuya implanta-
cin definitiva se est produciendo durante esta dcada de los noventa.
En cuanto a tecnologas de los aos noventa, la CMOS sigue siendo la ms uti-
lizada (75 por 100 del mercado) incluso creciendo. Las bipolareslECL se mantienen
alrededor del 15 por 100. Las BICMOS crecen hasta un 5 por 100. Las NMOS TTL
decrecen considerablemente, junto con las nuevas tecnologas del tipo AsGa y simi-
lares se reparten el 5 por 100 restante.
Por otra parte, durante esta dcada se estn desarrollando nuevas tecnologas
de encapsulado cuyo mximo exponente son los mdulos multichip (Multichip Mo-
dules, MCM) [JTB91, SK94, SM94, CL97] que en sus distintas versiones ofrecen la
posibilidad de montar directamente los chips en forma de dados sobre distintos ti-
pos de sustratos (cermico, laminado o silicio), en los que previamente se habrn
implementado las conexiones entre los distintos chips. Ello permite aumentar las
prestaciones (velocidad, consumo) y reducir el tamao de los sistemas electrnicos.
En general los MCM podramos verlos como la evolucin natural de los circuitos
hbridos pero con unas posibilidades y una complejidad potencial mucho mayor.
Otras tecnologas que estn en fase de desarrollo pre-industrial son todas las re-
lacionadas con los microsistemas, donde junto a la microelectrnica se integrarn
sensores y actuadores de distintos tipos y funciones (qumicos, mecnicos, etc.), ba-
sados en los mismos tipos de procesos de miniaturizacin que la tecnologa micro-
electrnica [Ris94, Sze94].
En trminos de circuitos se sigue con la misma tnica que al final de los ochen-
ta, con un continuo incremento de la complejidad, especialmente en dispositivos di-
gitales, y un claro aumento de la actividad en el diseo analgico y mixto (analgi-
co/digital) [GAS90, LS94]; basados estos ltimos en las nuevas tecnologas BI-
CMOS. Los avances tecnolgicos tambin permiten diseos mixtos (AlDIP) que in-
cluyen dispositivos de potencia [VRM+97].
A nivel de ASICs los desarrollos full y semi-custom han perdido relevancia frente
a las considerables prestaciones y complejidades que los dispositivos programables son
capaces de asumir, de forma que slo producciones elevadas o requisitos muy espec-
ficos (velocidad, rea, consumo, confidencialidad) hacen necesarios los ASIC-custom.
Con el avance que estn siguiendo las tecnologas submicrnicas (se estn de-
sarrollando procesos CMOS con transistores de longitud de canal inferior a las
0,3 um y capaces de albergar varios millones de dispositivos y conexiones en unos
pocos mm'), una vez ms el cuello de botella del desarrollo microelectrnico va a
estar en el diseo ms que en la tecnologa. Ahora ya empieza a ser posible implan-
tar sistemas completos dentro de un chip de silicio (SOC, systems on chip; SOS,
systems on silicon) y el problema vuelve a ser la carencia de mtodos y herramien-
tas para abordar diseos de tal complejidad. Los diseos se basan en macro bloques
funcionales (CPU, DSP, microcontrolador, etc.) desarrollados a nivel soft (cdigo
10 VHDL. Lenguaje estndar de Diseo Electrnico
ESpeCifaCiOnes
Descripciones
mixtas multi-nivel l"", ,
~s
ra e
e al ~ " , Niveles:
.Q E
u ra
C:t::
~g_
Simulacin
Sistemas electrnicos
(mixta multi-nivel)
~
" 1 "
- - - : ;,
- Comportamental
- Arquitectural I RT
.~
Zu
,,
" - Lgico I puertas
~ ,
Sntesis a nivel de: ,,
- Comportamiento ~'
- RT-Lgico
- Mapeo tecnolgico
~8
ce .
, ,-
-e,;
:::1 Ul
ra FPLDs MCMs
<.
alt::
:t::<D
0":::1
... o.
,
_o
.~.~
z:Q
Sistema
electrnico ( peS)
J
!
FIGURA 1-5. Esquema de los nuevos flujos de diseo descendente basados en el
modelado, simulacin y sntesis con HDLs a nivel funcional o comporta mental.
tardo de una puerta (en tecnologas superiores a una micra el 80 por 100 del retardo
se debe a las puertas y el 20 por 100 al conexionado), mientras que en las tecnolog-
as submicrnicas avanzadas (0.3 micras) los porcentajes han cambiado: 20 por 100
retardo de puertas y 80 por 100 retardo de conexiones. Esto est forzando el desa-
rrollo de procesos de sntesis que tengan ms en cuenta el diseo fsico de los CIs a
travs de procesos de planificacin topogrfica (Floorplaning) guiados por presta-
ciones (tiempo, consumo, rea) que permitan establecer criterios de diseo conver-
gentes para encontrar una solucin que satisfaga la funcionalidad y prestaciones re-
queridas para un determinado circuito, o bien que ayude a demostrar la inviabilidad
del mismo.
En cuanto a los entornos de CAD evolucionaron, ya a finales de los ochenta, ha-
cia entornos integrados pero a la vez abiertos y flexibles al incorporar utilidades (In-
tegration kits) para la integracin de nuevas herramientas, as como facilidades (De-
sign jlow management) para la definicin, gestin y control del flujo de diseo a se-
guir por un determinado centro o para un proyecto concreto (Figura 1-4.c). Ms re-
cientemente la implantacin y uso de lenguajes y formatos estndar (electrnicos e
informticos) est facilitando tanto el intercambio de informacin entre entornos (Fi-
gura 1-4.d) en las distintas etapas del diseo (modelos HDL, listas de componentes y
conexiones, vectores de test, retardos, etc.), como una mayor diversificacin de he-
rramientas al poder configurarse cualquier flujo de diseo con las herramientas ms
adecuadas, siempre que stas se ajusten a los respectivos estndares (iniciativa CFf).
Para finalizar con esta dcada hablaremos de las plataformas harware-software
sobre las que se ha apoyado el desarrollo electrnico. Las estaciones de trabajo or-
ganizadas en forma de red de recursos distribuidos (cmputo, almacenamiento y ac~
ceso) se han consolidado durante la primera mitad de los aos noventa. A su vez los
PCs, tambin formando parte de esa misma red informtica, se van abriendo cami-
no y presionando a las estaciones de trabajo, ya sea como puntos de acceso al entor-
no informtico (donde adems compiten con los terminales-Xwindows) o como
puntos de proceso y almacenamiento local. Todo ello es posible gracias, una vez
ms, a las prestaciones de los nuevos procesadores (Pentium, Power-PC, etc.) y al
uso de los estndares informticos (windows, NT, X, redes, etc.), desarrollados con
la generacin anterior de procesadores, software y entornos de diseo. Si a todo ello
le aadimos las crecientes posibilidades de los sistemas multimedia y las comunica-
ciones (internet, trabajo en grupo a distancia, etc.) podemos decir que estamos asis-
tiendo a una autntica explosin de medios no siempre fcil de seguir y asumir.
Para ello nos referiremos en este captulo a los dos HDLs ms conocidos y exten-
didos, el Verilog [OVT9l, SS190, TM9l, IEEE95] y el VHDL [IEEE88, Nav93,
IEEE94, Ash96], con alguna referencia al estandar japons UDLII [YI89, CU93].
Tras una pequea analoga con los lenguajes de desarrollo de software, se hace
una breve resea histrica del Verilog y del VHDL. A continuacin se presentan, en
genrico, sus prestaciones para abordar distintos niveles de abstraccin y estilos
descriptivos, e inmediatamente se revisan las principales aportaciones de los HDLs
al proceso de diseo [Mer93, Nov95, TML96, DC97].
Prog.lDescr. independiente
del H/wque lo ejecuta (HLL)
o lo implementa (HOL)
HLL
Programacin
en Leng.
Alto Nivel
HOL
Descripcin
de alto nivel
de abstraccin
(p.e. RTL)
Prog.lDescr. dependiente
del H/wque lo ejecuta (ML)
o lo implementa (HOL)
Programas
a nivel de
Leng. Mquina
Descripcin
de bajo nivel
de abstraccin
(p.e. puertas y cnx.)
Comporta mental
o funcional
Abstractos
Arquitectural
RT
ompuestos
Estilos
Lgico-
Bit descriptivos
puertas
Durante los aos ochenta, tras detectarse la necesidad de un lenguaje para dar
soporte a las distintas etapas y niveles de abstraccin del proceso de diseo, se de-
sarrollan y consolidan dos de ellos: Verilog y VHDL. Cabe mencionar que existe el
UDUI, que nace como estndar japons promovido y desarrollado por una asocia-
cin de empresas niponas y cuya implantacin es ms que discutible incluso en el
propio Japn.
El VHDL aparece como un proyecto del Departamento de Defensa de EEUU
(1982), con el fin de disponer de una herramienta estndar e independiente para la
especificacin (modelado y/o descripcin) y documentacin de los sistemas elec-
trnicos a lo largo de todo su ciclo de vida. Tras las primeras revisiones del len-
guaje, el IEEE lo adopta y desarrolla corno el HDL estndar (l." versin en 1987 y
la 2: en 1994) [IEEE88, IEEE94].
El Verilog nace como un lenguaje de modelado ligado a un entorno de simula-
cin de la firma Gateway, pasando posteriormente a ser el simulador digital de Ca-
denee Design Systems Ine., llegando a convertirse en un estndar "de facto" a nivel
industrial. Al aparecer el VHDL como estndar IEEE, Verilog se encontr con un
fuerte competidor, y en 1990 Cadence decide ofrecerlo como lenguaje de dominio
pblico [OVI91] e inicia las gestiones para su estandarizacin formal, que se logra
en 1995 [IEEE95].
16 VHDL. Lenguaje estndar de Diseo Electrnico
les fijadas por las dependencias entre datos son importantes, pero las dis-
tintas acciones no han sido ni identificadas con detalle ni planificadas res-
pecto a un reloj.
2. Los tipos de datos que pueden ir desde los ms abstractos definidos por el
propio usuario hasta el ms bsico, el bit, para una seal digital, pasando
por los compuestos que agrupan bloques de bits con un significado especfi-
co y se representan como enteros con o sin signo.
Estos estilos descriptivos forman el tercer eje de la Figura 1-7, que es una sim-
plificacin del cubo de diseo de Ecker [IECK95], donde los movimientos dentro
de un mismo plano horizontal responden a refinamientos o cambios en el tipo de
datos y/o en el estilo descriptivo; mientras que los movimientos descendentes en un
plano vertical corresponden a los actuales procesos de sntesis (comportamental,
RT, lgico-puertas). Como se puede intuir, normalmente hay una cierta correlacin
entre niveles de abstraccin y estilos descriptivos. As pues, las descripciones algo-
rtmicas se usan ms a nivel comportamental o funcional, el flujo de datos se rela-
ciona ms con el nivel arquitectural o RT y a nivel de puertas el estilo descriptivo
siempre es de tipo estructural.
De todas formas uno de los valores aadidos de estos lenguajes, y en especial
del VHDL, es su capacidad para hacer convivir de forma natural descripciones mix-
tas-multinivel: distintos estilos y niveles de abstraccin para las distintas partes de
un diseo. Una cierta descripcin estructural puede tener componentes desarrolla-
dos a nivel de puertas, otros a nivel RT en forma de flujo de datos y algunos todava
en forma de algoritmos a nivel funcional (Figura 1-5). Esta es una situacin normal,
que va evolucionando a lo largo de todo el proceso de diseo hasta que, tras los co-
rrespondientes procesos de sntesis manual o automtica, todos los componentes del
circuito a implementar estn detallados mediante una descripcin estructural a nivel
de puertas. Mientras tanto, aquellos componentes que slo formaban parte del en-
torno de simulacin del circuito permanecen descritos al nivel de detalle que se hu-
biese considerado necesario (normalmente funcional o RT). En la Figura 1-8 pue-
den verse algunos ejemplos sencillos e intuitivos sobre la flexibilidad de uso del
Verilog y el VHDL.
18 VHDL. Lenguaje estndar de Diseo Electrnico
om - ~S
Sumador ein~~ Sumador Total ~S
Total
or L..- ---l eout
~: ~
B~
a e I entity sumador_total
porteA, B, Cin : in bit;
Is
A
~ ~eout end sumado,._total;
a e
(a) (b)
1
Input A, B, Cm; component semisumador
< output S, Cout; porteA, B : In bit;
S, Cout : out bit);
~. wire X;
end component;
eS ::::~~ :~ g ~ :: ~ ~ gn; ~ co~~(~~~t :Pi~eb~~_or
(e)
o:::>
r'l end component;
begin
S : out bit);
I
porteA, B : in bit;
S: out bit); module sumador_estructura (A, B, Cin, S, Cout);
end puerta_or;
archltecture
begin
funcional 01 puerta_or Is T
~
input A, B, Cin;
~~:~~,~,~~ut;
S <=Aor B; ~ semisumador UO(A, B, X, Y);
end funcional; <0 semisumador U1 (Y, Cin, Z, S);
~
;;1j entity semisumador rs
1 or U2(X, Z, Cout);
endmodule
(d)
port ( A, B : in bit;
S, Cout : out bit);
end semisumador;
architecture funcional 01 semisumador ts
T~
module semisumador
input A, B;
output S. Cout;
(A, B, S, Cout);
begin
S <= A xor B;
=
1
assign S = A A B;
Cout <= (A and B);
assign Cout = (A && B);
end funcional;
endmodule
(e)
FIGURA 1-8. Algunos ejemplos sencillos sobre modelos Verilog y VHDL con distin-
tos niveles de abstraccin y estilos de descripcin: (a) Esquema jerrquico de un su:
mador total de 2 bits (captura de esquemas clsica). (b) Descripcin de VHDL del inter-
faz E/S del sumador total (ST). En VHDL para cada mdulo se define una entity donde
se detallan las E/S, mientras que las distintas arquitecturas o descripciones alternati-
vas se detallan en distintos mdulos architecture, que comparten una misma entity.
En el caso del Verilog, cada mdulo define sus E/S. (e) Modelado del ST en HDL a nivel
funcional, en trminos de ecuaciones booleanas e incluyendo los retardos previstos.
(d) Una descripcin estructural (componentes y conexiones) del mismo STo (e) Defini-
cin funcional de los componentes utilizados en (d). Obsrvese que en Verilog el com-
ponente OR, al ser una primitiva del propio lenguaje, no necesita ser definido.
1. Introduccin 19
Tanto el Verilog como el VHDL nacen con una sintaxis (formalizada mediante una
gramtica) y una semntica (no formal, matemticamente hablando) definidas y di-
rigidas hacia el modelado para la simulacin de hardware. Sin embargo, rpidamen-
te se abord su uso como soporte para todas las fases del proceso de diseo, y muy
especialmente para las etapas de sntesis. Pasemos, pues, a comentar las ventajas
ms relevantes que pueden suponer el uso de estos lenguajes:
Estos HDLs son interpretables tanto por las personas como por los ordenado-
res, pudiendo proporcionar soporte tanto a las tareas estrictas de diseo (mo-
delado, simulacin, sntesis, verificacin) como a las de comunicacin e in-
tercambio de modelos entre los distintos equipos de trabajo y, obviamente, a
las de documentacin y mantenimiento de los diseos.
Son lenguajes de disponibilidad pblica, no sometidos a ninguna firma ni pa-
tente (especialmente el VHDL). Estn definidos, documentados y manteni-
dos por el IEEE, quien garantiza su estabilidad y su soporte.
Soportan descripciones con mltiples niveles de abstraccin, pudindose
mezclar desde mdulos descritos a nivel funcional hasta mdulos a nivel de
puertas. Con el mismo lenguaje se describe el circuito y el entorno de verifi-
cacin (banco de pruebas) para su simulacin/validacin.
La utilizacin de un lenguaje nico a lo largo de todo el proceso de diseo
simplifica la gestin del mismo (reduccin de herramientas y formatos) y la
descripcin/simulacin mixta multinivel facilita el diseo independiente de.
los diferentes componentes o mdulos y, por lo tanto, la distribucin de ta-
reas entre distintos equipos coordinados bajo un nico entorno de simula-
cin/ verificacin.
Proporcionan independencia de metodologa, de herramientas y de tecnolo-
ga. A pesar que el VHDL es uno de los soportes naturales de las metodolo-
gas descendentes, no est sometido a ningn proceso ni mecanismo estricto
de diseo, pudindose amoldar a cualquier metodologa donde el modelado
de hardware pueda tener sentido (especificacin, documentacin, simula-
cin, sntesis y/o verificacin).
En el caso de las herramientas CAD, los HDL son lenguajes estndar que de-
finen una sintaxis y una semntica de modelado para simulacin. As pues,
cualquier herramienta que cumpla con el estndar ha de aceptar y ejecutar
(simular) de la misma forma cualquier modelo. Esta portabilidad no es tan
aplicable a la sntesis ni a la verificacin formal, ya que la semntica del
VHDL y del Verilog en estas reas no est definida desde el IEEE, y son los
proveedores de CAD quienes hacen su propia interpretacin, dando lugar a
pequeas divergencias, en general fciles de salvar, pero que impiden hablar
de un estndar desde el punto de vista de la sntesis. En cambio, el UDUI s
tiene una semntica definida para la sntesis hardware.
Los HDL, tanto por su definicin y diseo como por los niveles de abstrac-
cin donde habitualmente se usan, son, o pueden ser, totalmente indepen-
dientes de la tecnologa final de implementacin de los circuitos. La descrip-
20 VHDL. Lenguaje estndar de Diseo Electrnico
3 VITAL (VHDL lnitiative Towards ASIC Libraries modeling). Esta iniciativa promueve la estan-
darizacin de los mecanismos para representar y gestionar los parmetros temporales (retardos de puer-
ta y retroanotacin de retardos del conexionado) en el modelado VHDL de las bibliotecas de celdas pa-
ra el diseo de ASICs.
4 OMF (Open Modeling Forum). Promueve la estandarizacin de una interfaz para la simulacin
FIGURA '-9. Esquema de las fases bsicas del diseo ascendente (bottom-up}.
estructura jerrquica del circuito (esta fase tambin se conoca como el "front-end"
del diseo). Despus, con los esquemticos libres de errores y cumpliendo las pres-
taciones requeridas, se abordaba la fase de diseo fsico (tambin llamada "back-
end"), que inclua e incluye bsicamente procesos de ubicacin y conexionado se-
guidos de verificacin a nivel de mscaras (topografa o layout de un circuito), A
continuacin se extraen de la topografa los retardos reales derivados del conexio-
nado fsico final y se retroanotan en los esquemticos para poder proceder a repetir
las simulaciones (post-layout) y comparar que se siguen manteniendo las prestacio-
nes funcionales y temporales.
Adems de todo ello, durante el diseo a nivel de puertas debe tambin tenerse
en cuenta la testabilidad y el test del circuito [Tsu87, ABF90). Tema este muy impor-
tante que incide en el propio proceso de diseo, al tener que desarrollar un conjunto
de vectores de test que cubran el mayor nmero (>96 %) de faltas posibles del Cl,
pues sern los que se utilicen en la fase de test estructural post-fabricacin para deter-
minar qu circuitos se dan por vlidos y cules no. La testabilidad de un Cl es un te-
ma crucial, pues un chip no testable (baja cobertura de faltas de los vectores de test)
se puede considerar intil a efectos prcticos. Ello ha dado lugar a las llamadas tcni-
cas de diseo para test (Design for testability, DFT) que, adems de la dificultad aa-
dida, siempre suponen un incremento de la complejidad final del circuito al tener que
incluir estructuras hardware especficas que ayudan a conseguir el nivel de testabili-
dad necesario. Obviamente, todos estos temas relacionados con el test estructural no
son aplicables a los procesos de diseo contra dispositivos programables tipo FPGA.
Todos estos procesos, como la propia Figura 1-2 muestra, se basaban en una bi-
blioteca de celdas especifica de la tecnologa con la que se iba a realizar el circuito
y que se escoga antes de iniciar el proceso de diseo propiamente dicho.
1. Introduccin 25
cin al nivel lgico-puertas, siendo las herramientas de sntesis quienes marcan esta
independencia. Actualmente la sntesis est entre el nivel RT y las puertas; cuando
en un futuro inmediato se estabilice la sntesis comportamental, ahora a nivel prein-
dustrial, sern ms independientes entre s el diseo de nivel funcional y el arqui-
tectural- RT.
Las caractersticas y ventajas de los HOL en general (ver punto 1.2.4), y en es-
pecial de VHDL, estn facilitando y potenciando el desarrollo e implantacin de las
metodologas de diseo descendente que se basan en un uso intensivo de tales len-
guajes (modelado/descripcin del circuito y de los bancos de pruebas), convenien-
temente soportados durante todo el proceso de diseo por herramientas de simula-
cin, sntesis y procesos de anlisis-verificacin.
La Figura 1-10 muestra de forma esquemtica y genrica esta metodologa que
se basa en un proceso de construccin o diseo descendente apoyado en flujos de
informacin ascendentes.
~
Q)
E
~
8.
E
,, .!!!
,, ~c: g>
o "O
I
I
'0 e
I c:
::;,
o
Refinamiento gradual en HDL
I
, u.. $
___ 01I _ Q)
Sntesis del comportamiento I
"O
I
I
I
I
~Q)
I
'5
I
I
e
I
Q)
I a.
I Q)
"'If <, ! "O
~
Q)
::;,
"
" .
I
I
.5
5. Circuito
~ y
8 Mdulos
c:
~
:a
1::
Q)
::;,
a.. .!!!
o
6 el
o
'c;, "O
c:
:9 o
sQ)
al "O
o
'c;,
-o
sc:
"O Q)
c: '5
o c:
sc: o
o
Q)
a.
Q)
'0
.~ :~
u..
o
E
.s2
.5
Una vez fijadas las especificaciones, a travs del depurado de estos modelos, se
inicia el proceso de refinamiento gradual de la descripcin del circuito hasta alcan-
zar un modelo arquitectural-RT que sea sintetizable mediante procesos automticos
guiados por el diseador. Este refinamiento tambin puede afectar el banco de prue-
bas o entorno de test, no para hacerlo sintetizable, sino a fin de ajustar su precisin
28 VHDL. Lenguaje estndar de Diseo Electrnico
a la del modelo del circuito. Un entorno de test cuya temporizacin se base slo en
relaciones causales, puede que no sea adecuado para un modelo del circuito que ya
se expresa en trminos de ciclos de reloj.
Esta primera fase de refinamiento gradual para pasar de una descripcin fun-
cional a una de nivel RT est ahora en vas de automatizacin y se la conoce como
sntesis comportamental.
A continuacin viene la etapa de sntesis RT-lgica que tiene por objeto la ob-
tencin de un esquema o lista de componentes y sus interconexiones basado en una
determinada biblioteca de celdas y mdulos. El diseo resultante debe realizar la
funcionalidad especificada, respetar las prestaciones requeridas (rea, velocidad,
consumo) y garantizar la testabilidad final del circuito. Esto acostumbra a requerir
varias iteraciones de los procesos automticos de sntesis para la testabilidad dirigi-
da por prestaciones y guiada por el diseador.
Estas herramientas de sntesis RT-lgica automticas se implementan mediante
distintos procesos de sntesis encadenados de forma transparente al usuario. Estos
procesos son:
1. Sntesis RT que determina los elementos de memoria y el conjunto de ecua-
ciones lgicas u operadores necesarios, en base a fases de particin, distri-
bucin (scheduling) y asignacin (allocation) de recursos, bajo las restric-
ciones impuestas por el diseador.
2. Sntesis lgica que se encarga de optimizar las ecuaciones lgicas para mi-
nimizar el hardware necesario a nivel de puertas y registros utilizando algo-
ritmos de reduccin y asignacin de estados, minimizacin lgica, elimina-
cin de redundancias, etc.
3. Mapeo tecnolgico que es una fase, muchas veces indistinguible de la snte-
sis lgica, en la que las puertas y registros se mapean de forma optimizada
sobre los elementos disponibles en la biblioteca de celdas y mdulos corres-
pondientes a la tecnologa escogida para la implementacin fsica del diseo.
A lo largo de estas fases se ha de incorporar al diseo las estrategias y el hard-
ware necesario para asegurar la posterior testabilidad del circuito. Estos son proce-
sos semiautomticos, o al menos muy asistidos por el diseador, que adems de
definir la estrategia de test y aadir las estructuras necesarias (scan-paths, multiple-
xores, modos ad-hoc, boundary-scan) se complementan con procesos de genera-
cin y composicin de vectores de test que ayudan a obtener un conjunto reducido
y ptimo de tales vectores con una buena cobertura de fallos (>96 %) del circuito.
Dado el estado actual de las herramientas de diseo electrnico, despus de la
sntesis RT-lgica siempre hay unas ciertas tareas a nivel de puertas, que se agluti-
nan bajo el nombre de diseo detallado: simulacin funcional, temporal y de faltas,
anlisis de resultados y optimizacin de caminos crticos, estructuras y vectores de
test. Un objetivo a perseguir es que las posibles modificaciones resultantes de esta
actividad se reflejen desde los modelos HDL-RT sintetizables para mantener la co-
herencia entre los distintos niveles de descripcin del diseo; aunque ello exija nue-
vas iteraciones de sntesis.
Despus de esta sntesis RT-lgica y el diseo detallado se obtienen los dos ele-
mentos bsicos para poder abordar las fases o etapas de diseo fsico: la lista de com-
1. Introduccin 29
Otro aspecto a considerar es que no todos los lenguajes HDL tienen estructuras
ni esquemas estndar para facilitar la retroanotacin de retardos desde el diseo
fsico hasta la netlist HDL correspondiente. El Verilog dispone de mecanismos, ba-
sados en el formato SDF (Standard De/ay Format) [IEEE96], para realizar estos
procesos. Sin embargo, el VHDL no tiene ningn esquema predefinido ni para ex-
presar la temporizacin (timing) de las celdas y mdulos de una biblioteca, ni para
anotar y reflejar los retardos debidos al conexionado en una netlist VHDL. Eso s,
la flexibilidad del VHDL permite mltiples soluciones para reflejar estas informa-
ciones en los modelos, y ah es donde reside el problema. Para solucionarlo se estn
llevando a cabo distintos proyectos, de los que VITAL puede que sea el ms signifi-
cativo por el nmero de proveedores de CAD y fabricantes de silicio que le dan so-
porte. La idea de VITAL [VITAL94] es adaptar para el VHDL un esquema de tem-
porizacin y retroanotacin, tambin basado en el SDF y, por lo tanto, altamente
compatible con el utilizado en el contexto del Verilog. Estos procesos de estandari-
zacin siempre requieren un compromiso entre flexibilidad del lenguaje (VITAL re-
duce la del VHDL) y eficiencia de los procesos de simulacin (VITAL la aumenta
en base al uso de primitivas y estructuras predeterminadas).
Finalmente, y para resumir, vemos (Figura 1-10) que la incidencia de estos flu-
jos de informacin ascendentes, en las distintas etapas del diseo, marcan un poco el
grado de dependencia tecnolgica de las mismas y de las descripciones resultantes.
Pruebas especficas a nivel de circuito para validar partes concretas del dise-
o incluyendo varios mdulos interconectados y/o distintos modos de opera-
cin.
Pruebas de test locales y aisladas para distintos mdulos y submdulos del
circuito.
Pruebas de test especficas para la generacin del conjunto de vectores de
test (todo o parte) estructural del dispositivo una vez fabricado.
Estos distintos bloques de pruebas que antes (metodologas ascendentes) o no
se desarrollaban o exigan distintos lenguajes y simuladores, ahora se pueden des-
cribir con el mismo HDL con el que se est haciendo el diseo del circuito.
Sea cual sea el tipo de banco de pruebas, stos acostumbran a tener, dentro de
un equipo o centro de diseo, un esquema ms o menos uniforme, pudiendo incluir
distintos mdulos con distintos objetivos:
Modelo del entorno ms generacin de estmulos hacia el modelo HDL bajo
test.
Modelo de referencia que proporciona los resultados previstos y esperados.
Modelo HDL a validar del circuito en fase de diseo.
Mdulo de adquisicin, adecuacin y comparacin de los resultados obteni-
dos del modelo bajo test, respecto a los esperados proporcionados por el mo-
delo de referencia.
Mdulo para la generacin de vectores completos (estmulos + respuestas)
para su exportacin a otros formatos y entornos de diseo.
Todos estos componentes, u otros que cada equipo de diseo pueda establecer,
conforman el entorno de test del dispositivo en desarrollo y, junto con ste, se des-
criben utilizando el mismo HDL.
Sobre bancos de pruebas hay una presentacin genrica de tipo terico en el
Captulo 3, que se complementa en los Captulos 5 y 6 mediante exposiciones ms
prcticas y explcitas y con los correspondientes ejemplos de apoyo.
1.4. BIBLIOGRAFA
[CP96] Comit PRENDA: PRENDA: Metodologa para el diseo de ASICs. UPM-ETSII, 1996.
[CU93] Comit UDUI: UDUl Language Reference Manual (V2.0.3). 1993.
[DC97] CARLOS DELGADO KLOOS y EDUARD CERNY (editors), Hardware Description Lan-
guages and their Applications. Specification, modelling, verification and synthesis of
microelectronic systems. IFIP TClO WGI0.5. Chapman&Hall, 1997.
[Eck95] W. ECKER: The design Cube. EuroVHDL Forum, 1995.
[Fab90] E. D. FABRICIUS.Introduction to VLSI Design. McGraw-Hill, 1990.
[Gaj88] DANIELD. GAJSKI(editor). Silicon Compilation. Addison-Wesley, 1988.
[GAS90] R. L. GEIGER, P. E. ALLEN & N. R. STRADER,VLSI Design Techniques for Analog
and Digital Circuits. McGraw-HillI990.
[GD85] LANCE A. GLASSER y DANIEL W. DOBBERPUHL,The Design and Analysis of VLSI
Circuits. Addison-Wesley, VLSI Systems Series, 1985.
[Gia89] J. DI GIANCOMO:VLSI Handbook. McGraw-Hill, 1989.
[Har87] R. W. HARTENSlEIN(editor): Hardware Description Languages. Advances in CAD
for VLSI. Series, Vol. 7. North-Holland, 1987.
[Hay79] JOHN P. RAYES: Computer Architecture and Organization. McGraw-Hill, 1979.
[Hei88] D. V. HEINBUCH: CMOS3 Cell Library. Addison- Wesley, VLSI Systems Series,
1988. .
[HoI87] ERNESTE. HOLLIS: Design of VLSI Gate Array ICs. Prentce-Hall, 1987.
[HR91] JOHN P. HUBER y MARK W. ROSNECK, Successful ASIC Design the First Time
Through. Van Nostrand Reinhold, 1991.
[HS80] R. W. HON y C. H. SEQUIN:A Guide to LSI Implementation (2nd. edition). SSL-79-
7, Xerox Parco January 1980.
[IEEE81] IEEE: SpecialIssue on Computer Aided Design. Proceedings ofthe IEEE. Oct.-1981.
[IEEE88] IEEE: The IEEE Standard VHDL Language Reference Manual, IEEE-Std-1076-
1987.1988.
[IEEE94] IEEE: The IEEE Standard VHDL Language Reference Manual, ANSIIlEEE-Std-
1076-1993. 1994.
[IEEE95] IEEE: IEEE Standard Verilog Hardware Description Language Reference Ma-
nual. IEEE-Std. 1364-1995.
[lEEE96] IEEE:DASC Standard Delay Format (SDF) Study Group (PAR/497). Vhdl.
org/pub/vilpub/sdf.
[JSV82] PAUL G. JESPERS,CARLO H. SEQUINy FERNANDVAN DE WIELE: Design Methodolo-
gies for VLSI Circuits. NATO ASI Series, Sijthoff & Noordhoff Int. Pub. 1982.
[JTB91] R. W. JOHNSON,ROBERTK.F. TENG & JOHN W. BLADE (editors), Multichip Modules:
Systems Advantages, Major Constructions, and Materials Technologies. IEEE Press, 1991.
[KAJW95] S. KUMAR; J. M. AYLOR; B. B. JOHNSONy W. A. WULF: The Co-Design of Em-
bedded Systems: A Unified Hw/Sw Representation. KIuwer Academic Publishers, 1995.
[LS94]K. R. LAKER & W. M. SANSEN. Design of Analog Integrated Circuits and Systems.
McGraw-HillI994.
[MC80] C. MEAD y L. CONWAY:Introduction to VLSI Systems. Addison- Wesley, VLSI Sys-
tems Series, 1980.
[Mer93] JEAN P. MERMET (editor): Fundamentals and Standards in Hardware Description
Languages. NATO ASI Series, KIuwer Academic Publishers, 1993.
[MLD92] P. MICHEL, U. LAUTHER& P. Duzy (Ed.): The Synthesis Approach to Digital Sys-
tem Design. KIuwer Academic Publishers, 1992.
[Nag75] L. NAGEL: SPICE2: A Computer Program to Simulate Semiconductor Circuits.
ERL Memo. N. ERL-M520. Univ. of California, Berkeley, 1975.
[Nav93] Z. NAVABI:VHDL: Analysis and Modelling of Digital Systems. McGraw-Hill, 1993.
[NB88] P. NAISH y P. BISHOP: Designing ASICs. Ellis Horwood Limited. Chichester, 1988.
1. Introduccin 33
Manel Mor, Joan Vidal, Eduard Lecha, Fernando Rincn y Llus Ters
IMB-CNM (CSIC)
Universitat Autnoma de Barcelona
El secreto de aburrir
a la gente consiste en
decirlo todo.
Voltaire
35
36 VHDL. Lenguaje estndar de Diseo Electrnico
Tal como indican las siglas de su nombre, VHDL (Very high speed Hardware
Description Language) es un lenguaje orientado a la descripcin o modelado de
hardware, pero a pesar de ello hereda muchos conceptos de los lenguajes de pro-
gramacin de alto nivel (C, PASCAL, ...) Y especialmente del lenguaje ADA. Por
lo tanto, una buena forma de empezar a conocer algunas de sus principales carac-
tersticas puede ser estableciendo una comparacin con dichos lenguajes de pro-
gramacin.
VHDL hereda de los lenguajes de programacin de alto nivel el concepto de
tipo de datos. A diferencia de muchos otros lenguajes de descripcin de hardware
que disponen de un reducido nmero de tipos de datos (la mayora de ellos orien-
tados al hardware) y con escasa o nula capacidad de definicin de nuevos tipos,
VHDL es un lenguaje que ofrece una enorme flexibilidad para definir nuevos ti-
pos de datos. Existen un reducido nmero de tipos de datos predefinidos en
VHDL (bit, boolean, integer, etc.), pero incorpora la posibilidad de definir nuevos
tipos, desde tipos discretos o escalares hasta matrices o registros e incluso apunta-
dores. Esta es una caracterstica importante de VHDL, que nos permite describir
sistemas electrnicos a. distintos niveles de abstraccin, ya que para cada nivel
de abstraccin que queramos abordar, podremos definir el tipo de dato ms ade-
cuado.
Tambin hereda de los lenguajes de programacin la potencia de control de flu-
jo, incorporando los dos tipos de control de flujo tpicos: control de condiciones (if,
case) e iteraciones (jor, while). Estas estructuras de control de flujo, junto con la
capacidad de definicin de tipos de datos enunciada en el prrafo anterior, hacen de
VHDL un lenguaje potente para desarrollar algoritmos, que pueden no tener rela-
cin directa con la descripcin de hardware.
Incorpora tambin la capacidad de estructuracin del cdigo, pudiendo agrupar
partes del cdigo en subprogramas, ya sean funciones (junction) o procedimientos
(procedures). Esta es otra caracterstica del VHDL heredada de los lenguajes de
programacin de alto nivel, y que nos permite afrontar de forma estructurada el de-
sarrollo de algoritmos complejos.
La ltima caracterstica claramente heredada de los lenguajes de programacin
de alto nivel es la posibilidad de desarrollar y utilizar bibliotecas de diseo, de for-
ma que al abordar el desarrollo de cualquier cdigo VHDL dispongamos de un con-
junto de tipos de datos, operadores y funciones ya definidos, indicados para el rea
concreta en la que vayamos a trabajar.
Las caractersticas descritas hasta aqu presentan VHDL como un lenguaje pa-
recido a los lenguajes tpicos de programacin de alto nivel. De hecho, aquellas
personas que tengan cierta experiencia en el uso de dichos lenguajes encontrarn
muchas analogas que les facilitar el aprendizaje del VHDL. De todas formas hay
una serie de conceptos incorporados en VHDL especficos para el modelado de
hardware, que normalmente son un poco ms difciles de asimilar para todo aquel
que se enfrente con el aprendizaje de este lenguaje.
2. Presentacin del lenguaje VHDL 37
Tres son las caractersticas principales que incorpora VHDL enfocadas a facilitar o
permitir la descripcin de hardware: un modelo de estructura, un modelo de concu-
rrencia y un modelo de tiempo. Estas caractersticas junto con la capacidad de des-
cribir funcionalidad que le confieren las propiedades descritas en la seccin ante-
rior, hacen de VHDL un lenguaje flexible y potente, que se adapta perfectamente a
la descripcin de sistemas electrnicos a cualquier nivel de abstraccin.
a
b ANO
r1_ e
d OR
alguno de los puertos de entrada de una de las puertas, sta ejecutar su funcin,
pudiendo variar el valor de su puerto de salida. Obsrvese que si la puerta and pro-
duce un cambio sobre su puerto de salida e, ste implicar que la puerta or ejecute
su funcin, pudiendo a su vez forzar un cambio en su puerto de salida e. Este com-
portamiento es el mismo que se observa en el hardware real.
Este mecanismo que incorpora VHDL es anlogo al mecanismo de diseo
clsico utilizado en la captura de esquemticos. Cualquier modelo VHDL puede
abordar el diseo de un nuevo componente, desde una aproximacin puramente es-
tructural, referenciando los componentes que lo forman y estableciendo las interco-
nexiones entre ellos. Los componentes pueden ser tan simples como las puertas l-
gicas del ejemplo, o bien tan complejos como un sistema electrnico completo.
Obsrvese que este mecanismo bsico del VHDL de modelado de la estructura
(la copia o referencia a componente) ofrece a su vez la forma de especificar lajerar-
qua de un diseo.
AND2 : process
begin
e < = aand b;
wait on a, b;
end process AND2;
OR2: process
begin
e <= e or d;
wait on e, d;
end process OR2;
sibilidad de ambos procesos (por ejemplo, en a y en e), los dos se ejecutan en ese
tiempo de simulacin.
Sobre las seales slo diremos de momento que son objetos que pueden ir
variando su valor a lo largo de la simulacin (en este aspecto son parecidas a las va-
riables). Su caracterstica principal es que tienen asociada una o varias colas de
eventos (drivers) que define su comportamiento a lo largo del tiempo. La cola de
eventos est formada por conjuntos de pares tiempo/valor, y en las asignaciones a
seal es esta cola de-eventos la que recibe los valores asignados. En las siguientes
secciones veremos cmo el mecanismo de simulacin VHDL define en qu mo-
mento los valores asignados a la cola de eventos de una seal pasan a actualizar el
valor de la misma.
Una de las finalidades del modelado en VHDL del hardware es poder observar su
comportamiento a lo largo del tiempo (simulacin). Esto implica que las construc-
ciones del lenguaje tendrn asociada una semntica respecto a la simulacin, es de-
cir, influirn en sta provocando distintos eventos (cambios en las seales que con-
trolan la evolucin del sistema) que se sucedern a lo largo del tiempo, y a su vez,
el modo en que se comportan las sentencias depender de los eventos que se suce-
dan a lo largo de la simulacin. El concepto de tiempo es fundamental para definir
cmo se desarrolla la simulacin de una descripcin VHDL.
La simulacin de un modelo VHDL es una simulacin dirigida por eventos.
Esto significa que el simulador mantiene unas listas, de eventos (cambios en las se-
ales internas del modelo y tambin de las entradas y salidas) que se han de produ-
cir a lo largo del tiempo de simulacin. Como el comportamiento del modelo es es-
table mientras no se produzca un evento, la tarea del simulador consiste en avanzar
el tiempo de simulacin hasta el siguiente evento y calcular sus consecuencias so-
bre la lista de eventos futuros (mediante la ejecucin de los procesos afectados por
el evento actual).
Normalmente la reaccin del modelo a un evento ocasionar otros eventos a
suceder en un tiempo de simulacin posterior que se aadirn a la lista. De este mo-
do la simulacin finaliza cuando se ha alcanzado el tiempo de simulacin especifi-
cado por el usuario o cuando no existen ms eventos.
La simulacin VHDL abstrae el comportamiento real del hardware, implemen-
tando el mecanismo de estmulo respuesta (componentes funcionales reaccionan a
la actividad en sus entradas produciendo cambios en sus salidas) implementando un
ciclo de simulacin de dos etapas (Figura 2-3), basado en los procesos (elementos
funcionales) y las seales (entrada y salidas de estos elementos funcionales; cone-
xiones entre elementos).
En la primera etapa las seales actualizan su valor. Esta etapa finaliza cuando
todas las seales que deban obtener un nuevo valor en el tiempo actual de simula-
cin (tenan un evento programado en su cola de eventos) han sido actualizadas. En
la segunda etapa, los procesos que se activan (aquellos que tengan en su lista de
sensibilidad una seal en la que se haya producido un evento) se ejecutan hasta que
2. Presentacin del lenguaje VHOL 41
Inicio simulacin
Final simulacin
se suspenden (con la ejecucin de una sentencia wait). Esta etapa finaliza cuando
todos los procesos que se haban activado se hayan suspendido. Entonces el tiempo
de simulacin avanza hasta el siguiente instante de tiempo en el que haya un evento
programado, y se repiten los dos pasos del ciclo de simulacin. La simulacin ter-
mina cuando no haya ms eventos programados o cuando se llegue al tiempo de si-
mulacin especificado.
Es importante notar que el modelo de tiempo implementado por el ciclo de si-
mulacin VHDL implica que siempre hay un cierto retardo entre el momento en
que un proceso coloca un nuevo valor en la cola de eventos de una seal (el proceso
ejecuta la asignacin sobre la seal) y el momento en que esta seal toma el valor
programado en la cola de eventos. Incluso en el caso en que no se especifique un
retardo concreto, se utilizar un retardo delta (delta delay). Un retardo delta no im-
plica actualizar el tiempo de simulacin, pero s que implica ejecutar un nuevo ciclo
de simulacin.
El concepto de retardo delta es importante para entender otra diferencia impor-
tante entre variable y seal. Una variable actualiza su contenido en cuanto se ejecu-
ta una asignacin sobre ella. En cambio, cuando se ejecuta una asignacin sobre
una seal, se proyecta un nuevo evento sobre su cola de eventos y slo cuando to-
dos los procesos se hayan ejecutado y estn suspendidos, el valor de la seal se ac-
tualizar con el valor proyectado en su cola de eventos.
Este mecanismo del retardo delta se introduce para permitir la simulacin de
hardware (paralelo por naturaleza) usando mquinas secuenciales, y es el que per-
mite asegurar el determinismo de la ejecucin del cdigo VHDL. Consideremos el
cdigo VHDL de la Figura 2-4, en el aparecen dos elementos secuenciales conecta-
dos en forma de registro de desplazamiento.
El mecanismo del retardo delta permite que, independientemente del orden en
que se ejecuten los dos procesos, el segundo (FF2) siempre reciba el valor correcto
de Q1, ya que aunque se haya ejecutado con anterioridad el primer proceso (FF 1),
42 VHDL. Lenguaje estndar de Diseo Electrnico
FFl : process
D1 01
begin r--
ir CK=' l' then
FF1
Ql <= DI
CK
end ir;
waiton Clk; >
end process FFl~
FF2 : process
begin 02
..._
ir CK=' l' then
Q2 <= Ql FF2
end ir;
CK
wait on Clk;
end process FF2;
>
FIGURA 2-4. Determinismo en la simulacin VHDL.
la asignacin que ste realiza sobre QI an no habr tenido lugar (en todo caso se
habr proyectado el evento sobre la cola de eventos de QI). De forma que al reali-
zar la asignacin de DI sobre Q2 se colocar en la cola de eventos de Q2 el valor
correcto de DI (an sin actualizar). Slo en el momento en que ambos procesos se
hayan suspendido, se actualizarn las seales con los valores que contengan sus co-
las de eventos.
Para clarificar el funcionamiento del ciclo de simulacin y del retardo delta, en
la Figura 2-5 se muestra cmo se comportara la simulacin VHDL y cmo evolu-
cionaran las seales QI y Q2 (y sus respectivas colas de eventos). Para ello se su-
pone que el reloj CK se ha definido como un reloj de IOns de periodo y que la seal
de entrada DI toma los valores reflejados en la figura. Tomando CK y DI como es-
tmulos se muestra la respuesta del ciclo de simulacin. Ntese que en realidad los
valores que toman CK y DI tambin son consecuencia de.la forma en que el ciclo
de simulacin acta sobre estas seales, pero por simplicidad slo mostramos la
evolucin de QI y Q2.
Obsrvese que si las seales tomasen sus nuevos valores en el instante en que
se realiza la asignacin sobre ellas, la ejecucin del ejemplo anterior dara como re-
sultado valores distintos sobre las seales QI y Q2, dependiendo del orden en que
se ejecutasen los procesos FFI y FF2.
2. Presentacin del lenguaje VHDL 43
Estmulos a la simulacin
CK
.,
le
D1 J
,
.
10 ns 20 ns 30 ns
Respuesta de la simulacin
Una unidad de diseo es una construccin VHDL que puede ser analizada indepen-
dientemente; en este momento se puede considerar que el anlisis de una unidad de
diseo es anlogo a la compilacin de un programa, ms adelante, en el Captulo 3,
se describir con detalle el proceso de anlisis. Existen cinco tipos diferentes de
unidades de diseo: la declaracin de entidad (entity declaration), la arquitectura de
una entidad (architecture J, la configuracin (configuration J, la declaracin de pa-
quete (package declaration) y el cuerpo del paquete (package body). La declaracin
44 VHDL. Lenguaje estndar de Diseo Electrnico
entity identificador iB
[genricos)
[puertos)
[declaraciones 1
[begin sentencias)
end [entity) [identificador) ;
entity identificador iB
end;
2. Presentacin del lenguaje VHDL 45
Esta entidad no tiene ninguna comunicacin con el exterior, por lo que no pue-
de ser reutilizada en ningn otro diseo. No obstante, entidades de este tipo pueden
utilizarse para describir sistemas completos (ver Captulo 5).
De entre las partes opcionales de la declaracin de una entidad cabe destacar la
declaracin de los puertos, que determinan la interfaz del dispositivo con el exte-
rior. Para comprender qu son los puertos de una entidad se puede hacer una com-
paracin entre stos y las patillas de un circuito. Para cada puerto se tendr que in-
dicar el nombre, el tipo y el modo. El nombre se utilizar para poder referenciarlo,
el tipo definir la clase de informacin que se transmitir por el puerto mientras que
el modo servir para definir la direccin de la informacin, en el sentido que los
puertos podrn ser de entrada, de salida o bidireccionales. Opcionalmente tambin
puede asignarse un valor por defecto que se tendr en cuenta slo en caso que el
puerto est desconectado. Por ejemplo, la declaracin de una entidad que imple-
mente un multiplexor de dos bits sera:
entity Mux21 is
port ( a in bit;
b in bit;
ctr l in bit;
z out bit);
endr
MUX21
a bit
b
ctrl
bit
bit .[ lb. z
componentes desde una descripcin estructural se ver con ms detalle cmo fun-
cionan los genricos.
Las declaraciones y las sentencias normalmente no forman parte de la declara-
cin de una entidad, ya que en principio tienen poco que ver con la interfaz del dis-
positivo y mucho con su implementacin, por lo que es ms natural incluirlas den-
tro de su arquitectura. No obstante, debido a que para una entidad pueden definirse
muchas arquitecturas distintas, a veces se declaran objetos comunes a todas las ar-
quitecturas para no tener que declararlos en cada arquitectura. Por lo que a las sen-
tencias se refiere, pueden incluirse siempre que sean pasivas en el sentido que no
afecten a la funcionalidad del dispositivo. Son tpicas las sentencias que hacen com-
probaciones sobre las entradas para detectar, por ejemplo, configuraciones prohibi-
das o violaciones de tiempos.
2.3.2. Arquitectura
En este caso todas las operaciones que se tendran que llevar a cabo seran de
tipo lgico y se podran implementar mediante una sola puerta. En general las ope-
raciones pueden ser mucho ms complejas siendo necesarios mdulos ms grandes
para implementarlas, por ejemplo, sumadores, multiplicadores o desplazadores de
varios bits. El ejemplo incorpora tres seales internas para definir la interconexin
de los diferentes operadores y asocia un valor de retardo a cada operacin mediante
la clusula after, que se ver ms adelante en este captulo al hablar de las asigna-
ciones a seales.
Este subapartado slo sirve para remarcar que aunque se hayan explicado diferentes
estilos para describir una arquitectura VHDL y se hayan dado ejemplos de cada uno
de ellos, todos estos estilos pueden mezclarse en la implementacin de una sola ar-
quitectura. De este modo, una arquitectura puede estar formada, por ejemplo, por
varios procesos descritos mediante el estilo funcional, juntamente con un conjunto
de ecuaciones (procesos de una sola lnea) que determinen un flujo de los datos y
una serie de referencias a otros componentes de ms bajo nivel. Por lo tanto, el gra-
do de flexibilidad que permite VHDL en este sentido es muy importante.
2.3.3. Configuracin
La configuracin es la construccin VHDL encargada de seleccionar la arquitectura
que se quiere utilizar para una entidad concreta. Como se ha comentado anterior-
mente, VHDL permite definir ms de una arquitectura por entidad para facilitar el
estudio de varias posibilidades a la hora de implementarla.
La sintaxis VHDL para definir una configuracin es la siguiente:
ponente. Como se podra dar el caso de que dos referencias de un mismo compo-
nente utilizaran diferentes arquitecturas (o entidades), se da flexibilidad para confi-
gurar todas las referencias de un componente a la vez o por separado.
La configuracin del multiplexor de dos bits utilizado en los subapartados ante-
riores en el caso que se quiera trabajar con la arquitectura llamada FlujoDatos sera:
configuration Mux21_cfg of Mux21 is
for FlujoDatos
end for;
end Mux21_cfg;
En caso que no se defina ninguna configuracin para una entidad y sus arqui-
tecturas asociadas, hay muchas herramientas comerciales que utilizan por defecto la
arquitectura que haya sido analizada en ltimo lugar.
2.3.4. Paquetes
Un paquete permite agrupar un conjunto de declaraciones para que puedan ser usa-
das por varios dispositivos sin ser repetidas en la definicin de cada dispositivo. De
esta forma se facilita la reutilizacin y la actualizacin del cdigo.
Normalmente en un paquete se suelen declarar constantes, tipos y subtipos de
datos, subprogramas y componentes. Ms adelante en este captulo se ver con ms
detalle el significado y la utilizacin de cada uno de estos elementos del lenguaje.
Un aspecto importante del paquete es que, al igual que pasaba con las entida-
des, se divide en dos unidades de diseo diferenciadas: la declaracin y el cuerpo
del paquete. La declaracin de paquete aporta la visin externa de los elementos
que se declaran mientras que el cuerpo del paquete define su implementacin. De
este modo se pueden ocultar los detalles de implementacin a un diseador que
puede estar interesado en cmo utilizar un elemento pero no necesita saber cmo
est implementado. Por esta razn, en la declaracin de un paquete suelen declarar-
se los subprogramas dndoles un nombre y la lista de parmetros necesarios para
llamarlos sin incluir su cuerpo. Respecto a las constantes, se pueden declarar en la
declaracin del paquete y darles un valor en el cuerpo del paquete o bien incluir to-
da la informacin slo en la declaracin del paquete. La declaracin de componen-
2. Presentacin del lenguaje VHDL 51
tes es muy til, por ejemplo, para bibliotecas de celdas, de este modo los diseos
pueden utilizarlas sin tener que aadir una larga declaracin de componentes al ini-
cio de su arquitectura. En este caso slo es necesario la interfaz de la celda, por lo
que la declaracin se pondr en la declaracin del paquete. Por ltimo, al declarar
tipos y subtipos de datos ya se da toda la informacin, por lo que suelen ponerse s-
lo en la declaracin del paquete, mientras que en el cuerpo del paquete pueden apa-
recer declaraciones de tipos y subtipos tiles para el cuerpo de los subprogramas.
La sintaxis VHDL para declarar un paquete es la siguiente:
package identificador
[declaraciones]
end [package] [identificador];
use Biblio.RtardosOp.RetNOT;
use Biblio.RetardosOp.all;
use Biblio.RetardosOp.all
architecture FlujoDatos of Mux21 1s
signal ctrl_n, nI, n2 : bit;
begin
ctrl_n <= not (ctrl) after RetNOT;
nI <= ctrl_n and a after RetAND2;
n2 <= ctrl aod b after RetAND2;
z <= (nI ar n2) after RetOR2;
end FlujoDatos;
2.3.5. Bibliotecas
Una biblioteca sirve para almacenar el resultado del anlisis de las unidades de di-
seo para su futuro uso. Las bibliotecas son beneficiosas porque facilitan la com-
particin y la reutilizacin del cdigo en diferentes diseos.
Aunque las unidades de diseo se analicen separadamente, se tiene que respe-
tar un cierto orden ya que algunas unidades dependen de otras. En general, la decla-
racin de una entidad tiene que analizarse antes que su arquitectura y la declaracin
de un paquete antes que su cuerpo. Adems, cuando una entidad utilice algn ele-
mento de un paquete, las unidades de este paquete tienen que analizarse antes que
las unidades de la entidad, Por ltimo, antes de analizar una configuracin tienen
que haberse analizado las arquitecturas seleccionadas en dicha configuracin.
En el caso del ejemplo del multiplexor de dos bits que se ha venido utilizando
en todo este apartado de captulo se podran analizar las unidades de diseo en el si-
guiente orden:
library BibliotecaEjemplo;
use BibliotecaEjemplo.PaqueteEjemplo.all;
Las bibliotecas work y std son excepciones en el sentido que siempre son visi-
bles y, por tanto, no requieren la sentencia library.
Finalmente cabe destacar que la definicin de biblioteca es una definicin lgi-
ca, en el sentido que cada herramienta puede implementarla como quiera sobre el
sistema de ficheros. En algunos casos una biblioteca ser un fichero, en otros un di-
54 VHDL. Lenguaje estndar de Diseo Electrnico
rectorio O una estructura jerrquica de directorios. Por esta razn, cada herramienta
debe aportar facilidades para crear bibliotecas y para mapear su estructura lgica a
la posicin fsica en el disco.
Un objeto VHDL es un elemento del lenguaje que tiene un valor de un tipo de datos
concreto. Este tipo de datos determina el conjunto de valores posibles que el objeto
puede contener as como la clase de operaciones que se le podrn aplicar. En gene-
ral, no ser posible realizar operaciones entre dos objetos de distinto tipo si no se
aplica explcitamente una funcin de conversin de tipo a los operandos. Aunque
esta faceta del VHDL implica ms atencin por parte del diseador a la hora de es-
cribir un modelo, permite detectar errores durante el anlisis del cdigo sin necesi-
dad de simulacin.
En las siguientes secciones de este apartado se van a repasar los elementos l-
xicos del lenguaje, los objetos disponibles en VHDL, los diferentes tipos de datos
que se pueden asignar a estos objetos y los operadores que se pueden aplicar a estos
tipos de datos.
Antes de empezar a hablar de los objetos del VHDL resulta adecuado introducir los
elementos lxicos del lenguaje, que bsicamente son los identificadores, las pala-
bras reservadas, los smbolos especiales y los literales.
2.4.1.1. Identificadores
Los identificadores sirven para dar un nombre a los elementos VHDL, por lo que es
aconsejable elegir un nombre que sea significativo, de este modo se facilitar la
comprensin del cdigo. Existen una serie de reglas a la hora de formar un identifi-
cador:
Los identificadores no tienen fijada una longitud mxima. Lo ms aconseja-
ble es elegir una longitud suficiente para que el identificador tenga significa-
do evitando las longitudes excesivamente largas,
Un identificador puede contener los caracteres alfabticos de 'A' a 'Z' y de
'a' a 'z', los caracteres numricos de 'O' a '9' y el carcter subrayado '_'
(underline). VHDL no establece ninguna diferencia entre maysculas y mi-
nsculas, por lo que los identificadores RELOJ, reloj y Rel.al son idnticos.
Un identificador debe empezar con un carcter alfabtico, no puede terminar
con el carcter subrayado ni puede tener dos caracteres de subrayado segui-
dos.
No puede usarse como identificador una palabra reservada (las palabras re-
servadas se vern a continuacin).
2. Presentacin del lenguaje VHDL 55
Correctos IncorrectoS
i 3
i_2 i2_
Reloj _i2
RelojAOC Reloj$AOC
Reloj_AOC Reloj_AOC
Interrupcion3_Del_Procesador 3Interrupcion
Los significados de cada smbolo se vern a lo largo del captulo cuando se ha-
ble del tema concreto donde se use el smbolo. Por ejemplo, al tratar los operadores
ms adelante en este apartado se ver el significado de gran parte de smbolos de
esta lista.
Quizs en este momento cabe destacar el smbolo "--" que sirve para aadir co-
mentarios en el cdigo. Cuando aparezca este smbolo en una lnea, el analizador
no tendr en cuenta el texto comprendido entre este smbolo y el final de la lnea.
Al igual que en cualquier programa escrito en un lenguaje de programacin comn,
resulta muy til aadir comentarios en el cdigo para mejorar la legibilidad.
Finalmente resaltar que cualquier sentencia del lenguaje VHDL debe terminar
con el smbolo ";",
2.4.1.4. Literales
Un literal es un smbolo cuyo valor se obtiene directamente de su representacin.
Existen diferentes tipos de literales dependiendo de la naturaleza de su valor, con-
cretamente los literales se dividen en: nmeros enteros, nmeros en punto flotante,
literales fsicos, caracteres, cadenas de caracteres y cadenas de bits.
Los nmeros enteros, los nmeros en punto flotante y los literales fsicos sirven
para expresar valores numricos. Los nmeros enteros se componen simplemente
de una secuencia de dgitos, a diferencia de los valores en punto flotante, que deben
contener un punto y un dgito decimal. Por su parte, los literales fsicos son valores
enteros o en punto flotante que tienen una unidad de medida fsica asignada.
2. Presentacin del lenguaje VHDL 57
Tambin cabe destacar que los literales numricos se pueden representar utili-
zando cualquier base entre 2 y 16. Para bases mayores que 10 se utilizarn los ca-
racteres desde 'A' a 'P' (o en minsculas) para representar los dgitos desde ellO al
15. La notacin exponencial tambin se puede representar en cualquier base. Por
ejemplo, el valor 12 se podra representar:
2#1100# 2#11#E2 4#30# 8#14# 10#12# 10iO.12#e+2 16#C#
Por ltimo, un literal cadena de bits est formado por una secuencia de caracte-
res de 'O' a '9' y de 'N a 'P' (o en minsculas) encerrados entre comillas dobles
precedidos de una letra que indica la base. Esta letra puede ser B para binario, O pa-
ra octal o X para hexadecimal. Como en el caso de los literales numricos se pue-
den incluir caracteres '_' para mejorar la legibilidad en caso de secuencias muy lar-
gas.
A continuacin se dan algunos ejemplos de literales de este tipo:
2.4.2.1. Constantes
Una constante es un objeto que mantiene siempre su valor inicial, de modo que no
puede ser modificada una vez ha sido creada.
La sintaxis VHDL para declarar una constante es la siguiente:
Cualquier constante podra ser sustituida directamente por un literal con su va-
lor; no obstante, es aconsejable utilizar constantes para mejorar la legibilidad del
cdigo, ya que normalmente el identificador de la constante ser ms significativo
que su valor. Tambin para facilitar su actualizacin, de este modo, para cambiar el
valor de una constante slo se tendr que modificar la declaracin, si no se usan
constantes har falta realizar tantas modificaciones como veces aparezca el literal
en el cdigo.
2.4.2.2. Variables
A diferencia de las constantes, las variables pueden cambiar su valor una vez han
sido declaradas mediante las sentencias de asignacin. Una variable no tiene ningu-
na analoga directa en hardware, normalmente se utilizan en el estilo algortmico
para almacenar valores intermedios dentro de un proceso.
La sintaxis VHDL para declarar una variable es la siguiente:
Cuando una variable ha sido creada su valor puede ser modificado utilizando
una sentencia de asignacin de variable. La sintaxis VHDL de estas sentencias es la
siguiente:
identificador := expresin;
2.4.2.3. Seales
Una seal es un objeto que, al igual que una variable, puede modificar su valor den-
tro de los posibles valores de su tipo pero, a diferencia de sta, tiene una analoga
directa en hardware. ya que se puede considerar como una abstraccin de una cone-
xin fsica o un bus. Por esta razn, no est restringida a un proceso sino que sirve
para interconectar componentes de un circuito y para sincronizar la ejecucin y sus-
pensin de procesos.
La sintaxis VHDL para declarar una seal es muy parecida a la sintaxis reque-
rida para declarar constantes y variables:
signal identificador {, ...} : tipo [:=~resi6~1;
En este caso la expresin opcional se utiliza en caso de que el puerto est des-
conectado.
A continuacin se muestran algunos ejemplos de declaracin de seales:
signal Reloj: stq_logic := 'O';
signal Comparacion : bit;
signal Resultado: integer range O to 7;
port ( a" b : in integer range O to 7;
c : out integer range O to 7;
d : inout std_logic);
2.4.2.4. Ficheros
Un fichero es un objeto que permite comunicar un diseo VHDL con un entorno
externo, de manera que un modelo puede escribir datos y leer datos que persisten
2. Presentacin del lenguaje VHDL 61
La parte de definicin de tipo sirve para indicar el conjunto de valores del tipo.
Puede tener varios formatos, que se vern en detalle a medida que se expliquen los
diferentes tipos predefinidos del lenguaje. A continuacin se dan ejemplos de decla-
raciones:
type DiaMes la range 1 to 31;
type PuntosCardinales la (norte, sur, este, oeste);
Una vez definido un nuevo tipo de datos ya se pueden declarar objetos de este
tipo, teniendo en cuenta que los ficheros requieren un tipo especial llamado tipo fi-
chero. Por ejemplo, se podran declarar los siguientes objetos:
constant DiasEnero : DiaMes := 31;
variable DiaHoy : DiaMes;
signal Direccion : PuntosCardipales;
port (Entrada: in PuntosCardinales;
,Salida: out PuntosCardinales);
Cada tipo es diferente e incompatible con los dems tipos, aun cuando las defi-
niciones sean idnticas. Si por ejemplo se declara el tipo
type De1a31 is range 1 to 31;
Ntunero := DiaMes_Dela31(DiasEnero);
2. Presentacin del lenguaje VHDL 63
Internamente VHDL considera los tipos fsicos como enteros con una unidad
primaria asociada, por lo que cualquier valor fsico que contenga un literal real ser
redondeado a un nmero entero de unidades primarias. Por ejemplo, los tres litera-
les siguientes sern equivalentes:
4.3211 ps 4.321 ps 432'1 fs
A partir de estos tipos acabados de definir se podran declarar objetos de estos tipos:
variable ComandoActual : Comandos := abajo;
variable TeclaActual : Teclas := 'a';
library IEEE;
use IEEE.std_logic_1164.all;
Se ha visto que dos tipos de datos diferentes no pueden utilizarse como operan-
dos en una misma operacin. Un tipo y un subtipo no pueden considerarse tipos di-
ferentes, por lo que se les pueden aplicar las mismas operaciones y pueden mezclar-
se en una operacin. De todos modos, en caso que se tenga que asignar el resultado
a un objeto del subtipo, este resultado tendr que cumplir la restriccin asociada al
tipo base, es decir, tendr que pertenecer al subconjunto de los posibles valores del
subtipo,de no ser as se producir un error durante la simulacin. Por tanto, un sub-
tipo de datos puede ser til para asegurarse que cada objeto toma valores dentro de
su rango esperado, detectando el error en caso contrario.
Por ltimo decir que se pueden declarar subtipos de datos implcitamente en el
momento de declarar un objeto. Por ejemplo:
La variable llamada MesActual forma parte de un subtipo del tipo de datos en-
tero que no se ha declarado explcitamente.
Los tipos de datos compuestos son aqullos cuyos valores se pueden dividir en uni-
dades atmicas ms pequeas. Existen dos tipos compuestos bsicos: los vectores y
los registros. Los primeros estn compuestos por unidades atmicas del mismo tipo
mientras que los segundos son heterogneos en el sentido que estn formados por
un conjunto de objetos diferentes. Al declarar un objeto de tipo compuesto, cada
uno de sus elementos se inicializar por defecto segn las reglas que correspondan
a su tipo. En este subapartado se van a repasar las caractersticas de cada tipo de da-
tos compuestos y las posibilidades que ofrece cada clase.
68 VHDL. Lenguaje estndar de Diseo Electrnico
2.4.3.4. 1. Vectores
Un vector es un conjunto de objetos del mismo tipo ordenados mediante uno o ms
ndices que indican la posicin de cada objeto dentro del vector. El nmero de ndi-
ces determina la dimensin del vector, para vectores que tengan un solo ndice se
hablar de vectores unidimensionales o simplemente vectores, en cambio los vecto-
res con ms de un ndice sern vectores multidimensionales o matrices.
Para declarar un vector se tendr que crear un tipo que bsicamente determine
el tipo de los objetos que formarn el vector y al rango de los ndices que siempre
ser de un tipo discreto, es decir, entero o enumerado. La sintaxis VHDL para de-
clarar un vector es la siguiente:
Una vez se ha declarado el tipo que define un vector, se pueden declarar obje-
tos de este tipo, tanto constantes corno variables y seales. Por ejemplo, se podran
declarar las siguientes variables:
Una vez declarado el tipo Memoria se pueden declarar objetos de este tipo:
De nuevo se podr trabajar con toda la matriz a la vez o acceder a los elemen-
tos por separado, esta vez har falta especificar el valor de dos ndices en lugar de
uno:
RamA := RamB
RamA(4,7) := '1';
En este ejemplo concreto de una memoria, considerando que est formada por
64 palabras de 8 bits, se podra acceder a una palabra de la siguiente forma:
DireccionRamA := 34;
COl'ltenidoRamA := RamA(O to 7, DireccionRamA);
En los ejemplos mostrados se ha visto que se puede acceder tanto a un solo ele-
mento de un vector como a un subconjunto de elementos o a todo el vector. Para
asignar valores a un solo elemento basta con utilizar un literal adecuado al tipo de
datos del elemento. Para asignar valores a un conjunto de elementos, en cambio, se
requiere una nueva construccin que permita asignarlos todos a la vez. Por esta ra-
zn VHDL proporciona el agregado que permite escribir un vector de literales que
se podrn asignar simultneamente a los elementos de un vector. La sintaxis del
agregado es la siguiente:
( [ posicin { I ...} => 1 literal t. "':.. }J
Es decir, se trata de una lista de literales separados por comas y encerrada entre
parntesis. Existen dos modalidades de agregados, en la primera se indica la posi-
cin de cada literal dentro del vector y en la segunda se omite esta posicin, de ma-
nera que el orden viene determinado por la ordenacin de literales en la lista.
Por ejemplo, se puede definir un tipo de datos para representar puntos en el es-
pacio:
70 VHDL. Lenguaje estndar de Diseo Electrnico
Por tanto, gracias al agregado es posible trabajar con todo el vector a la vez, sin
tener que utilizar bucles que accedan a cada elemento por separado para llevar a ca-
bo cualquier asignacin.
Todos los tipos de vectores vistos hasta el momento son restringidos en el sen-
tido que definen muy claramente su rango y, por tanto, queda especificado desde el
principio el nmero de elementos que tendr el vector y las caractersticas de los n-
dices que van a utilizarse. Adems de este tipo de vectores, VHDL proporciona los
tipos de vectores no restringidos en los que solamente se indica el tipo de los obje-
tos que va a contener sin especificar ningn rango. En el momento de declarar un
objeto de este tipo ser cuando se asignar un rango a este objeto concreto.
La sintaxis VHDL para declarar un tipo de vector no restringido es la siguiente:
type identificador is array ( tipo_ndice range <> {, ... } ) of tipo_objeto;
2.4.3.4.2. Registros
Un registro es un tipo de datos compuesto que a diferencia de los vectores est for-
mado por unidades atmicas de distinto tipo, que reciben el nombre de campos. Por
esta razn, los campos no se referencian mediante un ndice como en los vectores
sino que requieren un identificador nico dentro del registro para referenciarlo. El
tipo de datos registro no tiene nada que ver con el registro hardware utilizado para
almacenar valores en un circuito. Aunque los nombres coincidan, se trata de con-
ceptos totalmente distintos que no hay que confundir.
La sintaxis VHDL para declarar un tipo registro es la siguiente:
type idendificador la record
identificador {, ... } : tipo;
{ ... }
end record [identificador];
Una vez declarado el tipo Fecha se pueden declarar objetos de este tipo:
variable Hoy, Ayer : Fecha;
Al igual que pasaba con los vectores, se puede acceder a un solo elemento del
registro o a todo el registro a la vez:
72 VHDL. Lenguaje estndar de Diseo Electrnico
Para asignar valores a todo el registro se pueden usar tambin agregados con la
lista de literales que se quieran asignar. En este caso no tiene sentido indicar la posi-
cin que se quiere actualizar sino el identificador del campo. Por ejemplo:
Para crear un nuevo objeto existe la palabra reservada new, a la que se le debe
indicar el tipo del objeto para poder determinar el tamao de memoria que se re-
quiere:
2. Presentacin del lenguaje VHDL 73
6ntero...,.AP
:= new integer;
Para acceder al dato apuntado por el objeto de un tipo de acceso se puede utili-
zar la palabra reservada all:
Entero_Ap.all := 34;
deallocate (Entex::.o~!;
Para definir estructuras ms complejas, como, por ejemplo, una lista encadena-
da, basta con definir un tipo registro que contenga algn elemento apuntador apun-
tando a un registro del mismo tipo.
readline volcar la lnea actual del fichero sobre una variable de tipo lnea y avan-
zar el puntero del fichero sobre la lnea siguiente, mientras que writeline grabar la
variable de tipo lnea sobre el fichero y inicializar dicha variable.
Para poder trabajar con las variables de tipo lnea el paquete textio tambin
proporciona los siguientes procedimientos:
Ejemplo:
La entidad Sumador recibe operandos enteros en sus dos entradas y devuelve la su-
ma de estos operandos en su salida. La declaracin de dicha entidad es la siguiente:
entity Sumadoris
port (OpA : in integer;
OpB in integer;
Suma : out integer);
end;
Se quiere crear una entidad llamada BancoPruebas cuya funcin sea estimular
el Sumador con los operandos contenidos en un fichero de texto llamado Datos.txt
y grabar los resultados en un fichero de texto que se llame Resultados.txt. El forma-
to del fichero Datos.txt es el siguiente:
53 522
;'34 35
2 -3
53 + 522 = 575
..34 + 35 = 1
2 - 3 = -1
entity BancoPruebas is
end;
library IEEE;
use std.textio.all;
architecture Funci9nal 9f BncoPruebas is
signal OpA, OpB, Suma : integer;
component Sumador
port (OpA in integer;
0pB : in integer;
Suma : out integer );
end corrponent;
begin
write(LineaResultados, OpA);
if OpB_I ~ O then
write(LineaResultados, string'(M ~ M));
else
write(LineaResultados, string' (M + M));
end if;
write (LipeaResultaQos<, abs tOpB));
write(LineaResultados, string' (M = M));
write_(LiIJ,eaResultados, Suma);
writeline(Resltados, LineaResultados);
end loop;
wait;
end process;
-- Referencia al sumador
SumadorO: Sumador port map (OpA, OpB, Suma);
end Funcional;
Cabe destacar que el paquete textio, aparte de los tipos fichero de texto y lnea
y los procedimientos comentados anteriormente, tambin define otros procedimien-
tos como la funcin endfile para detectar el final del fichero. Otra cuestin impor-
tante de la arquitectura de BancoPruebas es la sentencia wait del proceso situada
entre la lectura de los operandos y la escritura de los resultados. Como se coment
en subapartados anteriores de este captulo, la asignacin a una seal no se produce
inmediatamente sino que primero se requiere la suspensin de todos -los procesos
activos, esto se consigue mediante esta sentencia que suspende el proceso durante
un periodo de tiempo especificado por la constante Periodo. Esta cantidad de tiem-
po debera ser como mnimo el retardo que necesita el componente Sumador para
generar la salida Suma. En principio, a partir de la arquitectura del componente se
puede determinar cul es este tiempo mnimo, en el ejemplo se ha supuesto que 100 ns
son suficientes.
Se puede considerar que una expresin es una frmula que indica la forma como
debe calcularse un valor. Para hacerlo, se dispone de una serie de operadores ms
unos elementos que actan como operandos. Estos elementos suelen ser bsicamen-
te literales, identificadores, atributos que determinen un valor, calificaciones y con-
versiones de tipo y parntesis para especificar un orden de precedencia. Por lo que a
los operadores se refiere, VHDL tiene predefinidos los operadores aritmticos, rela-
cionales, lgicos y de concatenacin de cualquier lenguaje de programacin comn
ms los operadores de desplazamiento para vectores unidimensionales que fueron
aadidos en VHDL-93.
En la Tabla 2-1 se muestran todos los operadores predefinidos de VHDL orde-
nados decrecientemente segn su grado de precedencia con el tipo de datos que
pueden adoptar sus operandos. Como puede apreciarse, cada operador puede apli-
2. Presentacin del lenguaje VHDL 77
carse sobre un conjunto de tipos de datos diferente, por lo que realmente en VHDL
existen varias definiciones distintas del mismo operador. Esta caracterstica, llama-
da sobrecarga de operadores, resulta muy til, ya que permite redefinir los operan-
dos predefinidos sobre tipos de datos definidos por el usuario. Por ejemplo, en el
paquete std_logic_1l64 de IEEE se definen muchos de estos operadores para traba-
jar con el tipo de datos std_ulogic_vector. Puede existir un nmero ilimitado de de-
finiciones de un operador, la nica condicin que se debe cumplir es que no se repi-
tan los tipos de ios operandos y del resultado en dos definiciones diferentes de un
mismo operador, ya que de ser as, no habra forma de saber a qu operando se est
haciendo referencia.
2.4.5. Atributos
identificador_elemento'identificador_atributo
En la Tabla 2-2 se muestran los atributos predefinidos sobre los rangos de los vecto-
res restringidos (constrained array). La letra A que se utiliza para denominar este
Atributo Descripcin
tipo de atributos proviene de la palabra inglesa array, que significa vector. La inclu-
sin de la dimensin sobre la que se aplica el atributo es opcional, en caso de no es-
pecificarse se usar el primer ndice del vector.
Normalmente es recomendable utilizar esta clase de atributos en lugar de litera-
les especficos para cada tipo de datos, ya que se obtienen modelos ms generales
que facilitan la actualizacin del cdigo. Por ejemplo, si se considera el siguiente
cdigo:
end loop;
end process;
end loop;
end process;
Con lo que un cambio en el rango del tipo Palabra no provoca ninguna modifi-
cacin en el bucle que, al utilizar el atributo range, ya refleja este cambio automti-
camente.
Atributo Descripcin
mero siguiente de un valor real. Finalmente, cabe destacar que los atributos aseen-
ding, value e image fueron introducidos en VHDL-93.
En la Tabla 2-4 se muestran los principales atributos que se pueden aplicar a una se-
al. La letra S como prefijo del atributo sirve para especificar que se trata de atribu-
tos aplicados a una seal.
Atributo Descripcin
Cabe destacar que los atributos delayed, stable, quiet y transaction devuelven
una seal, mientras que los dems atributos siempre devuelven un valor de un tipo
de datos, los ms comunes son el tipo fsico time y el tipo booleano Por ltimo, cabe
decir que los atributos driving y driving_value fueron incluidos en VHDL-93, por
lo que un analizador de VHDL-87 no los reconocer.
Aparte de los atributos predefinidos, VHDL permite definir nuevos atributos que se
pueden asociar a cualquier elemento del lenguaje. Para hacerlo, en primer lugar se
debe declarar el atributo asignndole un identificador y el tipo de datos del valor
que devolver. Una vez declarado, se debe especificar el elemento al que va asocia-
do y su valor. Los atributos definidos por el usuario siempre son estticos, es decir,
constantes.
La sintaxis VHDL para declarar un atributo es la siguiente:
attribute identificador : tipo_datos;
Tambin se podran definir atributos que almacenaran el retardo desde cada en-
trada a cada salida de una entidad:
82 VHDL. Lenguaje estndar de Diseo Electrnico
entity MUX21 la
port (a, b, ctrl : in bit;
z : out bit);
attribute DeAaZ : time;
attribute DeBaZ :'time;
attribute DeCtr1aZ : time;
attribute DeAaZ af AND2 : entity ia 1.2 na;
attribute DeBaZ af AND2 : entity ia 1.2 ns;
attribute DeCtrlaZ af AND2 : entity ia 1.0 ns;
end entity MUX21.
Como ltimo ejemplo, los literales de un tipo enumerado tambin podran tener
un atributo para determinar su codificacin:
En este apartado se describen todas las sentencias secuenciales que pueden usarse
en el lenguaje VHDL. Las sentencias secuenciales son aquellas que nos permiten
describir o modelar funcionalidad de un componente, y pueden encontrarse en los
procesos o en los cuerpos de los subprogramas.
Las podemos clasificar en sentencias de asignacin (a seal y a variable), sen-
tencias condicionales (ij, case), sentencias iterativas (loop, exit, next), otras senten-
cias (wait, assert, null) y llamadas a subprogramas.
La primera forma en que se puede utilizar la sentencia wait es sin ningn tipo
de condicin para despertar al proceso. Esto significa que el proceso en cuestin
ejecutar las sentencias que contenga hasta el wait y entonces se suspender, sin
que pueda volver a activarse en toda la simulacin. El uso ms comn de este estilo
de sentencia wait lo encontramos en los bancos de pruebas, que normalmente espe-
cifican una serie de acciones o pruebas a realizar sobre el dispositivo a verificar, y a
continuacin se termina la simulacin. El esquema habitual de esta estructura se
muestra en el siguiente ejemplo:
proces
begin
sentencfas_secuenciales
wait;
end process;
process
begin
e <= a and b;
wait on a, b;
end process;
process
begin
Reloj <= not Relj;
wait for 10 na;
end process;
pasar a estudiar con ms detalle las opciones de la asignacin a seal, debe quedar
claro que al ejecutarse una de estas sentencias, no se est modificando el contenido
de la seal, sino que se est modificando el contenido de su cola de eventos, es de-
cir, se est proyectando un pasible cambio del valor futuro de la seal, que algunas
veces puede no llegar a producirse.
Para dejar claro este comportamiento de la asignacin a seal (que al principio
parece extrao al compararlo con la asignacin a variable), veamos un ejemplo que
nos ayude a entender mejor su funcionamiento. Supongamos que queremos in-
tercambiar el contenido de dos seales, para ello podemos escribir el siguiente pro-
ceso:
process
begin
a <= b;
b <= a;
wait on a, b;
end process;
Veamos algunos ejemplos que nos aclaren las diferencias entre la asignacin
con modelo transporte y modelo inercial. En primer lugar veamos el modelo trans-
porte, que es ms intuitivo.
Al producirse una asignacin a seal con el modelo de transporte, sta proyecta
nuevos valores en la cola de eventos de la seal, de forma que si los valores se pro-
yectan para tiempos posteriores al ltimo evento que ya tenga proyectada la cola de
eventos, ste nuevo valor se aade a sta. Por ejemplo, para el siguiente proceso:
process
begin
s <= transport, 'o' after 10 na,
s <= transport '1' after 20 na,
86 VHDL. Lenguaje estndar de Diseo Electrnico
wait;
end process;
process
begin
s <= transport '1' after 20 na;
s <= transport 'O' after 10 na;
wait;
end process;
Cola de eventos de s
process t 10 ns
begin ____
~ v 'O'
s <= transport 'O' after 10 ns; ,__-'--_----'
s <= transport '1' after 20 ns;----.... t 10 ns 20 ns
wait;
end process;
v 'O' -r
(a)
Cola de eventos de s
process t 20 ns
begin
v '1'
s <= transport '1' after 20 ns; ~
s <= transport 'O' after 10 ns; ~ 10 ns
wait;
'O'
end process;
(b)
process
begin
s <= 'o' after 10 DS;
S <= '1' after 20 DS;
wait;
end process;
process
begin
s <= '1' after 20 DS;
S <= 'O' after 10 DS;
wait;
end process;
Cola de eventos de s
process t 10 ns
begin ___________..
v 'O'
s <= 'O' after 10 ns; L..._--L._ __ .....J
Cola de eventos de s
t 20 ns
v '1'
t 10 ns
v
(b)
procesa
begin
Operando <= O after 10 na, 10 after 20 na, 100 after 30 DS;
wait;
end procesa;
Esta asignacin genera una serie de cambios sobre la seal Operando. sta to-
mar los valores O a los 10 ns, 10 a los 20 ns y 100 a los 30 ns independientemente
del tipo de retardo especificado.
La nica diferencia que incorpora VHDL-93 a la asignacin a seal secuencial
es que ampla los modelos de retardo. Para ello incluye la palabra reservada reject
(rechaza), que puede usarse como modificador del modelo de retardo inercial (y no
el transporte). Con la opcin de rechazar se puede especificar para qu valores de
tiempo (qu anchuras de pulso) se debe rechazar una transicin sobre una seal. Pa-
ra ms detalles sobre el comportamiento de esta opcin, consultar [A95][BFMR93].
a := b
b := a;
2. Presentacin del lenguaje VHDL 89
No consigue intercambiar las dos variables, sino que despus de ejecutarse am-
bas variables contienen el valor inicial de b. Para intercambiar las variables debe-
mos usar una variable temporal:
'l'q) ,;;: a;
a := b;
b := 'Inp;
2.5.4. La sentencia if
La sentencia if se utiliza para escoger en funcin de alguna condicin qu senten-
cias deben ejecutarse. En su forma ms simple nos permite ejecutar un conjunto de
sentencias en funcin de una condicin, en su forma ms general permite decidir
entre varios conjuntos de sentencias a ejecutar, cada uno de ellos en funcin de dis-
tintas condiciones. La sintaxis general de la sentencia if es la siguiente:
El proceso del ejemplo es sensible a las seales Dato y Carga; por lo tanto, cada
vez que haya un evento en alguna de ellas se ejecuta. En ese caso a la seal Biestable
slo se le asigna el valor que contenga Dato si la seal de carga vale '1'. En otro ca-
so la asignacin no se ejecuta y, por lo tanto, Biestable mantiene su antiguo valor.
Una segunda forma de la sentencia if permite escoger entre dos grupos de sen-
tencias a ejecutar, dependiendo de una condicin; en caso que la condicin se cum-
pla, se ejecutar el primer grupo, en caso contrario se ejecutar el segundo grupo.
Un ejemplo tpico del uso de esta sentencia if se puede encontrar en el modelado de
un buffer triestado. Si la seal de habilitacin est activa, el buffer deja pasar a la sa-
lida el valor que tenga en su entrada, en otro caso deja su salida en alta impedancia:
entity Triestate is
port(
Habilitacion, entrada: in std-Ioqcr
Salida: out std~logic);
end Triestate; .
architecture Ejemplo of Triestate is
begin
process
begin
if Habilitacion='l' then
Salida <= Entrada;
else
Salida <= 'Z';
end if;
wait 00 Habilitacion, Entrada;
end process;
end Ejemplo;
2. Presentacin del lenguaje VHDL 91
process
begin
if Iniciar='O' then
Biestable <= 'O';
elsif carga='!' tben
Biestable <= Dato;
end if;
wait on Iniciar, Carga, Dato;
end process;
multiplexor. Supongamos que tenenos un multiplexor 4-1 de datos de ocho bits, con
una seal de seleccin de dos bits:
entity Muxis
port(
Seleccion : in bit_vector(O to 1);
Entrada1, Entrada2, Entrada3, Entrada4 in bit_vector(O to 7);
Salida: wt bit_vector (O to 7));
end Mux;
architecture Ejemplo of Mux is
begin
process
begin
case Seleccian is
when 00 =>
Salida <= Entrada1
wben 01 =>
Salida <= jntrada2
when "lO :;:>.
Salida <'7 Entrada3;
when "11=:>
Salida <= Entrada4
end case;
wait on Seleccion, Entrada1, Entrada2, Entrada3, Entrada4;
end process;
end ejemplo;
process
begin
case Seleccion is
wben "OO' I "01" =>
Salida <= Entrada!;
wben "lO" =>
Salida <= Entrada2;
wben "U =>
Salida <= Entrada3;
end case;
wait on Seleccion, Entrada!, Entrada2, Entrada3;
end process;
que la seal de seleccin (Seleccion) es de tipo bit_vector, de forma que los valo-
res "00", "O1", "10" y "11" cubren todas las posibilidades. Si la seal Seleccion
fuese de tipo std_logic_vector, debera aadirse la clusula others al final de dicho
ejemplo.
entity 'Contador_O_15 ls
port(
Reloj : in bit;
Cuenta : out natural);
end Contador_O_15;
archltecture Ejemplo of Contador_O_15 18
signal Contador : natural;
begin
process
begin
Contador <= O;
loop
wait untll Reloj='1';
Contador <= (Contador + 1) mod 16;
end loop;
end process;
Cuenta <= Contador;
end Ejemplo;
2. Presentacin del lenguaje VHDL 95
process
begin
Contador <= Or" . j.
process
begin
Contador <= O;
for 1 in O to 15 loop
wait until Reloj='l';
Contador <='Contador + 1;
end loop;
end process;
La sentencia exit est muy relacionada con la sentencia loop, de hecho su nica uti-
lidad es ofrecer una forma de terminar la ejecucin de un bucle. La sintaxis general
de la sentencia exit es:
entity Contador_O_15 is
port(
Reloj, Inicio : in bit;
Cuenta : out natural);
end Contador_O_15;
architecture Ejemplo,of Contador_O~15 ls
signal Contador. : natural;
begin
process
begin
Contador <= O;
lOp
wait until (RSloji:'l'and Reloj'event) ar Inicio='O';
exit when inicio='O';
Contador <= (Contador + 1) moa 16;
end loop;
end process;
Cuenta <= Contador;
end Ejenplo;
En este ejemplo, cuando Inicio pase a valer O se saldr del bucle de la sentencia
loop, de forma que se ejecutar de nuevo la sentencia de inicializacin del contador.
Obsrvese que en la sentencia wait se ha especificado explcitamente qu reloj de-
ba ser' l' Ydeba tener un evento. Esto se debe al hecho que al usar la opcin until
especificando diversas condiciones, cada seal que aparece en las distintas condi-
ciones pasa a formar parte de la lista de sensibilidad. De forma que podra darse el
caso que un cambio de 'O' a' l' de Inicio coincidiendo con que la seal Reloj valiese
'1' se interpretase como un flanco de reloj por la forma en que se ha codificado el
proceso.
2. Presentacin del lenguaje VHDL 97
En este proceso se han introducido dos bucles anidados, el bucle interno (In-
cremento) es el que modela el incremento del contador a cada flanco de reloj, mien-
tras que el bucle externo (Carga Datos) es el que se encarga de cargar los datos
cuando hay un flanco de reloj y la seal de carga est activa. La primera sentencia
exit interrumpe la ejecucin del bucle externo cuando se activa la seal Inicio (acti-
va a baja), de forma que se ejecuta la sentencia Contador <= O hacindose efectiva
la inicializacin. La segunda sentencia exit termina la ejecucin del bucle interno,
de forma que se pasa a esperar el siguiente flanco de reloj y a cargar el contador con
los datos en caso que la seal de carga siga activa.
Obsrvese que por el orden como se han especificado las dos sentencias exit, la
seal de Inicio tiene prioridad sobre la seal de carga de datos, adems la inicializa-
cin del contador es asncrona mientras que la carga de datos es sncrona (debido al
wait until Reloj= '1' del bucle externo).
lizar ese salto de una iteracin. Para ejemplificar el uso de la sentencia next, pode-
mos modificar nuestro contador mdulo 16 de forma que no pase por el valor 8.
process
begin
Contador <= O
for 1 in O to 15 loop
next when i=8
Contador <= I
wait until Reloj='l'
end loop;
end process;
El proceso es sensible a la seal Reloj; por lo tanto, se activa cada vez que se
produce un evento en Reloj. Si se produce un flanco de subida del Reloj, pasa el da-
to de entrada al contenido del biestable (q <= d) y a continuacin guarda en la va-
riable Inicio_Pulso el tiempo de simulacin en que se ha producido el flanco de su-
bida. Al producirse el flanco de bajada, comprueba que la diferencia de tiempo en-
tre ste (tiempo actual) y el tiempo en que se produjo el flanco de subida. Si este
tiempo es inferior a 5 ns la condicin de la sentencia assert no se cumple y, por lo
tanto, se enva el correspondiente mensaje a la salida estndar; para este tipo de vio-
lacin se ha escogido warning como nivel de severidad.
VHDL-93 ofrece una variacin de la sentencia assert: la sentencia reporto Su
sintaxis es:
report cadena_caracteres {expresin severidad]
Por tanto, esta variacin aparece con el nimo de proporcionar una sentencia
que permita reportar mensajes en la simulacin de forma ms cmoda, en caso que
stos no dependan de ninguna condicin.
100 VHDL. Lenguaje estndar de Diseo Electrnico
Esta sentencia se usa para indicar que no se debe realizar ninguna accin. Su sinta-
xis general es:
[etiqueta :J null;
case Valor is
when O I 1 => null;
when others => Valor := Valor mod 2;
end case;
En caso que Valor valga O o 1 no debe ejecutarse la funcin mod, ya que Valor
ya contiene el valor correcto.
process
begin
sentencias secuenciales;
wait en lista de sensibilidad;
end process;
Un proceso que no asigna valores a ninguna seal (y, por lo tanto, no puede
despertar a otros procesos, se llama proceso pasivo. Los procesos pasivos pueden
aparecer en la declaracin de entidad de un modelo.
2. Presentacin del lenguaje VHDL 1 03
La etiqueta es opcional, sirve para identificar al proceso y puede ser til en las
tareas de depuracin del cdigo. La asignacin a seal concurrente es una forma
compacta de escribir una asignacin a seal secuencial, se comporta de la misma
forma que sta (seccin 2.5.2) y su principal diferencia radica en que se encuentra
en las arquiteturas (architecture), en lugar de encontrarse en procesos o subprogra-
mas.
La asignacin concurrente es sensible a las seales que se encuentren a la dere-
cha de la asignacin, o sea, que formen parte de la expresin que se asigne. De for-
ma que la siguiente asignacin concurrente:
a <= b;
Es equivalente al proceso
process(b)
begin
a <= b;
end process;
La etiqueta es opcional, sirve para identificar al proceso y puede ser til en las
tareas de depuracin del cdigo. La sentencia assert concurrente es una forma com-
pacta de escribir una sentencia assert secuencial, se comporta de la misma forma
106 VHDL. Lenguaje estndar de Diseo Electrnico
que sta (seccin 2.5.9) y su principal diferencia radica en que se encuentra en las
arquitecturas (architecture), en lugar de encontrarse en procesos o subprogramas.
El proceso equivalente contiene una sentencia assert con la misma condicin
(expresion_booleana) el mismo mensaje en report y el mismo nivel de severidad.
La sentencia se ejecutar cada vez que se produzca un evento en cualquiera de las
seales que aparezcan en la condicin. De esta forma la siguiente sentencia assert
concurrente:
Es equivalente al proceso
process(r, s)
begin
assert not (s='1' aDd r='l')
report "uso incorrecto de la bscula RS;
end process;
Ntese que ste es un proceso pasivo, que no realiza asignacin alguna a seal
y que, por lo tanto, puede aparecer en la entidad del diseo. Por lo tanto, la senten-
cia assert concurrente tambin puede aparecer en la entidad del modelo.
La variacin de la sentencia assert introducida en VHDL-93 y descrita en la
seccin 2.5.9 tambin puede presentarse como una sentencia concurrente.
nombre_funcion [{parametros} 1
2.6.7.1. Componentes
etiqueta_referencia: nombre_componente
[generic map (lista_asociaci6n); 1
[port map (list~asociaci6n);J
entity SumadorCompleto is
begin
port (X, Y, Cln : in bit;
COUt, Sum : oot bit;);
end SumadorCompleto;
architecture Estructura of SumadorCompleto is
canponent Semi sumador
port(II, 12 : in bit;
COut, Sum : out bit);
end canponent;
camponent PuertaOr
port(1I, 12: in bit;
O : out bit);
end camponent;
signa! A, B, C : bit;
begin
VI : Semi sumador port map (X, Y, A, B);
U2 :'Semi sumador port map (B, crn, C, Sum);
V3 : PuertaOr port map (A, C, COut);
end Estructura;
U1 U3
X
Cln
ss
S SS
U2
I e
8-- co
"'
Sum
Existen dos formas de asociar los puertos locales (los que aparecen en la decla-
racin del componente) con los puertos actuales (aquellos que aparecen en cada co-
pia de un componente).
La primera forma es la que se muestra en el ejemplo del sumador completo:
asociacin posicional. Se asocia cada puerto local con su puerto actual por la posi-
cin en que aparece. Por ejemplo, la instancia U 1 del semi sumador conecta el puer-
to X del sumador a la entrada Il del semi sumador, ya que aparece en la primera po-
sicin en la lista de puertos del componente.
La segunda forma es ms explcita y proporciona ms informacin. Se asocia
cada puerto actual con su puerto local especificando los nombres de ambos. Si repe-
timos la referencia U2 del ejemplo anterior con la asociacin por nombre tenemos:
es equivalente a la anterior.
En cualquiera de las dos notaciones existe la posibilidad de dejar puertos de
salida desconectados usando la palabra reservada open en el puerto actual. En
VHDL-87 los nicos objetos que pueden aparecer como puertos actuales son las se-
ales. VHDL-93 permite usar constantes y tambin expresiones estticas como
puertos actuales.
La diferencia ms importante en VHDL-93 respecto a los componentes es que
se permite referenciar un componente sin necesidad de haberlo declarado con ante-
rioridad, lasintaxis de referencia a componente en este caso es:
etiqueta_referencia :
entity nombre_entidad !(nombre_:'arqui tectura I1
[generic map (lista generlcos);)
[ port map (lista puerto's) ;]
En este caso estamos indicando que para el componente Ul debe usarse la ar-
quitectura Funcional, mientras que para U2 debe usarse la arquitectura Estructural.
En este caso entrada y salida debe estar declarada como un bit vector de 16
bits.
Tal como se apuntaba en la descripcin de la sintaxis de la sentencia, el meca-
nismo de generacin adems de contener una indicacin de repeticin puede conte-
ner condiciones. Este esquema es til para describir elementos que estn formados
por componentes distintos. Por ejemplo, podemos describir un registro de desplaza-
miento de N bits, que tendr ligeras diferencias en los dos componentes de sus ex-
tremos:
entity RegistroDesplazamiento is
generic (N : positive);
port (
Reloj : in bit;
SIn: in bit;
SOut : out bit);
end RegistroDesplazamiento;
architecture Estructura of RegistroDesplazmento is
conlOnent DFF
port (Reloj, D: in bit; Q: out bit);
end COllP<)Ile!lt;
signal X : bit_vector(O tO N-7);
begin
GeneraRegistro : for 1 in O O'N-1 generate
61: if (1=0) generate
CIzq: DFF port map(Reloj, SIn, X(I)); end generate;
62: if ((1>0) and (I<N-1)) generate
CCen: DFF port map(Reloj, X(I-1), X(I)); end generate;
63: if (I~N-1) generate
CDet : DFF port map (Re:j'L'X (I:":1); SOtit); end generate;
end generate;
end Estructura;
112 VHDL. Lenguaje estndar de Diseo Electrnico
Como hemos dicho con anterioridad, un modelo VHDL tiene una nica entidad, pe-
ro puede tener tantas arquitecturas como se quiera. Por supuesto, al simular el mo-
delo debemos escoger cul de las posibles arquitecturas va a ser usada. El mecanismo
que permite relacionar entidad y arquitectura es la configuracin (configuration).
La configuracin de un diseo puede aparecer en dos entornos distintos: puede
aparecer en una arquitectura, entonces se llama especificacin de configuracin, o
puede aparecer como una unidad de diseo independiente, entonces se llama decla-
racin de configuracin.
Si dentro de la misma arquitectura, en la cual se usa referencia a otros compo-
nentes, se quiere indicar qu arquitectura se quiere utilizar para cada uno de los
componentes referenciados, se puede usar la especificacin de configuracin. La
sintaxis general para la especificacin de configuracin es la siguiente:
declaraci6n de lo~componentes
En el ejemplo se especifica que para todos aquellos componentes (jor all) del
tipo Semisumador se usar la arquitectura Estructural de dicho componente. Tam-
bin se especifica que para el componente U3 del tipo PuertaOr se usar su arqui-
tectura Logica.
La especificacin de configuracin puede aparecer en la parte declarativa de
una arquitectura o tambin en la parte declarativa de una sentencia block. Puede ser
tan simple corno la que se ha visto en este ejemplo, en el cual nicamente se especi-
fica qu arquitectura debe usarse para cada componente, o bien puede introducir
cambios en las conexiones de los puertos y en los valores de los genricos de cada
componente, o sea, puede contener una clusula generic map y una clusula port
map. Cmo ejemplo de este uso ms genrico podernos escribir de nuevo la arqui-
tectura de nuestro sumador completo, variando su configuracin de la siguiente for-
ma:
camponent PuertaOr
port(1l, 12 in bit:
O : out bit);
end coo;x>nent;
for all : Semisumador use entity work.Semisumador(esthtctural).;
for all : PuertaOr
use entity Puertas. PUerta0r3 (Logica)
port map(A=>I1, B=>I2, C=>'Q', Y=>O);
begin
Ul Semisumador port map (X, Y, A; Bl;
U2 Semisumador port map (A, Cln, e, Sum);
U3 PuertaOr port map (I1=>A, I2=>O, O=>OOut);
end estructura;
En este ejemplo se especifica que para todos los componentes PuertaOr (puer-
ta or lgica de dos entradas) debe usarse el componente que se encuentra en la bi-
blioteca Puertas que se llama PuertaOr3 (puerta or lgica de tres entradas) y usar
su arquitectura Logica. Ya que el componente elegido difiere en el nmero de entra-
das, se usa la Clusula port map en la especificacin de configuracin para indicar
que la tercera entrada de la puerta or de tres entradas debe estar fijada a 'O', de ma-
114 VHDL. Lenguaje estndar de Diseo Electrnico
nera que sea equivalente a una puerta or de dos entradas. Tambin se indica que dos
de los puertos de la PuertaOr3 (A y B) deben conectarse a las dos entradas del com-
ponente PuertaOr (/1 y 12). Mientras que la salida del componente PuertaOr3 (Y)
debe conectarse a la salida del componente PuertaOr (O). Ntese que en el mapeo
de nuestro ejemplo se ha usado sintaxis VHDL-93, ya que para fijar un puerto al ni-
vellgico 'O' se ha asignado directamente el valor 'O' al puerto. En VHDL-87 de-
bera definirse una seal fijada a este valor lgico y asignar dicha seal al puerto.
En este uso de la configuracin se muestra la mxima flexibilidad de este me-
canismo, por analoga con el hardware a veces se ha dicho que el mecanismo de re-
ferencia a un componente equivale a elegir el zcalo de un componente, mientras
que la configuracin del componente escoge qu dispositivo se coloca en el zcalo.
Como ya hemos dicho, la configuracin puede ser usada como una unidad de
diseo independiente, en ese caso se le llama declaracin de configuracin y su sin-
taxis es un poco distinta: '
2.6.7.4. Genricos
Tal como hemos visto en algunos de los ejemplos de apartados anteriores, VHDL
ofrece la posibilidad de generalizar un modelo, aadiendo unos parmetros lla-
mados genricos (generics) en la definicin de la entidad del modelo. Cuando el
modelo es usado como un componente el usuario fija el valor que deben tomar los
genricos, de forma que adapta el diseo del modelo genrico a sus necesidades
concretas.
Si queremos desarrollar un modelo genrico, debemos incluir en la entidad del
mismo la clusula generic, en ella se indicarn cules son los parmetros genricos
del modelo.
Como ejemplo vamos a modelar una puerta or con tres parmetros genricos.
El primero indica el tiempo de propagacin intrnseco de la puerta (aquel que no
depende de la carga a la salida de la puerta). El segundo indica el retardo debido a
la carga (la capacidad que ataca la salida de la puerta). El tercero indica la carga a la
salida de la puerta. Adems, las entradas de la puerta se modelan con un nico
puerto que es un vector no restringido. De forma que el nmero de entradas que
tenga la puerta se fijar al hacer una copia o referencia al componente, y depender
de la dimensin del vector que se conecte a su puerto de entrada.
Con estos genricos se pretende que podamos modificar los parmetros usados
en el clculo de retardos de la puerta, dependiendo del nmero de entradas de sta y
de la carga que deba atacar la salida de la misma.
2. Presentacin del lenguaje VHDL 117
Una vez definido este modelo, podemos hacer referencias o copias del mismo
utilizndolo como componente, en cada copia deberemos especificar qu valor con-
creto queremos darle a los parmetros genricos. Por ejemplo, si en una referencia a
componente escribimos:
Los valores que se asignan a cada genrico deben ser constantes o expresio-
nes.
Puede usarse asociacin posicional o por nombre o una mezcla de ambas
(igual que en las clsulasport map).
Se puede omitir el valor a asignar a cualquier genrico si ste tiene valor pre-
definido.
Puede explicitarse que quiere usarse el valor por defecto si se asigna la pala-
bra reservada open.
PuertaOr : ORN generic map(Retlner => 2 ns, RetCar => 0.4 ns, Carga => 0.51
port map (VectEnt, Salida);
118 VHDL. Lenguaje estndar de Diseo Electrnico
son todas equivalentes entre ellas e indican que queremos usar una puerta or con
unos parmetros de tiempo de 1 ns y 0.2 ns y con una carga de 0.25, o sea, con los
valores por defecto,
2.7. SUBPROGRAMAS
2.7.1. Funciones
Las funciones estn orientadas a realizar clculos, podemos pensar en ellas como en
una generalizacin de las expresiones, son una forma de definir nuevos operadores
que pueden aparecer en una expresin.
La sintaxis para la definicin de una funcin es:
Una vez definida esta funcin puede llamarse desde cualquier parte del modelo
usando bien la llamada a funcin secuencial o la llamada a funcin concurrente. En
ambos casos la llamada a funcin no ser en s misma una sentencia sino que for-
mar parte de una expresin. Por ejemplo:
process
variable Entrada: bit_vector(O'to''1);
variable Salida : natural
begin
Salida := bv_to_natural(EQtrada)
end process;
2.7.2. Procedimientos
Observemos que se han definido dos parmetros, uno de entrada (por defecto)
y otro de salida, que debe explicitarse y que se asume que es de tipo variable.
Una vez definido este procedimiento puede llamarse desde cualquier parte del
modelo usando bien la llamada a procedimiento secuencial o la llamada a procedi-
miento concurrente. Por ejemplo:
process
variable Entrada.:. bit_vctorJO te ?);
variable saHaa): natUraL
begin
end process;
Dos subprogramas estn sobrecargados cuando tienen como nombre el mismo iden-
tificador pero sus perfiles son diferentes, entendiendo que el perfil de un subprogra-
ma est formado por el nmero, el orden y el tipo de sus parmetros, as como del
tipo del valor devuelto en el caso de las funciones.
La sobrecarga mejora la legibilidad del cdigo al permitir dar el mismo nombre
a dos subprogramas que realizan la misma funcin sobre datos de tipos diferentes.
De este modo, no es necesario pensar nombres distintos para cada subprograma.
Por ejemplo, se podran definir funciones que permitieran concatenar dos cadenas
de caracteres o una cadena de caracteres con un carcter utilizando el mismo nom-
bre de funcin:
function Concatena (a: string b: stringl return string
function Concatena (a: character b: string) return string
function Concatena (a: string b: character) return string
Para hacer una llamada a estas funciones se podr utilizar la notacin propia de
los operadores:
Var3 := Varl + Var2;
Var4 := Varl and Var2;
Normalmente cada seal tiene una sola fuente que le proporciona el valor en todo
momento; sin embargo, VHDL permite definir seales que pueden tomar su valor
de mltiples fuentes. Este tipo de seales se llaman seales resueltas (resolved sig-
nals) y, como en cada instante una seal tiene un nico valor, deben tener una fun-
cin de resolucin (resolution function) asociada que determine el valor que deben
contener en todo momento. La posibilidad de disponer de ms de una fuente hace a
este tipo de seales muy adecuadas para el modelado de buses.
Una funcin de resolucin es una funcin que toma como entrada un vector
unidimensional no restringido con los valores de todas las fuentes de la seal re-
suelta y devuelve el valor que debe recibir dicha seal. VHDL llama a esta funcin
cada vez que se realiza una asignacin sobre la seal, en este momento se determi-
na el nmero de elementos del vector de entrada a la funcin, que ser igual al n-
mero de fuentes que tenga la seal. Las fuentes de una seal vendrn determinadas
126 VHDL. Lenguaje estndar de Diseo Electrnico
tanto por las sentencias de asignacin en diferentes procesos como por las salidas
de componentes conectadas a dicha seal.
Para tratar con seales resueltas se podra definir, por ejemplo, el tipo XOIZ,
que aparte del cero y el uno lgico introduce el desconocido y la alta impedancia.
Tambin se definira el tipo vector de XOIZ necesario para el parmetro de entrada
de la funcin de resolucin:
Se puede declarar una funcin de resolucin para este tipo de datos de la si-
guiente manera:
A continuacin, para introducir una seal resuelta slo se debe aadir el nom-
bre de la funcin de resolucin al resto de informacin requerida en la declaracin.
De este modo, cada vez que se realice una asignacin sobre la seal se llamar a la
funcin de resolucin para que decida el valor que se debe asignar. Por ejemplo, se
podra crear una seal de lectura y escritura de una memoria compartida por varios
procesadores de la siguiente forma:
signal LectEscRAM : Resolucion X01Z,
else
Valor := 'X';
exit;
end if;
when '1' => if Valor =
'Z' or Valor = '1' then
Valor .- '1';
else
Valor := 'X' i
exit;
end if;
when 'X' =>
Valor :\= X;
exit
when others => null;
end case;
end loop;
retum Valor;
end Resolucion;
type stCLulogic is ('U', 'X', 'O', '1', 'Z', 'W', 'L', 'H', '-'ji
type stCLulpgic~vector is array (nat:p:al range -o- ot std...ulogici
function resolved (s: std_ulogic_vector) retum std_uloiilc;'
subtype std_logic is resolved std_ulogic;
type stCLlogic_vector is array (natural range -o- of std_logici
2.8. EJERCICIOS
11. Escriba una funcin que reciba como entrada un valor de tipo bit_vector y de-
vuelva dicho valor en el orden inverso. Es decir, si por ejemplo recibe el valor
"00011101" debe devolver "10111000".
12. Repita el ejercicio (11) mediante un procedimiento que reciba un nico par-
metro de tipo inout.
13. Escriba un paquete llamado DistanciaArea donde se definan los tipos fsicos
Distancia (micra, milmetro, centmetro, metro y kilmetro) y Area (las mismas
unidades al cuadrado).
a) Dada la siguiente-entidad:
use work.DistanciaArea.all;
entity Multiplicador ls
port ( A : in Distancia;
B : in DiS.taDG-ia;
e : out Area);
end Multiplicador;.
a) La seal Peticion debe valer '1' cuando alguna de sus fuentes vale '1',
mientras que debe valer 'O' en caso contrario (or lgica). Escriba la funcin
de resolucin ResolucionBit.
b) La seal Peticion debe valer '1' cuando una y slo una de sus fuentes vale
'1', en caso contrario debe valer 'O'. Escriba la funcin de resolucin Reso-
lucionBit.
e) La seal Peticion debe valer' l' cuando todas sus fuentes valen '1', en caso
contrario debe valer 'O' (and lgica). Escriba la funcin de resolucin Reso-
lucionBit.
132 VHDL. Lenguaje estndar de Diseo Electrnico
15. Considere el siguiente bloque de tres entradas y dos salidas cuya funcionalidad
viene determinada por la tabla de la verdad adjunta:
A bit
B bit
Bloque
y bit
- 1 F 1
e bit
Zbit
. 1 o
1'\-0
o 1
- o o
1 1 1 1
1 1 o
else
sentencias secuenciales
end if
g) Suponga que las salidas y y Z son de un tipo llamado XOl que contiene los
valores cero lgico ('O'), uno lgico (' 1') Yvalor prohibido ('X'). Este valor
prohibido debe producirse cuando las entradas A, B Y e tienen el mismo va-
lor. Defina el tipo de datos XOl e inclyalo en un paquete llamado Paque-
te_XOl. Utilizando el paquete acabado de definir, vuelva a escribir la decla-
racin de entidad y la arquitectura en estilo algortmico usando la sentencia
case.
2.9. BIBLIOGRAFA
VHDL, aunque dentro del diseo electrnico, se utiliza para otras ta-
reas, como la sntesis o la verificacin, es un lenguaje que naci y se
desarroll con una semntica explcita para simulacin dirigida por
eventos discretos. Tanto es as que en el manual de referencia del len-
guaje (Language Reference Manual, LRM) adems de la sintaxis, y jun-
to a la semntica del lenguaje, se detallan los mecanismos bsicos del
procesado del lenguaje para la simulacin. Por tanto, si bien puede
haber ambigedades cuando el lenguaje se utiliza para otras tareas, en
simulacin stas no existen y esto es lo que trataremos de dejar claro
en este captulo, describiendo con detalle el procesado, la semntica y
los mecanismos de simulacin de VHDL.
Tras unas nociones bsicas sobre la simulacin por ordenador que
facilitan la ubicacin y comprensin del propio proceso de simulacin
de VHDL, se presentan los conceptos fundamentales del procesado de
un lenguaje de programacin para poder entender mejor los elemen-
tos y etapas del procesado de VHDL para simulacin.
A continuacin se abordan los objetivos centrales de este captulo:
el procesado y el modelado de VHDL para simulacin. Tras el procesa-
do de una entidad de diseo VHDL para su simulacin dirigida por
eventos discretos donde se detallan las fases de anlisis, elaboracin y
simulacin, se analiza el modelo temporal 8-delay, el determinismo
y la portabilidad de VHDL.
El objetivo no es presentar y analizar tcnicas de modelado para si-
mulacin, sino estudiar en detalle el procesado y los mecanismos de
simulacin que permitan al lector extraer criterios de modelado para
realizar y utilizar de forma eficiente las descripciones de sistemas elec-
trnicos en VHDL.
135
136 VHDL. Lenguaje estndar de Diseo Electrnico
3. 1. INTRODUCCiN
Kernel de
simulacin
Modelo de
simulacin
FEs
mentales asociadas con cada FE: la ocurrencia del tiempo en el que el evento tiene
lugar y las acciones que el modelo debe realizar como consecuencia de la aparicin
del evento. La planificacin de las operaciones que realiza el modelo se puede con-
siderar como el procesado de los elementos de un conjunto. En dicho conjunto cada
elemento tiene asociado el tiempo en el que cierto evento va a acontecer, de modo
que de acuerdo con esta informacin el kernel puede llevar a cabo la planificacin
de las operaciones del modelo.
La propia naturaleza de la gestin de las colas de eventos limita el potencial
paralelismo de la simulacin dirigida por eventos. Se han sugerido algunas tcnicas
para la gestin de las colas de eventos y para la simulacin en paralelo, aunque el
paralelismo alcanzable es limitado. Tambin existen aceleradores hardware de altas
prestaciones que mantienen mltiples colas de eventos, cada una manejada por sis-
temas independientes aunque con un sistema centralizado (sincronizado) de avance
del tiempo. El paralelismo se puede mejorar si se elimina la necesidad de un tiempo
y unas colas de eventos globales, dando lugar a sistemas distribuidos. Este tipo de
sistemas es muy difcil de controlar adecuadamente, ya que se pueden bloquear
(deadlock). Para solventar estos problemas hay dos soluciones: evitar los bloqueos
o detectarlos y recuperarse de ellos.
Las estructuras de datos que soportan a las colas de FEs deben incluir una refe-
rencia a las acciones que se deben llevar a cabo. La forma de dicha referencia po-
dra ser una direccin, una etiqueta o un ndice correspondiente a un vector de su-
brutinas, a menudo depender de la estrategia de simulacin que se est empleando.
La eleccin de esta estrategia afecta a la implementacin y al uso del lenguaje de si-
mulacin, o sea, a la realizacin de las herramientas de simulacin y al lenguaje con
el que stas se programan.
En la simulacin dirigida por eventos discretos slo hay tres posibles estrategias: la
planificacin de eventos, la bsqueda de actividad y finalmente, la basada en la in-
teraccin de procesos. La estrategia basada en la interaccin de procesos se puede
considerar una combinacin de las otras dos, en la que se gana en eficacia de ejecu-
cin y adems se obtienen descripciones ms concisas.
La estrategia basada en la planificacin de eventos (Event Schedulling) es la
ms sencilla de todas. El comportamiento del modelo de simulacin depende de la
aparicin de eventos durante la ejecucin dinmica de la simulacin. Cuando apare-
ce un evento ocurren dos cosas: (1) se procesa el evento realizndose las operacio-
nes que para tal evento estn previstas; (2) se planifican los tiempos en los que po-
drn ocurrir los futuros eventos. De este modo es como se simula el comportamien-
to dinmico del modelo. El inconveniente que presenta esta estrategia es la
dificultad de activacin de las operaciones que se deben realizar en el modelo como
consecuencia de la aparicin de los eventos. Las decisiones de activacin se dejan
en manos del usuario del simulador, quien tiene que hacerse cargo de la actividad
del modelo entre el acontecimiento de dos eventos.
El problema que presenta esta estrategia se soluciona con una estrategia suple-
mentaria basada en la bsqueda de actividad (Activity Scanning). En este caso, co-
142 VHDL. Lenguaje estndar de Diseo Electrnico
3.2.3.1. Modelado
Una vez especificado el modelo del sistema que se desea analizar, es necesario des-
cribirlo de forma que un ordenador lo pueda procesar. Ambas etapas, especificacin
y descripcin, conforman el paso denominado modelado. El modelo ejecutable por
el ordenador es el punto de partida para poder ejercitar las pruebas que se desean
realizar a dicho modelo.
3. Procesado y mecanismos de simulacin del lenguaje VHOL 145
3.2.3.2. Prueba
El siguiente paso consiste en probar el comportamiento del modelo bajo ciertas cir-
cunstancias, que forman parte de un plan de pruebas, de modo que se pueda com-
probar que se comporta tal y como se esperaba. El diseador selecciona una serie
de casos de prueba de forma que su simulacin le ofrezca cierta confianza sobre la
verificacin del diseo. La precisin de los resultados de simulacin y, por tanto, la
cantidad de informacin obtenida acerca del comportamiento del sistema, varan
dependiendo de la complejidad y el grado de detalle o abstraccin de los modelos.
Una ayuda a la simulacin es la inclusin de aserciones en la descripcin del mode-
lo, que se deben verificar en tiempo de simulacin. .
En otras palabras, se trata de ver si la realizacin del modelo se corresponde
con la idea que se tiene de las especificaciones del sistema en cuestin. En cierto
modo, en este paso se est depurando el modelo a travs de un proceso de verifica-
cin. El grado de confianza que el diseador deposita en los casos de prueba est
directamente relacionado con la calidad del mtodo de diseo o modelado. Todava
no importa si el modelo representa adecuadamente o no al sistema en cuestin. Por
ahora es suficiente con asegurarse de que la ejecucin del modelo en el ordenador
ofrece los resultados esperados, segn se describieron en el plan de pruebas.
El modelo debe reflejar el comportamiento del sistema, para lo cual el disea-
dor establece un compromiso entre su precisin y su capacidad para la posterior
evaluacin de las respuestas. La verificacin del modelo de simulacin recae en la
generacin de los estmulos adecuados. El problema de este mtodo de verificacin
reside en la imposibilidad prctica de llevar a cabo una simulacin exhaustiva, de-
bido a la explosin de casos, de forma que garantice la correccin del diseo.
146 VHDL. Lenguaje estndar de Diseo Electrnico
3.2.3.3. Explotacin
Supongamos, de forma optimista, que el diseador ha conseguido un modelo de si-
mulacin ejecutable en el ordenador y que ha validado el modelo demostrando que
su operacin es una representacin correcta del sistema en cuestin. Finalmente,
antes de llevar a cabo la realizacin fsica del modelo, el diseador debe experimen-
tar o 'jugar" con el modelo de simulacin para incrementar su confianza en que el
sistema en cuestin respondera de forma similar a dichos experimentos. Aunque se
haya alcanzado la perfeccin en el desarrollo y las pruebas de verificacin y valida-
cin del modelo de simulacin, no se puede estar seguro del todo acerca de los re-
sultados de experimentar fuera de los lmites del conocimiento del sistema en cues-
tin. El diseador debe ser cauto a la hora de confiar en los resultados de la simula-
cin a la hora de experimentar fuera de dichos lmites.
Un lenguaje de programacin es una notacin formal que se utiliza para poder ex-
presar algoritmos [18]. Por tanto, un programa es la descripcin en un determinado
lenguaje de programacin de un algoritmo. Pero no hay que olvidar que los algorit-
mos son conceptos abstractos, que existen independientemente de cualquier posible
notacin en la que stos se pudieran expresar. Sin embargo, sin la utilizacin de una
notacin es imposible expresar de forma precisa o comunicar un algoritmo, o razo-
nar acerca de su correccin.
Programa
Programa
1-
Programa
1- Procesador
Hardware
Procesador
Software Procesador
Hardware
'"
Software Hardware
Programa
-
Compilador
Plataforma
Hardware
Hardware
3.3.3.1. Sintaxis
La sintaxis (Syntax) del lenguaje define los smbolos (tokens) que se usan en los
programas para construir las frases, o sea, los comandos o instrucciones, las expre-
siones, las declaraciones o todo un programa completo. En otras palabras, la sinta-
xis hace referencia a la forma de los programas.
La sintaxis de un lenguaje se puede especificar por medio de una gramtica in-
dependiente del contexto (Context-Free Grammar, C-FG). Una gramtica C-FG se
define matemticamente como una 4-tupla (X, N, S, P) , compuesta de los siguien-
tes elementos: (1) X, El alfabeto de smbolos terminales con los que se forman las
cadenas (Strings) que forman los tokens; (2) N, el conjunto de smbolos no termina-
les, donde cada uno de ellos designa una clase particular de frases del lenguaje y
entre los cuales se encuentra uno de particular relevancia denominado; (3) S (Start
Symbolo Goal Symbol), que representa a todas las posibles cadenas o frases del
lenguaje. El conjunto de smbolos terminales y no terminales forma el vocabulario
de la gramtica; (4) P, el conjunto de reglas de produccin de cadenas del lenguaje
que definen cmo se componen las frases a partir de los smbolos terminales y de
las frases.
A su vez, las gramticas C-FG se suelen especificar mediante dos formas: (a)
Notacin BNF (Backus-Naur Form) o su variante EBNF (notacin BNF extendida
con notacin especfica de expresiones regulares [Regular Expressions] Extended
BNF) introducida por Niklaus Wirth; (b) Diagramas Sintcticos (Syntax Diagrams),
donde las reglas de produccin se describen por medio de grafos dirigidos.
3. Procesado y mecanismos de simulacin del lenguaje VHDL 151
Expresin
I
Cada C-FG genera un lenguaje, que no es otra cosa que un conjunto de cadenas
de smbolos terminales. De este modo, un lenguaje se puede definir como el con-
junto de sentencias compuestas de frases cuya estructura se puede representar por
medio de rboles sintcticos (Syntax Trees, STs). Un ST de una C-FG es un rbol
ordenado donde los nodos terminales estn etiquetados por smbolos terminales y
los nodos no terminales lo estn por smbolos no terminales a los que estn asocia-
das cada una de las reglas de produccin. As, una frase de la gramtica C-FG es
una cadena de smbolos terminales que etiqueta a los nodos terminales del ST, to-
mados de izquierda a derecha. Una sentencia de la gramtica C-FG es una frase
donde el nodo raz del ST correspondiente es el smbolo S (Start Symbol).
Debido a su precisa descripcin de los detalles sintcticos, la gramtica C-FG
descrita anteriormente se dice que se refiere a la sintaxis concreta (Concrete Syntax)
del lenguaje, que es de especial inters para el usuario final del lenguaje, ya que tie-
ne que conocer concretamente cmo se deben escribir programas sintcticamente
correctos.
Sin embargo, no siempre es necesario centrarse en la expresin concreta de un
lenguaje sino que basta con centrarse en el conocimiento de la estructura de sus fra-
ses. En estos casos la gramtica CF-G se refiere a la sintaxis abstracta del lenguaje
(Abstraet Syntax) y los rboles sintcticos que se generan se denominan ASTs (Abs-
traet Syntax Trees). En los ASTs cada nodo no terminal se etiqueta con una regla de
produccin y le corresponde un nico subrbol por cada subfrase, ya que los smbo-
los terminales no juegan un verdadero papel en la sintaxis abstracta. Las sintaxis
abstracta slo se preocupan de las relaciones jerrquicas existentes entre las frases y
las subfrases. Las sintaxis concretas adems se ocupan de los smbolos utilizados
para separar y anidar las frases del lenguaje.
152 VHDL. Lenguaje estndar de Diseo Electrnico
Expresin-Operador-Expresin IEOE)
v v
I I
~ ]clJ ~
FIGURA 3-8. AST de la expresin "d + 10 * n:",
3.3.3.3. Semntica
[1...
Fuente VHDL Analizador VHDL
...0 Sistemas de
Bibliotecas
2 A diferencia de una jerarqua en la que pueden encontrarse objetos dentro de otros objetos, co-
mo, por ejemplo, la jerarqua de funciones anidadas en el lenguaje e, en una heterarqua todos los ob-
jetos se encuentran al mismo nivel. En el cas del resultado de elaborar una jerarqua de diseo VHDL
se obtiene una red de procesos VHDL en los cuales no existen procesos VHDL anidados.
3. Procesado y mecanismos de simulacin del lenguaje VHDL 157
FIGURA 3-11. Una descripcin VHDL, compuesta por unidades de diseo almace-
nadas como texto en los ficheros de diseo correspondientes (11.a), el sistema de
unidades de bibliotecas en el que se almacenan los resultados del anlisis de las
unidades de diseo (11.b) y una representacin alegrica de dicho sistema de unida-
des de biblioteca (11.c).
158 VHDL. Lenguaje estndar de Diseo Electrnico
momento, ya que tan slo es una biblioteca lgica que en el momento de realizar el
anlisis se asocia con una biblioteca fsica determinada por el diseador de VHDL.
Los ficheros de diseo VHDL son ficheros de texto que forman parte del siste-
ma de ficheros del sistema operativo sobre el que se trabaja. Sin embargo, las bi-
bliotecas y sus unidades son objetos dependientes de la implementacin del sistema
de procesado de VHDL que se est utilizando.
El Captulo 11 del LRM describe el proceso y el orden de anlisis de las uni-
dades de diseo VHDL. El Captulo 13 del LRM define los elementos sintcticos
que pueden formar parte de una descripcin VHDL. Sin embargo, las reglas sin-
tcticas, las de mbito y las de tipos se encuentran distribuidas por todo el LRM,
no existiendo una definicin de dichas reglas como tal. Estas reglas se pueden ob-
tener por medio de una lectura cuidadosa y cruzada de todos los prrafos que com-
ponen el LRM. Con estas reglas se puede realizar tanto un scanner y un parser pa-
ra realizar el anlisis lxico y sintctico, respectivamente, como el anlisis semn-
tico esttico de una unidad de diseo VHDL. Por tanto, el anlisis de una unidad
de diseo VHDL genera dos ASTs correspondientes a las dos primeras fases de
compilacin: VAST y VIF. Aunque el VAST suele desaparecer una vez generado
el VIF.
El resultado final del anlisis de una unidad de diseo, o sea el VIF, se almace-
na como una unidad de biblioteca. Si una unidad de biblioteca de diseo se modifi-
ca por algn motivo, entonces todas las unidades de diseo que dependen de ella
quedan declaradas automticamente como obsoletas y es preciso realizar su anlisis
antes de poder ser utilizadas posteriormente.
Cuando finaliza el anlisis de una unidad de diseo slo se puede decir de ella
que su descripcin textual estaba escrita en VHDL de forma correcta atendiendo al
LRM, pero nada se puede decir del sistema electrnico, de cuya descripcin forma
parte, ni del uso posterior que se va a hacer de ella (p. ej., simulacin, sntesis, etc.).
De hecho, el anlisis es la nica etapa del procesado de VHDL que es comn a
cualquier tipo de uso que se vaya a hacer de una unidad de diseo VHDL [37].
El anlisis individual de las unidades de diseo es algo nico del lenguaje
VHDL, no existe ningn otro HDL con esta caracterstica. Esta particularidad no
slo afecta al procesado de VHDL, sino que adems permite la creacin de bibliote-
cas configurables por medio de la capacidad intrnseca de configuracin que posee
el lenguaje VHDL. Esta es la base que permite la reutilizacin del diseo en VHDL
y la posible explotacin de los derechos de propiedad (Intellectual Property Rights,
IPRs) de dichos diseos.
File
Wait. .
Wait .
z= .
F <= .
A<= .
P1
Design Hierarchy
Figura 3-12. Esquema de una entidad de diseo que contiene un proceso e instan-
cia otra entidad que, a su vez, contiene tres procesos.
Hay que recordar que los FEs son los elementos bsicos de una simulacin diri-
gida por eventos discretos. Por completitud, tambin se ha incluido en la Figura 3-13
informacin relacionada con el uso de una variable compartida y de un fichero.
La segunda fase de compilacin correspondiente a la elaboracin de una jerar-
qua de diseo realiza los enlaces necesarios en el EAST, vase la Figura 3-14, de
modo que la red de procesos VHDL quede lista para su simulacin. Dichos enlaces
se realizan teniendo en cuenta las reglas correspondientes a la propagacin de los
T~-----1
W,(PlI
Ir.A"',~U~nt;;il-:;T:;:ru;:e-;,
3;;;O;l+--~ Wait . File
Wait .
PI
W,(P'1
I F. Until True, 25 Wait . HF,'IUtn:;tili,
Tr.:ru::e:-,
:&4.,..-~ Wait . .SV(ZI
~~OpH21(FI
!!I+---l F < ........... ... = (Zl .
... = (Fl .
P2 P4
DP,(A)
Dv(F) RF(F)
FIGURA 3-16. Modelo de simulacin VHDL compuesto por una red de procesos
VHDL.
Al
~~IOY
O
1 1 2 3
~
TIempo fsico
I
O
I I ~
1 2 3
BI 1,,,,,,,,,,,,1 I I ~
Paso de simulacin
Al
Bl
'n7 Comienzo
S,"',,;"' j
~Fin
Retorno
(a) (b)
3 A diferencia de las rutinas, las corutinas no devuelven el control al lugar del cdigo donde se
hizo la llamada, sino a otro distinto establecido previamente.
4 Cuando existe una corutina maestra que controla la ejecucin de las dems, al modelo de ejecu-
cin' se le denomina basado en semicorutinas.
168 VHDL. Lenguaje estndar de Diseo Electrnico
VHDL Simulator
10 20 30 40 50 60 (nsl
Bl I
bl <~ inertial A after 10 ns;
B2
b2 <; transport A alter 10 ns;
b3 <Ce reject 4 ns inertial A alter 10 ns;
B3 I
10 20 30 140 50 60 (ns)
el cdigo fuente VHDL que compone las unidades de diseo VHDL correspondien-
tes a IDentidad de diseo que se est simulando, y de su actividad dinmica resul-
tante de la interaccin de los procesos VHDL al avanzar el tiempo de simulacin.
Tanto el anlisis esttico como el dinmico, del modelo de simulacin VHDL,
se realiza en trminos correspondientes al fuente VHDL descrito por el diseador.
Para poder realizar dichos anlisis, el entorno de depuracin tiene sus propias es-
tructuras de datos y su propia funcionalidad, que es similar a la de un depurador de
software (Software Debugger}. A diferencia de este ltimo, los resultados corres-
pondientes a la ejecucin del modelo de simulacin no se muestran en trminos ab-
solutos, sino relativos al avance del tiempo de simulacin. Para ello se suelen em-
plear las representaciones tpicas 5 de las formas de ondas o tambin denominadas
cronogramas, vase la Figura 3-21.
La ejecucin secuencial del TS genera un nico proceso, por lo que en cual-
quier momento dicho proceso podr estar en uno de los dos nicos estados posibles:
parado o en ejecucin, vase la Figura 3-22. Cada vez que el TS se para, el entorno
de depuracin puede mostrar al diseador de VHDL el resultado de la ejecucin del
modelo de simulacin.
Sin embargo, en una ejecucin concurrente pueden ser varios los procesos que
se generen y cada uno de ellos puede estar, a su vez, en estado de ejecucin o para-
do, por lo que la ejecucin controlada de estos procesos resulta ms complicada.
Esta situacin se puede simplificar si se organiza la ejecucin de los procesos resul-
tantes en grupos, vase la Figura 3-23. En cualquier caso, el estado del TS se puede
monitorizar derivando el flujo de control de su ejecucin. Esta operacin se puede
5 Adems de corresponder los resultados de simulacin con el cdigo fuente, como en cualquier
depurador de software, tambin se utilizan representaciones de esquemas y cronogramas.
170 VHDL. Lenguaje estndar de Diseo Electrnico
Sequental implementation
Kernel Process
Elaborated Procesa
0000
FIGURA 3-22. Estados del proceso generado por la ejecucin secuencial del mo-
delo de simulacin VHDL.
realizar por medio del uso de puntos de ruptura (breakpoints) temporales o condi-
cionados al valor de uno o de varios objetos, .
La simulacin o depuracin de un TS concurrente es mucho ms complicada
que la de uno secuencial, de hecho, la depuracin de programas concurrentes es un
problema de investigacin no resuelto todava. Sin embargo, una primera aproxima-
cin a la depuracin de un modelo concurrente consiste en considerar cada proceso
de forma aislada y aplicarles a cada uno de ellos las mismas tcnicas de ejecucin
controlada y/o monitorizacin que se aplicaran al proceso correspondiente a una
ejecucin secuencial.
Actualmente no hay simuladores VHDL comerciales que permitan la ejecucin
paralela de los correspondientes modelos de simulacin VHDL y mucho menos su
Parallel implementation
Kernel Process
(~-)
Elaboreted Process
0000
FIGURA 3-23. Estados de los procesos generados por la ejecucin concurrente del
modelo de simulacin VHDL.
3. Procesado y mecanismos de simulacin del lenguaje VHDL 171
posterior depuracin. Finalmente, cabe destacar la posibilidad que ofrecen los simu-
ladores comerciales para comunicar cualquier herramienta externa, tanto con el pro-
grama correspondiente al modelo de simulacin VHDL como con el control que el
simulador VHDL ejerce sobre dicho programa. Esta comunicacin se realiza por
medio del uso de una biblioteca de rutinas normalmente asequibles en lenguaje C.
Por medio de este interfaz es posible realizar entornos de ce-simulacin VHDL pa-
ra sistemas hardware-software o electrnico-mecnicos [39-42].
Modellnput
VHDL
Synthesis Tool
Physical
Modal Generation
Model
Test Bench
Modal Testing
Con una simulacin por ordenador, lo que se pretende no es otra cosa que exa-
minar el resultado de poner a prueba el modelo de simulacin correspondiente al
sistema que se est estudiando. Para poder llevar a cabo este propsito es necesario
contar con la descripcin VHDL de la entidad de diseo correspondiente a dicho
sistema (Unir Under Test, UUT) y con la descripcin VHDL de la entidad de diseo
correspondiente al sistema que genera las pruebas iStimuli Generator, SG) que se
desean ejercitar en la simulacin. Sin embargo, la disponibilidad de ambas entida-
des de diseo no es suficiente para poder llevar a cabo la tarea de simulacin. Ade-
ms de contar con ambas entidades de diseo, es necesario contar con la descrip-
cin en VHDL de una tercera entidad de diseo, la correspondiente al entorno (Test
Bench, TE) en el que se van a realizar dichas pruebas y, por supuesto, con el simu-
lador VHDL y el ordenador en el que dicha herramienta se ejecuta.
La entidad de diseo VHDL correspondiente al banco de pruebas carece de
funcionalidad por s mismo, ya que se trata meramente del artefacto que sustenta a
las entidades de diseo VHDL correspondientes tanto a la UUT como al SG. Sin
embargo, su presencia para poder realizar una simulacin VHDL es necesaria, ya
que para ello, por definicin, tan slo se puede seleccionar una nica entidad de di-
seo VHDL.
La red de procesos VHDL que componen el modelo abstracto de simulacin
contiene tanto los procesos resultantes de la elaboracin de la jerarqua de diseo
con la que se ha descrito la UUT como los que resultan de la elaboracin de la enti-
dad de diseo SG, sin ningn tipo de distincin o de separacin. As es como se
consigue que la simulacin del modelo abstracto de la entidad de diseo VHDL co-
rrespondiente al TE sea equivalente a la realizacin de las pruebas sobre el modelo
fsico correspondiente a la UUT, que se llevaran a cabo en el banco o entorno fsi-
co del equipo de pruebas (TE), vase la Figura 3-24. A su vez, dicho TB fsico pue-
de ser muy variado, correspondiendo tanto a un entorno real de funcionamiento, por
ejemplo, la tarjeta (PCB) donde se podra probar un circuito integrado de aplicacin
especfica (Application Specific Integrated Circuit, ASIC), hasta el entorno de prue-
bas conectado a un sistema de pruebas automatizado por ordenador (Automatic Test
Equipment, ATE), por ejemplo, el equipo de pruebas que se utilizara para probar si
un ASIC se ha fabricado adecuadamente.
La entidad de diseo VHDL de la UUT es tan slo un componente de la enti-
dad de diseo VHDL correspondiente al TB que se desea simular. Sin embargo,
para poder sintetizar el modelo fsico correspondiente a la UUT slo es necesario
disponer de su correspondiente entidad de diseo VHDL y, por supuesto, de la he-
rramienta de sntesis de VHDL as como del ordenador en el que dicha herramienta
se ejecuta. Esta diferencia pone de manifiesto el hecho de que el proceso de simula-
cin del modelo abstracto correspondiente a una determinada UUT es equivalente a
la combinacin de los procesos de sntesis y prueba del modelo fsico que se corres-
pondera con dicha UUT, vase la Figura 3-24.
Si el entorno de pruebas automatizado por ordenador tambin acepta como len-
guaje de descripcin de las pruebas VHDL o en un subconjunto del mismo, enton-
ces no hay ninguna diferencia entre las descripciones VHDL correspondientes a la
entidad de diseo generadora de las pruebas (SG) necesarias para poder llevar a ca-
bo la simulacin y las pruebas sobre el prototipo fsico obtenido cornoresultado del
3, Procesado y mecanismos de simutecin del lenguaje VHDL 173
Por razones histricas y debido a que durante mucho tiempo el mayor nivel de abs-
traccin al que los sistemas electrnicos se podan modelar, para poder llevar a cabo
su simulacin, era el nivel de puertas lgicas (Gate Level), a las simulaciones de es-
te tipo de sistemas se les denomin simulaciones lgicas. Trmino que se ha mante-
nido hoy en da, aun cuando las descripciones HDL se pueden realizar a distintos
niveles de abstraccin, e incluso se pueden realizar modelos multinivel, o sea mo-
delos en las que algunas entidades de diseo HDL estn descritas a distinto nivel de
abstraccin (Behavioral, Register Transfer; Gate Level).
El adjetivo de simulacin lgica se debe al nfasis que se haca y todava se ha-
ce al diferenciar el propsito de la mera simulacin del comportamiento lgico con
las simulaciones temporal y de fallos. Estas simulaciones se realizan para tener en
cuenta factores propios del entorno de funcionamiento de los ASICs (p. ej., tempe-
ratura, voltaje o layout) o de su manufactura, respectivamente (43), Incluso em-
pleando un HDL, ambos tipos de simulaciones todava se realizan a nivel de puertas
lgicas, por medio de modelos que describen la lista de puertas que componen la
red {netlist) que describe al sistema electrnico. Para ello slo se utiliza un subcon-
junto del HDL, en el caso de VHDL dicho subconjunto es el standard VITAL.
174 VHDL. Lenguaje estndar de Diseo Electrnico
3.6. EJERCICIOS
8. Cules son las diferencias entre los niveles de abstraccin, los estilos de des-
cripcin y las jerarquas de un diseo descrito en VHDL?
9. Describe los dos tipos de jerarquas que se pueden encontrar en una descripcin
VHDL.
10. Cul es la etapa comn, del procesado de una descripcin VHDL, para todos
los propsitos para los que sta se quiera utilizar (p. ej., simulacin, sntesis,
etc.)? y por qu es as?
176 VHDL. Lenguaje estndar de Diseo EJreGtrnico
11. Si se tuviesen que integrar una descripcin en VHDL con otra realizada en otro
HDL como. por ejemplo. Verilog HDL, en qu etapa de su procesado se debe-
ra hacer? y por qu sera as?
13. Qu biblioteca y qu paquetes son visibles para toda unidad de diseo VHDL?
un simulador VHDL? ,
1
3.7. BIBLIOGRAFA
[1] "IEEE Standard VHDL Language Referenee Manual se, 1076-1993", IEEE, Ine., New
York, N, Y., March 1994. .
[2] M. R. BARBACCI, T. UHEARA:"Computer Hardware Descrpton Languages: Too Bridge
Between Software and Hardware". IEEE Competer Vol. 19, (2). 1985, pp. 6-8.
[3] R. W. HARTES1EIN: "Hardware Description Languages". Advances in CAD for VLSI
Vol. 7, North Holland, 1987.
[4] S. DASGUPTA: "Competer Architectnre a Mooem Synthesis". Vol. 2, JoOOWiley & Sons,
Ine. 1989.
3. Procesado y mecanismos de simulacin del lenguaje VHOL 177
J. Karrass
179
180 VHDL. Lenguaje estndar de Diseo Electrnico
4. 1. INTRODUCCiN
Los niveles de abstraccin ms aceptados en diseo hardware son los que se mos-
traron en la Figura 1-7. Aparecen, por tanto, los tres pasos de sntesis que se
muestran en la Figura 4-1. Cada uno de estos pasos est soportado por herramien-
Nivel funcional
Nivel RT
Retroanotacin
Implementacin
RT
Bits
Compuestos
Lg ico """"-""'-"''''''-'''''''--''--_~~'--''''''''''''''!!'::.:.c'''_--",=:___
Multiplicador Multiplicando
l 01 10 I 001 .. 011
I 000 .. 000
001 .. 011
001 011
000 000
00 10
Resultado
library IEEE;
use IEEE.stQ_logic_1164.all;
use IEEE.numeric_std.all;
entity multiplicador i8
port {databus_in in unsigned (32 downto 1):
databus_out out unsigned (32 downto 1);
start in stQ_u1ogic;
re1oj,reset in stQ_ulogic;
ends out stQ_ulogicl;
end multiplicador;
I En esta descripcin es necesario utilizar un puerto de entrada y otro de salida para el "bus" a fin
del esquema de la Figura 4-3 que se muestra en la Figura 4-4. El nmero de suma-
dores es de 31, ya que la primera suma con el acumulador a cero no precisa de un
sumador.
En la mayora de las ocasiones, esta implementacin va a tener un coste excesi-
vo en trminos de puertas y consumo. Por otro lado, aunque resulta la ms rpida
en trminos de ciclos de reloj, el camino crtico es elevado, lo que puede imponer
restricciones intolerables a la frecuencia de la seal de reloj. Este ltimo aspecto
podra solucionarse mediante la realizacin de la multiplicacin combinacional co-
mo operacin multiciclo [MLD92].
Al objeto de minimizar los recursos hardware requeridos, una alternativa es la
utilizacin de un nico sumador y la realizacin de las acumulaciones en ciclos de
reloj sucesivos. La arquitectura RT resultante es la de la Figura 4-5. Se trata de una
tpica arquitectura a nivel de transferencia entre registros en la que todas las accio-
nes en cada ciclo de reloj estn definidas. Consta de dos unidades. La Unidad de
Datos (UD) incluye los recursos hardware en trminos de registros, Unidades Ope-
racionales (UOs) e interconexiones, ya sean "buses" o multiplexores. La Unidad de
4. Sntesis 187
start
ends
2 Cdigo del Listado 4-2 en el caso de utilizar una herramienta de sntesis de comportamiento o
del Listado 4-3 en caso de utilizar una herramienta de sntesis RT-lgica.
4. Sntesis 189
querir, en general, de su descripcin en VHDL y que slo van a afectar a los forma-
tos internos de representacin del diseo utilizados por la herramienta concreta que
se utilice. En cualquier caso, el ejemplo muestra distintos estilos descriptivos en
VHDL que pueden ser utilizados por el diseador en la descripcin para sntesis de
parte o de la totalidad del circuito.
VHDL fue desarrollado como un lenguaje para el modelado y simulacin lgica di-
rigida por eventos discretos de sistemas digitales. Se trata de un lenguaje con una
4. Sntesis 191
port(
D: in STD..,.ILCIC;:,~
C: in s:ro-r..cx;I~hf
Q: out STD_!fl'IC;,,\,
QN: out STD.)lYftcr;
end camponent;
begin
state_2 : DF8 port map( st.te;;;.2.2,d, reloj,state(2li ~tU6 )i
state_l : DF8 port map( state.,;,l_d, reloj,stte(), het25 );
8tate_2.,g1 : NA2 port map(state(1), state(2), net 38};
state_2_I34: NA2 port map(I(4L;L(). state"",tJIl)
end estructura;
4. 1.3. Objetivos
process
begin
if xl = 'O' then
z <= 'O' i
wait en xl;
elsif x2 = 'O' then
z <= 'O';
wait en x2;
else
z <= '1';
wait until xl or x2;
end if;
end process;
X1=[)_Z
X2
-i--~--------- ---_;_---~-~
En este apartado se hace una breve introduccin a los modelos de sistema digital utili-
zados por las herramientas de sntesis y a los pasos de sntesis que aplican. Sntesis
RT y sntesis lgica utilizan modelos y algoritmos distintos. Sin embargo, desde el
momento en que ambas tareas se realizan conjuntamente en las herramientas de snte-
sis actuales, para el diseador aparentan un nico proceso. Al objeto de lograr los me-
jores resultados es importante el conocimiento de los pasos concretos en cada caso.
196 VHDL. Lenguaje estndar de Diseo Electrnico
,
, Perodo de: t
: comparacin:
4.3.2. Sntesis RT
El modelo de sistema digital utilizado por las herramientas de sntesis a nivel RT es
una extensin 3 del modelo de Huffman constituido por dos unidades:
3 Se trata de una extensin en el sentido de que siempre puede obtenerse el modelo de Huffman
equivalente.
4. Sntesis 197
Entradas I i> I
v
Salidas
Lgica
combinacional
1---
~
Seales d e Seales de
estado actu al est ado prximo
Elementos
de
memoria <j
/\
Je, R1...
Reloj
4 Los mdulos de memoria RAM y ROM son considerados como externos a la descripcin RT
Secuencacin
UNIDAD "-
Entradas
de control I
i)
v DE CONTROL I
Salidas
de control
~r
Seales Seales
del status de control
Q
Entradas
de datos I l> UNIDAD
DE DATOS I Salidas
de datos
Cmputo
Estos pasos dependen fuertemente del estilo descriptivo utilizado. Por lo gene-
ral, la herramienta de sntesis realiza la extraccin desde el cdigo VHDL perdien-
do la informacin de alto nivel de partida. Su recuperacin requerira comenzar de
nuevo el proceso de sntesis desde la descripcin VHDL. Este es uno de los moti-
vos por los cuales el estilo descriptivo utilizado en el cdigo VHDL de entrada tie-
ne trascendencia en cuanto a los resultados de la sntesis. Es importante, por ello,
conocer los mecanismos empleados por la herramienta de sntesis que se est utili-
zando al objeto de asegurar resultados ptimos. Un caso tpico lo representan los
operadores aritmticos y las asignaciones indiferentes. Sin embargo, hay herramien-
tas que identifican los operadores aritmticos como componentes durante el proceso
de sntesis. De esta manera, son capaces de conservar parte de la informacin de al-
to nivel durante el proceso de optimizacin lgica, permitiendo, por ejemplo, cam-
biar el tipo de implementacin del operador. Esta misma situacin se presenta con
los elementos de memoria. Una vez inferidos, su repercusin en el diseo no se
puede evitar durante el proceso de sntesis.
La sntesis de la Unidad de Control (UC) consiste fundamentalmente en la
identificacin y sntesis del autmata de control y se divide usualmente en tres pa-
sos:
identificacin del autmata de control (estados y transiciones),
minimizacin de los estados de control,
asignacin secundaria.
De nuevo, en general, se trata de transformaciones destructivas respecto a la in-
formacin de entrada. Sin embargo, algunas herramientas marcan el registro de es-
tados, lo que permite conservar esta informacin de alto nivel. Tanto los algoritmos
de minimizacin de estados, sobre todo en el caso de mquinas incompletamente
4. Sntesis 199
De las cuatro categoras de tipos definidos en el estndar, slo los tipos escalares y
compuestos son usualmente soportados. De las cuatro categoras de tipos escalares
definidos en el estndar, slo los enteros y enumerativos son usualmente soportados
en sntesis. Los tipos fsicos y flotantes o son ignorados o no son admitidos.
Los tipos enteros se sintetizan como vectores de bits con la dimensin adecua-
da al rango con que se han definido. Si el rango incluye valores negativos, la con-
versin suele hacerse en complemento a 2, en caso contrario en binario sin signo.
As, la seal entera Temperature:
S <; x or 'O';
x-p-s
La herramienta de sntesis debe de interpretar los siguientes valores:
x---=O-s
4.4.4.1.2. Interpretacin de los valores lgicos
dbiles ('L', 'H')
El estndar 1076.3 no especifica ninguna interpretacin para los valores lgicos d-
biles 'L' y 'H' del tipo Std_Ulogic. El hecho es que las herramientas comerciales
actuales, o no soportan estos valores o los tratan de forma idntica a los valores
fuertes 'O' y '1' respectivamente. Al objeto de no restringir tecnologas futuras en
las que sea relevante diferenciar en sntesis la fuerza asignada al valor de una seal,
se decidi no forzar una interpretacin en la actualidad.
es equivalente a:
z <= '1';
Este ejemplo puede parecer chocante, ya que la comparacin de '-' con cual-
quier otro valor debera evaluarse siempre como cierta. Sin embargo, los
5 Esttico significa que el operando es un literal 'U', 'W', 'X' o '-'. Dinmico se utilizara en el
caso de que el operando fuera una variable o seal que, en tiempo de simulaci6n, tomara uno de los va-
lores metal6gicos.
204 VHDL. Lenguaje estndar de Diseo Electrnico
if s /= 0010X01" then
z <= 'Ol} 'r.
else
z <= '1';
end if;
es equivalente a:
z <= 'o' i
case s is
when ooo,;,~
z <= 'o' i
when '001" =>
z <= '1 '-;
when '0--" =>
z <= xl;
when others =>
z <= x2;
end case;
es equivalente a:
case s is
when '000' =>
z <= 'O';
when '001' =,>
z <= '1';
when others =>
z <= x2;
end case;
y <= yl&y2;
with y select
z <= xl and x2 when '00",
'Z' when "01",
'Z' when "lO",
xl when "11";
6 La mayora de las herramientas de sntesis interpretan los valores metalgicos como indife-
rentes.
206 VHDL. Lenguaje estndar de Diseo Electrnico
Funciones 7
Descripcin Operandos Resultado
aritmticas
Funciones de
Descripcin Operandos 7 Resultado
comparacin
7 Las funciones son conmutativas respecto del tipo, ya que estn definidas tambin para el orden
Funciones de
Descripcin Operandos 7 Resultado
comparacin
Funciones de 8
desplazamiento
Descripcin Operandos Resultado
Funciones de 9
Descripcin Operandos Resultado
conversin
Funcin de
Descripcin Operandos 10 Resultado
traslacin
representa el valor a asignar cuando se detecta una discrepancia (por defecto 'O').
210 VHDL. Lenguaje estndar de Diseo Electrnico
que convierte los valores 'H' en '1' Ylos valores 'L' en 'O'. Cualquier otro valor es
convertido en el valor definido por el segundo argumento de la funcin ('O' por de-
fecto).
Como ya se ha comentado anteriormente, ni en las funciones de comparacin
VHDL estndar ni en las incluidas en el paquete Std_Logic_ll64 en el que se define,
el valor '-' tiene un tratamiento especial como valor indiferente. Al objeto de propor-
cionar un mecanismo de comparacin en el que el valor '-' acte efectivamente co-
mo valor indiferente, el paquete Numeric_Std incluye la funcin Std_ Match. As:
Sin embargo:
StQjMatch (01UXOL1ZUUH, LHU-0-1-1) = 'O';
representa el valor a asignar cuando se detecta una discrepancia (por defecto 'O').
12 Como ya hemos comentado anterioimente, para cualquier asignacin concurrente existe un
proceso equivalente.
4. Sntesis 211
x2-_,_----l
'-------110
'1' --------1
y1 y2
x1-~---l
x2-+-_"'--l
y1--~---J
y2---4---l
A partir de los paquetes de sntesis, la utilizacin del valor std_logic 'Z', impli-
ca la descripcin de un buffer triestado:
En este caso, la seal 'z' tiene que ser de clase bus, al igual que ocurra cuando
se utilizaba un bloque guardado. En cualquiera de los anteriores casos, el resultado
es un buffer tri-estado:
en
process (b, c, e)
variable d: ...;
begin
d := b and e:
a <= dore;
end process;
process (b, e, e)
variable d: ... ;
begin
if (b = '1') then
d := C; .
end if;
a <= dore;
end process;
Un caso que es interesante citar aqu lo constituyen los procesos en los que una va-
riable es utilizada antes de ser asignada como en el proceso siguiente:
process (input)
variable var: stQ_ulogic.;
begin
output <= varo
var : = input;
end process;
y := y1&y2;
case y is
when '00' =>
z <= xl and x2;
when "01" =>
z <= xl;
when "lO' =>
z <= x2;
when "11" =>
z <= '1';
end case;
end process;
216 VHDL. Lenguaje estndar de Diseo Electrnico
end process;
D----t I----Q
I
en
b e
Este tipo de inferencia se puede realizar siempre que la herramienta sea capaz
de identificar la seal de habilitacin dellatch. Otras herramientas, sin embargo, in-
fieren la lgica asncrona directa correspondiente advirtiendo al diseador de esta
situacin. Esta implementacin no garantiza la ausencia de carreras:
Algunas herramientas permiten utilizar bloques con seal de guarda para des-
cribir latches. La seal de guarda debe de especificar un valor y nunca un evento.
As, por ejemplo, el cdigo siguiente:
4.4.8. Registros
Se identifican como registros aquellas seales cuya asignacin dependen de una se-
al de reloj.
Un bloque con seal de guarda puede ser utilizado para describir la carga sobre
un registro:
ex1:block (reloj 'event and reloj ..: '1')
begin
Q <= guarded D;
end block;
Un proceso con sentencia de espera puede ser utilizado tambin para describir
registros como en los ejemplos siguientes:
process
begin
wait until (reloj = '1');
Q <= D;
end process;
process
begin
wait until (reloj'event and reloj = '1');
Q <= D;
end process;
220 VHDL. Lenguaje estndar de Diseo Electrnico
En un proceso con lista de sensibilidad, sta puede ser utilizada para especifi-
car el evento de la seal de reloj:
process (rel~j~
begin _,
if (reloj'event and reloj = '1') then
Q <= D;
end if;
end process;
Este ltimo estilo admite la inclusin de seales de set y reset, ya sean sn-
cronas:
process (reloj)
begin
if (reloj'event and reloj '1') then
if (reset = '1') then
Q <= '0';
e1se
Q <= D;
end if;
end if;
end process;
o asncronas:
process
begin
if (reset = '1') then
Q <= '0';
elsif (reloj'event and reloj '1') then
Q <= not D;
end if;
wait on reloj, reset;
end process;
reset
reloj
reset
reloj
La diferencia en uno u otro caso proviene del valor inicial de la seal D tras la
primera ejecucin del proceso.
Sobre la seal de reloj se imponen usualmente una serie de condiciones de uso
que la caracterizan como una seal de comportamiento correcto. Las ms usuales
son las siguientes:
process ( ,.. )
if (reloja'event and reloja= '1') then
end H,
if (relojb'event and relojb= '1') then
end ifi
end process ,
222 VHDL. Lenguaje estndar de Diseo Electrnico
reset
D----I Q
senal_control
reloj
RD <= RD sIl 2;
~
I ~ I ~I I 'O'
4.4.8.2. Contadores
Los contadores representan otro elemento muy frecuente en diseo digital. La for-
ma ms usual para describirlos en VHDL es mediante operaciones de incrementa-
cin y/o decrementacin. As, la siguiente sera la descripcin de un contador cre-
ciente y decreciente de seis bits:
Los dos contadores anteriores son sncronos, ya que la carga sobre la seal
contador se realiza en la transicin activa de la seal de reloj. La descripcin de
contadores asncronos (ripple counters) requiere de un estilo descriptivo explci-
to. As, por ejemplo, la siguiente sera la descripcin de un contador asncrono
mdulo 10:
1
eloj co ntador(Ol
;> Q
,-- O
a~
I
co ntador(1)
- P. Q
.-- O
al
I
~ co ntador(2)
> Q
r- o a~
I
co ntador(3)
'-----
> Q
,o a~
reset
226 VHDL. Lenguaje estndar de Diseo Electrnico
Existen varios estilos de descripcin VHDL de FSMs. Cada uno de ellos ser el
ms apropiado, dependiendo de la herramienta y el tipo de mquina que se quiera
describir. Los resultados de sntesis en cada caso van a ser diferentes.
Los estilos descriptivos para FSMs se pueden agrupar en explcitos e implci-
tos. En el estilo explcito el, la FSM se describe utilizando un proceso combinacio-
nal para describir la funcin de prximo estado y las asignaciones de salida y un
proceso secuencial para describir las asignaciones sobre el registro de estados en la
transicin activa de la seal de reloj. Este estilo identifica claramente la parte com-
binacional de los elementos de memoria segn el modelo general de mquina se-
cuencial de Huffman:
entity FSM is
port (reloj, reset: in std_ulogic; _ seales de reloj y reset
xl , ... xn in std_ulogic _ seales de entrada
zl, ._ zm out std_ulogic); _ seales de salida
end FSM;
architecture el of FSM ls
type estados ls (sO, ...sp);
signa1 estado: estados; _ registro ~ estados
signa1 nxt_estado: es't~dos; _ seal de prximo estado
begin "
SID:process (estado, xl, ...xn)
begin
nxt_estado <= estadO; _ asignacin por defecto
case estado ls
when sO => _ estado sO
_ acciones del estado .sO:
_ asignacin de estado prximo
- asignaciones. de sal~da
_ asIgnaciones de salda
"<,
end case;
end process SIn;
relojd:process
begin
wait until reloj = '1';
if (reset = '0') then
estado <= sO; - reset sncrono
elee
estado <= nxt_estado; _ transicin de e$tado
end if;
end process relojd;
entity FSM i.
port ( reloj, reset : in std_ulogic; _ seales de reloj y reset
x in std_ulogic; _ seal de entrada
228 VHOL. Lenguaje estndar de Diseo Elecrrnico
%, 1/1
1/0 1/1
%
1/0
0/1
architecture el of FSM is
type estados is (sO, sl, s2, s3);
signa! estado: estados; -,registro de estados
signa1 nxt_estado: estados; - seal de prximo estado
begin
sm: process (estado, x)
begin
nxt_estado <= estado; - asignacin por defecto
case estado is
when sO => - estado sO
z <= '0'; _ asignacin de salida
if (x = 'O') then _ asignacin de estado prximo
nxt_estado <= sl;
else
nxt_estado <= s2;
end if;
when sl => _ estado sl
z <= x; - asignacin de salida
nxt_estado <= sO; '- asignacin de estado prximo
when s2 => - estado s2
z <= 'DI i - asignacin de salida
4. Sntesis 229
architecture e2 of FSM is
begin
sm: process
type estados is (SO _. sp);
variable estado: estados; _ registro de estados
begin
wait until reloj = '1';
if (reset = 'O') then
estado := sO; _ reset sncrono
else
case estado is
when sO => _ estado sO
_ acciones del estado sO:
_ transicin de estado y
_ asignaciones de salida
end e2;
architecture e2 of FSM ls
type estados la (sO, sI, s2, s3);
begin
sm: procesa (estado, xl
variable estado: estados; ce registro de estados
begin
wait untll reloj = '1';
if (reset = '0') then
estado := sO; - reset sncrono
else
case estado is
when sO => - estado sO
z <= ' O' ; ..:.
asignacin a registro de salida
if (x =' 'O') then '- asignacin de estado prximo
estado := sI;
else
estado := s2;
end if;
when sI => - estado sI
z <= x; ~ asignacin a registro de salida
estado := sO; - asignadi6nde estado prximo
when s2 => - estado s2
z <= '0'; - asignacin de salida
if (x = '0') then - asignacin de estado prximo
estado := sI;
elae
estado := s3;
end if;
when s3 => - estado s3
z <= '1'; - asignacin de salida
if (x = '1') then - asignacin de estado prximo
estado := sI;
end if;
end case;
end if;
end process sm;
end e2;
o
o
o
o
architecture e3 af FSM ls
type estados 18 (sO, ...sp);
signal estado: estados := sO; _ registro.de estados
begin
sm: process (reset, reloj, estado, xl , ... xn)
begin
_ lgica combinacional
lf (reset = '0') then
estado <= sO; _ reset asncrono
elsif Rising_Edge(reloj) then
case estado ls >
_ lgica combinacional
tanto al principio como al final del proceso, van a producir lgica combinacional.
Las asignaciones en el cuerpo de la sentencia:
end process;
end implcita; 1
13 En este estilo descriptivo, el atributo usualmente utilizado para identificar el registro de esta-
Recibe el nombre de FSMP, o mquina de estados finitos con unidad de datos tam-
bin denominada ASM o mquina de estados algortmica, a la conjuncin de un au-
tmata de control y una unidad de datos segn el esquema general de arquitectura a
nivel RT comentada anteriormente y que se mostraba en la Figura 4.10. Cualquiera
de los estilos descriptivos anteriores puede ser utilizado en la descripcin VHDL de
FSMDs sin ms que incluir en cada estado las acciones a ser realizadas en la unidad
de datos. Los estados explcitos (o implcitos) de la mquina se correspondern con
los estados de control mientras que los recursos hardware necesarios en la imple-
mentacin de las acciones a realizar en los estados de control constituirn la unidad
de datos.
236 VHDL. Lenguaje estndar de Diseo Electrnico
4.4.11. Segmentacin
puede realizarse con cualquiera de los estilos descriptivos para FSMs comentados
con anterioridad. As, utilizando el estilo explcito el:
re1ojd:process (Reloj)
begin
if (reloj' event and reloj = '1') then
Reg1 <= LCl; - etapa 1
Reg2 <= LC2; - etapa 2
Reg3 <= LC3; - etapa 3
end if;
end process relojd;
1
. Fmx = ----------
TR + mx (TI, T2, T3) + TH
TI = 4 ns
intentando que:
al objeto de que:
x1 -----1 o Q
x2 o Q
reloj
a)
x1
o Q 1---- z
x2
b) reloj
El cdigo VHDL generado para sntesis debe de ser lo ms claro posible al objeto
de asegurar al mximo control sobre el resultado. En este sentido cabe hacer las si-
guientes recomendaciones:
if (a = '1') then
else
end if;
14 Podra utilizarse tambin -'. Sin embargo, este carcter es ms incmodo a la hora de analizar
resultados de simulacin.
4. Sntesis 241
que:
ti (a = '1') then
else
end if;
4.6. EJERCICIOS
k
2:
Y (t) :::: x(t - i)*c(i)
i=O
o
y(t) ::::2: x(t - i)*c(i)
i=k
wait on x2;
el se
z <= 10';
wait until xl ar x2;
end if;
end process;
c) with Y select
z <= xl or x2 when "OO' else
xl when "01" else
'Z' when "10" else
'1' when 1111" ;
~ a
a
b8'
~ b
De
BCD Circuito -c;d
e e f
e f 9
-09
10. Repetir el problema anterior pero haciendo que el circuito muestre la letra de
error 'E' cuando se reciba una palabra fuera del cdigo.
OP
natural F (16) F(15 downto O)
O O AorB
1 O AnorB
2 O AandB
3 O AnandB
4 O Axor B
5 O AxnorB
6 A+B
7 A-B
13. Describir en VHDL para sntesis un contador bidireccional que circule por el
siguiente cdigo "One-Shot":
00000
10000
01000
up='O' UP= '1'
00100
00010
00001
14. Proponer descripciones VHDL sintetizables en los tres estilos explcitos (el, e2
y e3) y en estilo implcito para la mquina de estados finitos siguiente:
Estado actual x =O x =1
SI S2/1000000 S4/1000000
S2 S3/0100000 Sl/OOOOO10
S3 S2/0010000 Sl/OOOOOI0
S4 S5/0001000 Sl/OOOOOOI
S5 S4/0000100 Sl/OOOOOOl
4.7. BIBLIOGRAFA
[MLD92] P. MICHEL. U. LAUTHERy P. Duzy (Ed.): The synthesis approach to digital system
designo Kluwer, 1992.
[N93] Z. NAVABI:VHDL: Analysis and modeling of digital systems, McGraw-Hill. 1993.
[OW94] D. E. Orr y T. 1. WILDEROTIER. A designer's guide to VHDL synthesis, Kluwer,
1994.
[S94] P. SINANDER:VHDL modelling guidelines, European Space Agency. September, 1994.
[S96] D. J. SMITH:HDL chip designo Doone Publications, 1996.
[V95] E. VILLAR: Level-O VHDL synthesis syntax and semantics, ESPRIT 8370 ESIP Pro-
ject, December, 1995.
[VS93] E. VILLAR y P. SNCHEZ:Synthesis applications ofVHDL. en 1. Mermet (ed.): "Fun-
damentals and standards in hardware description languages", Kluwer, 1993.
Captulo 5
MODELADO
CON VHDL
Eduard Lecha, Fernando Rincn, Manel Mor, Joan Vidal y Llus Ters
IMB-CNM (CSIC)
Universitat Autnoma de Barcelona
Groucho Marx
249
250 VHDL. Lenguaje estndar de Diseo Electrnico
5. 1. INTRODUCCiN
En este captulo se presenta, de una manera prctica, el uso del lenguaje VHDL pa-
ra el modelado de sistemas electrnicos. Para ello todo el captulo se ejemplifica so-
bre un sistema basado en un procesador sencillo ("La mquina rudimentaria"
[SPC97]) y arropado con otros componentes bsicos (memoria y rbitro de bus) pa-
ra formar un sistema microprocesador completo.
El procesador es el hilo conductor del captulo a lo largo del cual se abordan
los problemas del modelado con VHDL en los distintos niveles de abstraccin. En
una primera etapa ser fundamental poder experimentar con distintos conjuntos de
instrucciones para el procesador en un modelo sencillo que sea fcil de manejar. Pa-
ra esta etapa se desarrollar un modelo funcional. Posteriormente ser necesario es-
pecificar con ms detalle la interfaz del procesador con su entorno y a partir de este
momento, ser posible refinar por separado tanto el modelo del procesador como el
del resto del sistema hasta llegar a un modelo detallado de los componentes del pro-
cesador y a un modelo lo ms fiel posible de los circuitos ya existentes utilizados
para el resto del sistema.
Antes de abordar cada tarea en el diseo del sistema ejemplo se plantean los
problemas del modelado en el nivel de abstraccin necesario para la tarea junto con
una descripcin general de las tcnicas que se podran aplicar y los posibles usos
del VHDL en la solucin de la tarea planteada. Posteriormente se aplican al sistema
ejemplo las estrategias y tcnicas ms adecuadas para nuestro caso.
En el siguiente apartado se da una visin global de los mecanismos disponibles
en VHDL para modelar un sistema a distintos niveles de abstraccin. Estos meca-
nismos se tendrn en cuenta en cada descripcin del procesador para cumplir con el
objetivo de los distintos modelos.
A continuacin se describe el modelado a nivel algortmico. Este tipo de mode-
los suelen utilizarse en las primeras etapas del diseo como ayuda a la escritura y
validacin de las especificaciones del componente a implementar. En muchas oca-
siones es posible escribir un modelo algortmico de un componente sin especificar
ni siquiera su interfaz con otros componentes.
La evolucin del procesador consiste en la definicin de su interfaz con los de-
ms componentes del sistema y el refinamiento de su arquitectura interna. Para si-
mular esta segunda descripcin del procesador es necesario definir un banco de
pruebas. Los bancos de pruebas constituyen un modelo del entorno del componente
a verificar y a lo largo del captulo se mostrarn distintas opciones en los bancos de
pruebas del procesador a medida que se detalle su entorno.
El particionado del procesador contina despus de la realizacin del primer
banco de pruebas. Se realiza un modelo detallado del procesador, distinguindose
los diferentes componentes de la unidad de proceso y unidad de control, as como
sus distintas implementaciones. El modelado detallado se realiza con el objetivo de
cubrir la mayor variedad posible de tcnicas de modelado para la simulacin, aun-
que sin perder de vista las necesidades de un modelo para sntesis. As, en las des-
cripciones a nivel de transferencia de registros, se tienen en cuenta las capacidades
de las herramientas de sntesis actuales, apuntndose en cada caso las estructuras no
sintetizables y las modificaciones necesarias de los modelos para sntesis.
5. Modelado con VHDL 251
Finalmente, debido al gran tamao de los listados VHDL que aparecen en este
captulo, se ha optado por simplificar y esquematizar al mximo el cdigo insertado
en el interior del texto, e incluir las descripciones completas en la direccin del Web
http://www.cnm.es/lBM/libroVHDL.
Sin embargo, si quisiramos describir el sistema sin preocuparnos por este tipo
de detalles podramos simplificar considerando que los valores de los nodos de un
sistema digital slo pueden tomar dos valores: 'O' o '1'. En este caso podramos uti-
lizar los tipos bi t Y bi t_ vector predefinidos en el lenguaje. Por otra parte, la utili-
zacin de estos tipos implica detallar la precisin de los datos numricos utilizados
en los algoritmos. Por ejemplo, si trabajamos con datos reales, deberamos determi-
nar un formato de punto fijo o punto flotante y asignar un nmero de bits a las par-
tes entera y decimal o a la mantisa y exponente.
Por otra parte, trabajar a nivel de bits implica determinar el formato y la codifi-
cacin de las variables. Por ejemplo, cuando describimos una mquina de estados
finita nos podra interesar no determinar una codificacin de estados, ni siquiera el
nmero de bits que ser necesario para almacenar el estado, ya que ms adelante
podramos decidir cambiar el estilo de codificacin y, por ejemplo, en lugar de utili-
zar una codificacin basada en cdigos de Gray utilizar una codificacin con un bit
por cada estado (codificacin One-hot).
Por tanto, necesitamos tipos de datos que nos permitan obviar los detalles que
aparecen a nivel de bit y de esta forma simplificar y generalizar las descripciones.
Para ello, en VHDL se pueden usar los tipos integer, real, enumerados y tipos
compuestos basados en stos. Adems, existen paquetes estndar del IEEE donde
se definen operaciones matemticas sobre el tipo REAL y declaraciones de tipos re-
presentando nmeros complejos no incluidas por defecto en VHDL (IEEE 1076.2).
Con VHDL podemos simular descripciones donde distintos componentes se
modelen con distinto grado de detalle y utilicen distintos tipos de datos. En este ca-
so, para la comunicacin entre componentes se debern usar funciones de conver-
sin de tipo, es decir, funciones que toman como parmetro un valor de un determi-
nado tipo (por ejemplo, integer) y devuelven como resultado de su ejecucin el
equivalente en el otro tipo de datos (por ejemplo, bit_vector).
,::.:::. .. '"
PI: process
begin
AbrirDispositi VOl
Trabaja;
CerrarDispositivo;
256 VHDL. Lenguaje estndar de Diseo Electrnico
Semaforo := LIBRE;
end process;
P2: process
begin
AbrirDispositivo;
Trabaja;
CerrarDispositivo;
Semaforo := LIBRE;
end process;
La segunda opcin para conseguir que varios procesos escriban sobre un mis-
mo recurso consiste en utilizar una seal de tipo resuelto. En este caso la simula-
cin ser determinista siempre que la funcin de resolucin no dependa del orden
en que le pasen los valores en el vector de valores asignados a la seal. Esta solu-
cin no se emplea normalmente en descripciones de nivel funcional sino que es
muy til en descripciones ms detalladas del hardware para modelar el acceso a bu-
ses compartidos mediante el uso de buffers tristate y se ver un ejemplo de ello
cuando se modele con ms detalle el procesador y su interaccin con el bus de me-
moria.
En el Listado 5.2 vemos el mismo ejemplo de comparticin de un dispositivo
del listado anterior pero con el semforo implementado mediante una seal de tipo
resuelto en la que escriben dos procesos. La seal Semaforo es del tipo resuelto
tAcceso y puede tomar los valores LIBRE, indicando que ninguno de los dos proce-
sos ha entrado o pide entrar en la zona de trabajo con el dispositivo, PETICIONI,
indicando que el proceso PI solicita trabajar con el dispositivo, PETICION2, indi-
cando que el proceso P2 solicita el dispositivo, OCUPAIXJI, indicando que el proceso
PI est trabajando con el dispositivo y OCUPAIXJ2 que significa que el proceso P2
mantiene ocupado el dispositivo.
Para acceder al dispositivo, los procesos han de asignar a la seal Semaforo su
valor de peticin y esperar a que sta tome el valor de ocupado que les corresponde.
Seguidamente, el proceso que obtiene el permiso, asigna su valor de ocupado a la
5. Modelado con VHDL 257
Pl:process
begin
-~_Tareas proceso. PI
AbrirDispositivo;
Trabaja;
CerrarDispositivo;
Semaforo <= LIBRE;
end process;
P2:process
begin
-- Tareas proceso P2
AbrirDispositi VQ;
Trabaja .
cerrarDispositivo;
Sernaforo <= LIBRE;
end process;
seal Semaforo para evitar que sta cambie de valor ante peticiones del otro proce-
so. La funcin de resolucin Resuel veAcceso se encarga de mantener el valor ocu-
pado de la seal si alguno de los procesos est escribiendo su valor de ocupado. De-
be notarse que esta descripcin tampoco es determinista, ya que el orden en que los
procesos obtengan el dispositivo en el caso de solicitarlo simultneamente depende-
r del orden en que le lleguen los valores a la funcin de resolucin, 10 cual es de-
pendiente del simulador.
Finalmente, en la tercera opcin para compartir recursos escritos por varios
procesos, el recurso compartido se encapsula dentro de un proceso donde puede re-
presentarse mediante una variable local y se definen seales para el acceso de cada
proceso que desee leer o escribir informacin. En el proceso que encapsula el recur-
so se incluir cdigo para arbitrar la escritura simultnea de informacin.
En el Listado 5-3 se muestra la implementacin del semforo mediante esta
tcnica. El proceso Semaforo contiene la variable Acceso donde se guarda el esta-
do del semforo. Los procesos PI y P2 acceden a dicha variable mediante las sea-
les PeticionPl, OcupadoPl y PeticionP2 y OcupadoP2, respectivamente.
P1: process
begin
-- Tareas proceso PI
AbrirDispositivo
Trabaja
5. Modelado con VHDL 259
GerrarDispositivo;
peticionPl <= FAL.')E;
end process;
P2: process
begin
-- Tareas proceso P2
end process;
begin
if PeticionPI and not PeticionP2 then
Acceso := PI;
elaif PeticionP2 and not PeticionPI then
Acceso := P2;
elsif p~t~ionPI and PeticionP2 and Acceso ~~BREthen
Acceso := PI;
end if.;
if Acceso = PI then
OcupadEl_ <= TRUE;
elae _
OcupadoPI <= FALSE;
end if;
if Acs~;'~P2 then
ocupadP2 <= TRUE;
elee
OcupadoP2 <=rALSE~
end if;
end process;
Para ejemplificar el estilo de descripcin VHDL que se puede realizar en las prime-
ras etapas de la concepcin de un sistema electrnico, en este apartado escribiremos
el modelo funcional del procesador que constituir el ncleo del ejemplo utilizado
en el resto del captulo. En primer lugar se especificar la arquitectura del procesa-
dor a nivel de conjunto de instrucciones y posteriormente se comentar la descrip-
cin VHDL que sirve para experimentar y trabajar con dichas especificaciones.
Registro de instruccin
Banco
de
Contador de programa
Registros
Memoria
-- de
programas
y
datos
STORE Almacena el contenido del registro del banco de registros indicado por el
(Rf, Rx, DireccionBase) campo Rf en la posicin de memoria indicada por los campos Direccion-
Base y Rx.
Instrucciones de salto
Instrucciones aritmtico-lgicas
ADDI(Rd, Rfl , Numero) Suma el contenido del registro del banco de registros indicado por el cam-
po Rfl con el valor contenido en el campo Numero. El resultado se alma-
cena en el registro indicado por el campo Rd.
SUBI(Rd, Rfl , Numero) Resta el valor contenido en el campo Numero de la instruccin del conte-
nido del registro del banco de registros indicado por el campo Rfl. El re-
sultado se almacena en el registro indicado por el campo Rd.
ADD(Rd, Rf'l , Rf2) Suma el contenido del registro indicado por el campo Rfl al contenido
del registro indicado por el campo Rf2 y el resultado se almacena en el
registro indicado en el campo Rd.
SUB(Rd, RfI, Rf2) Resta el contenido del registro indicado por el campo Rf2 al contenido
del registro indicado por el campo Rfl y el resultado se almacena en el
registro indicado en el campo Rd.
ASR(Rd, Rf2) El contenido del registro indicado por el campo Rf2 se desplaza un bit a
la derecha y el resultado se almacena en el registro especificado en el
campo Rd. El desplazamiento es aritmtico, es decir, se conserva el signo.
ANDL(Rd, Rfl , Rf2) Se realiza una operacin Y-lgica bit a bit entre el contenido del registro
indicado en el campo Rfl y el contenido del registro indicado en el cam-
po Rf2. El resultado se almacena en el registro indicado en el campo Rd.
5. Modelado con VHOL 263
package PaqueteMRFuncional is
type tlnstruccion is
record
CodigoOperacion : tCodigoOperacion;
Canpol : natural;
Canpo2 : natural;
Campo3 : natural;
end record;
end PaqueteMRFuncional;
library IEEE;
use lEEE.STD_LOGIC_l164.all;
use IEEE.STD_LOGIC_ARITH.all;
entlty MaquinaRudimentaria ls
end MaquinaRudimentaria;
266 VHDL. Lenguaje estndar de Diseo Electrnico
use work.PaqueteMRFuncional.all;
Procesador:process
variable CP integer;
variable RI tInstruccion;
variable Programa tVectorlnst(O to cNumInst);
variable MemDatos tvectortatos (O to cNuroDatos);
variable N boolean;
variable C boolean;. ,
variable Registros tVectorDatos(O to cNumRegistros);
procedure Leerlnstruccion i8
end Leerlnstruccion;
procedure Ejecutarlnsq:uccion ia
end EjecutilrtFtrucc:iolJ;
procedure Inf.ciatizaMemoria i8
begio
Programa (O) .- ( LOAD, 2, O, O );
Programa(l) ,_ ( LOAD, 3, , 1 )i
Programa(2) := ( ADD, 4, 3. 21 l'
5. Modelado con VHDL 267
begin
-- Inicializacin del programa
InicializaMemoria;
CP ,;: O;
Registro?(O) ::;0;
loop -', ..
LeerIhsfru(:in;
EjecutarInstruccioh;
wait for 10 ns;
end loop;
end process;
end Funcional;
procedure LeerlnsEruccion ls
begin
RI := Programa(CP);
CP := CP + 1;
eod Leerlnstruccion;
Las tareas a realizar para ejecutar una instruccin dependen en gran medida
del tipo de instruccin que se haya cargado en el registro de instrucciones. Por
ello, aunque la ejecucin de todas las instrucciones la realiza el procedimiento
EjecutarInstruccion, utilizamos la sentencia case para seleccionar las sentencias
a ejecutar en funcin de la instruccin de que se trate. Para cada instruccin existe
una clusula when en la que se actualizan los recursos de almacenamiento del pro-
cesador de acuerdo con su ejecucin.
procedure EjecutarInstruccion is
variable DirAbsoluEa :integer;
begin
end Ejecutarlnstruccion;
library IEEE;
use IEEE.STD~DOGIC_1164.all;
entity MaquinaRudimentaria is
port (
Inicializa in stq_logic;
Reloj in std,._logic;
BusLibre in std,_logic;
Datos inout std_logic_ vector (15 downto O);
Direccion out si:d..logic_v!!ctor(7 downto O)i
HabilitaMem : out std,_logic;
Escribe out std_logic;
PeticionBus : out std_logic .) ;
end MaquinaRudimentaria;
Ahora debemos escribir una arquitectura para la entidad definida, de forma que
se reconozcan los estmulos que otros componentes del sistema enviarn al procesa-
dor a travs de los puertos de entrada y se proporcionen las respuestas adecuadas en
los puertos de salida. La existencia de esta interfaz nos obliga a respetar ciertas rela-
ciones causa-efecto de las seales. Por ejemplo, el procesador no deber realizar un
acceso al bus si la entrada BusLibre no est activa, sino que deber realizar antes
una peticin del bus activando PeticionBus. En las Figuras 5-2 y 5-3 se detallan
los accesos a memoria para lectura y escritura, En principio el procesador acceder a
la memoria en un ciclo de su reloj, sin considerar ninguna restriccin respecto al or-
den y temporizacin con que deben activarse las seales Direccion, Datos, Escri
be y Habili taMem. Sin embargo, cuando se componga el sistema con dispositivos
reales, la memoria necesitar que los datos, direcciones y la seal Escribe estn es-
tables un cierto tiempo antes y despus de la activacin y desactivacin de la seal
HabilitaMem. Esto se conseguir aadiendo la lgica necesaria en el sistema y, por
lo tanto, no nos preocuparemos de ello en el modelo del procesador.
La arquitectura del procesador, aunque no se describa a nivel de transferencia
entre registros, ser mucho ms cercana al hardware que la descripcin meramente
funcional. Ello nos obliga a utilizar tipos de datos capaces de representar los valores
lgicos que toman las conexiones de los circuitos digitales y a definir los formatos a
nivel de bits para las distintas instrucciones.
En cuanto al formato, distinguimos cuatro tipos de instrucciones: instruccin
de lectura de datos de memoria, instruccin de escritura de datos a memoria, ins-
trucciones de salto e instrucciones aritmtico-lgicas. Estas ltimas tendrn un for-
mato distinto para la suma y la resta con direccionamiento inmediato. Las instruc-
ciones de lectura, escritura, salto y aritmtico-lgicas se distinguen entre s por el
Reloj
PeticonBus
BusLibre
HablitaMen
.'
.,
.,
. .,.
,
------i------1- -----: ~
"
, Reloj
PeticionBus
BusLibre
IL_
HabilitaMen
---
I I
2
I
00
3
Rd
3
Rx I
8
I---
2 3 3 8
I I
01 Rl Rx I Direccin Base Formato de la instruccin STORE
I---
2 3 3 8
Formato de las instrucciones
I I
10 Cond 000 I Direccin de salto
I
--_ ......
2
11 I
3
Rd I
3
Rl1 I Nmero
5
I
3
OP I
Formato de las instrucciones
de suma y resta de inmediato
I------
2 3 3 3 2 3
Formato del resto de instrucciones
I
11 I Rd Rl1 Rl2 00 I OP I aritmticas y lgicas
OP Instruccin
100 Suma (ADD)
101 Resta (SUB)
110 Desplazamiento aritmtico a la derecha (ASR)
111 y lgica (AND)
000 Suma con inmediato (ADDI)
001 Resta con inmediato (SUBI)
Nos queda por determinar la codificacin de los campos OP (para las instruc-
ciones aritmtico-lgicas) y Cond (para las instrucciones de salio). Aunque la codi-
ficacin de dichos campos puede facilitar ciertas implementaciones del procesador
y, por consiguiente, podra ser til determinar cul es la mejor codificacin una vez
se haya planteado el modelo detallado del procesador, por el momento utilizaremos
la codificacin especificada en [SPC97]. Las siguientes tablas muestran la codifica-
cin de estos campos.
La primera particin que podemos hacer del procesador, de forma que refleje la
estructura del hardware que finalmente lo implementar, es distinguir una unidad
de control y una unidad de proceso. La unidad de proceso contendr los recursos de
clculo del procesador, mientras que la unidad de control indicar cmo se interco-
nectan y qu operaciones realizan dichos recursos en cada ciclo de reloj.
En la unidad de proceso encontraremos: el registro de instruccin (RI), el con-
tador de programas (CP), el banco de registros, un registro auxiliar (A), un registro
donde se guardar la direccin en los accesos a memoria (Registro de Direccin de
Memoria, RDM) y los registros para los indicadores N y C (N y C).
Cond Instruccin
000 Salto incondicional (BR)
001 Saltar si igual (BEQ)
010 Saltar si ms pequeo (BL)
011 Saltar si ms pequeo o igual (BLE)
101 Saltar si no igual (BNE)
110 Saltar si ms grande o igual (BGE)
111 Saltar si ms grande (BG)
5. Modelado con VHDL 275
HabilitaDatos
EscribeRegislro
Banco
Opera de
RreLg_iSttros_~~ Opera
- ~~
Unidad selR~
de Datos
control
IncCP
HabilnaDireccin
n~
T~
Direccin CondicinSalto
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE. STD_UlGIC..,.ARITH.
all ;
archltecture PrimeraParticion of Maqui~taria ls
constant cNBitPalabra : natural := 16,
constant cNBitDireccion : natural :=,'8';
constant cCero : std~logic_vect6r(cNBitPalabra-1 downto O)
, := (others => 'O' Ti-
type tSeLRegistro ls (SelRd, Se~Rx, SelRf, SelRf1, SelRf2);
type tFuenteDireccion ls (ContPrg:,'RegDirMern);
type tVectorRegistro ls array (natural ranga < of
std_logic_vector(cNBitPalabra-1 downto O);
" ,
signal Hqbil~taI)ireccion ;.~.tPJogic;
signal HabiHtabatos ': 'st(tlrigic;
signal FuenteDireccion : tFuenteDireccion;
signal SelRegLeCtura '';_:''':
"Ese1Registro;
signa1 EscribeRegistro : std_logic;
signal CargaRrM std_lOgic;
signal CargaRI std_logic;
signal CargaCP std_logic;
signal CargaA stcl...logic;
signal IncCP stdJogic;
signal Opera std_logic;
signal Tipolnstruccion : std ..Jogic_vector(l downto O);
signal CondicionSalto : std_logic;
signal Direccion_I std_logic_vector(CNBitDireccion-1 downto O);
signal Datos_I : std_logic~vector(cNBitPalabra-1 downto O);
begin
UControl: process
end process;
UProceso: process
end process;
UControl: process
procedure SolicitaBus is
end SolicitaBus;
procedure LiberaBus ls
end LiberaBus;
procedure Lectura is
end Lectura;
procedure Escritura ls
end Escritura;
procedure Cargalnstruccion ls
end cargaln:>truccion;
procedure CalculaDireccion is
end CalculaDireccion;
procedure Ejecutalnstruccion ls
end Ejecutalnstruccion;
begin
loop ,
wait until Reloj = '1';
CargalnstrueciQJl~ ;,,.~
wait until Reloj = '1';
Ejecutalnstruccion;
end loop;
end process;
En el cuerpo del proceso vemos una parte del cdigo que se ejecuta tan slo
una vez y un bucle infinito. La primera parte inicializa las seales de control una
vez la entrada Inicializa ya ha dejado de estar activa. El bucle posterior es el en-
cargado de traer de la memoria y ejecutar instrucciones indefinidamente.
Puede observarse que las reacciones de este proceso a los eventos en la entrada
Inicializa no son las que cabra esperar de una implementacin hardware del
procesador. En un circuito real los registros que guardan el estado interno del proce-
sador reaccionaran a una activacin de la seal Inicializa de forma inmediata y
asncrona o como mximo tardaran un ciclo de reloj, independientemente de la ta-
rea que estuviera realizando el procesador en ese momento. En cambio, modelar es-
te tipo de comportamiento en VHDL a un nivel de detalle menor que el de una des-
cripcin a nivel de transferencia de registros requiere incluir una gran cantidad de
sentencias de control del flujo para verificar en cada tarea que la seal Inicializa
es inactiva antes de avanzar un ciclo de reloj. Adems, cuando el cdigo est es-
tructurado en procedimientos, la parte de cdigo que llama a un procedimiento ha
de controlar si la finalizacin del mismo ha sido normal o se ha interrumpido a cau-
sa de la seal Inicializa.
A continuacin se detalla el cuerpo de cada uno de los procedimientos. Los
procedimientos Solici taBus y LiberaBus se encargan de gestionar el acceso al
bus del procesador. Solici taBus activa la seal PeticionBus y espera hasta que
la seal BusLibre se active. Debe notarse que la sentencia wait que realiza la
espera slo se ejecuta en el caso de que BusLibre no est ya activa. Si se ejecuta-
ra la sentencia wait cuando BusLibre tuviera el valor '1', el proceso detendra su
ejecucin hasta que un evento en la seal BusLibre volviera a almacenar el valor
'1' en ella, es decir, seran necesarios dos eventos: uno que modificara el valor de
280 VHDL. Lenguaje estndar de Diseo Electrnico
la seal y otro que restableciera el valor '1' para que el proceso continuara su eje-
cucin.
procedure SolicitaBus ia
begin
PeticionBus <= '1';
if BusLibre = 'O' then
wait until BusLibre = '1';
end if;
end SolicitaBus
procedure LiberaBus ia
begin
PeticionBus <= 'O';
end LiberaBus;
procedure Lectura ia
begin
SolicitaBus
FuenteDireccion <= RegDirMem;
wait until Reldj;;; '1'; .:
HabilitaDireccion <~ '1';
HabilitaMem <= '1';
EscribeRegistrQ'<= '.1 '.;
Escribe <= 'O',
wait until Reloj = '1';
HabilitaMem ~~., 'Oi ,
Escribe <= ,V;
EscribeRegistro )<= 'O';
HabilitaDireccion <= 'O';
LiberaBus;
end Lectura;
procedure Escritura ia
begin
SolicitaBus;
FuenteDireccion <=. RegDirMem;,
wait until Reld) = '1';
HabilitaDireccian <= '1';
5. Modelado con VHDL 281
procedure CargaInstruccion is
begin
SolicitaBus;
FuenteDireccion <= ContProg;
wait until Reloj '" '1 ';
IncCP <= '1';
HabilitaDireccion <= ' l' ;
Escribe <= '0';
HabilitaMem <= '1';
CargaRI <= '1';
wait until Reloj = '1';
IncCP <= '0';
Habili taMem <= ' O ';
Escribe <= ' Z' ;
CargaR! <= 'O';
HabilitaDireccion <= '0';
LiberaBus;
end CargaInstruccion;
procedure CalculaDireccion 18
beg1n
SelRegLectura <= SelRx:
CargaRDM <= ~l': -,,-
wait until Reloj = '1':
CargaRDM <= 'O':
end CalculaDireccion:
procedure EjecutaInStruccion 18
begin
case Tipolnstruccion ie
when "00" => - LOAD
CalculaDireccioD:
Lectura:
when 01" => - STORE
CalculaDireccion:
Escritura:
when "lO" => - Salto
if CondicionSalto = '1' then
CargaCP <= '1':
wait until Reloj = '1':
CargaCP <= 'O':
end if:
when "11" => - arithmetico-logica
SelRegLectura <= 5elRfl:
CargaA <= '~:
wait until Reloj = '1':
CargaA <= 'O':
SelRegLectura <= 5elRf2:
Opera <= '1':
EscribeRegistro <= 'l'r
wait until Reloj = '1' i
5. Modelado con VHDL 283
UProceso: process
begin
wait until rncatza =
'O'; ,
CP := (others => 'O');
C := 'O';
N := 'O';
for I in O to 7 loop
BancoRegistros(I) .- (others => 'O'.);
end loop;
loop
wait until Reloj i1';
-- Carga del RI
if CargaRI = '1' then
RI := Datos;
end if;
-- Logica asociada al CP
if CargaCP = '1' then
CP := RI(cNBitDireccion-1 downto O)_;
end if;
5, Modelado con VHDL 285
-- Escritura en el BancoRegistros
tf EscribeRegistro = '1' tben
iRd :::;Conv _integer (unsigned (Rd));
if Opera = '1' then
case OP 18
when "000' => -- ADDI
BancoRegistros(iRd) := signed(Numero) + signed(A);
wben 001 => -- SUBI
BancoRegistros (iRd) := signed (A) - signed (Numero) ;
when "lOO => -- ADD .
BancoRegistros(iRd) := signed(A) +
signad (BancoRegistros (
CalcRegLectura(SelRegLectura, RI) n;
when "101' => -- SUB
BancoRegistros(iRd) := signed(A) +
signed{BancoRegistros{
CalcRegLectura{SelRegLectura, RI)));
wben "110 "E.> -- ASR
BancoRegistros(iRd) :=
stQ_logic_vector(SHL{signed(A) ,
unsigned'(l)));
when "111' => -- ANO
BancoRegistros(iRd) := A and BancoRegistros(
CalcRegLectura(SelRegLectura, RI));
when others =>
null;
end case;
else
BancoRegistros(iRd) :=Datos;
end if;
if BancoRegistros(iRd) = cCero then
C ,- '1';
else
e ,- 'O';
end if;
tf BancoRegistros(iRd) (15) = '1' then
N ,- '1';
else
N ,- 'O';
end if;
end if;
end loop;
end process;
sistema como las referencias e interconexin de stas. Como hemos visto anterior-
mente, cuando se describe la estructura se describen con detalle las interfaces de ca-
da componente adems de su interconexin. Esto significa que una descripcin de
este estilo implicara que se dispone de abundante informacin de cmo es el siste-
ma y qu componentes lo componen.
Los componentes del sistema sern dispositivos comercialmente disponibles,
para los cuales ser posible obtener en algunos casos una descripcin VHDL pro-
porcionada por su fabricante. Adems, aun en el caso de que deban escribirse las
descripciones para cada componente, stas se escribirn de forma independiente del
componente a verificar, pensando tan slo en el comportamiento del componente
del sistema que se modela. La independencia de los modelos de los componentes
del sistema reduce la posibilidad de error, ya que el mismo modelo se habr utiliza-
do y depurado en distintos sistemas y se dificultarn los errores debidos a proble-
mas de interpretacin de especificaciones.
Por ejemplo, podramos decidir que en el sistema donde se ubicar nuestro pro-
cesador utilizaremos una memoria y un rbitro de bus comerciales de los cuales co-
nocemos su comportamiento al disponer de sus hojas de datos. En este caso los mo-
delos de la memoria y el rbitro de bus se realizaran de acuerdo a su hoja de datos
y de forma independiente al modelo del procesador. Los componentes se conecta-
dan tal como se indica en la Figura 5-6, realizndose para ello una descripcin es-
tructural.
El principal inconveniente de realizar un banco de pruebas que refleje la es-
tructura del sistema es la prdida de eficiencia en la simulacin. Por una parte, la
mayor cantidad de cdigo y procesos a simular, y por otra la mayor longitud de las
simulaciones, hacen que stas sean ms lentas que si no se hubiera detallado con
tanta precisin la estructura. La mayor longitud de las simulaciones con este tipo de
modelo es debido a que para aplicar determinados estmulos al componente a verifi-
car puede ser necesario llevar el resto de componentes del sistema a un estado de-
Memoria
1i
Controles i Datos t DireCCiones
PeticionBus
rbitro
Procesador de
BusLibre bus
de detalle con que sea necesario modelar el paralelismo en el entorno del compo-
nente a verificar para proporcionarle unos estmulos que se aproximen al mximo a
los que le proporcionara un sistema real.
La estructura de este tipo de banco de pruebas se muestra en la Figura 5-7,
donde diferentes procesos proporcionan estmulos al componente a verificar y reac-
cionan a sus respuestas, adems de coordinarse entre ellos mediante seales.
En algunos casos puede ser conveniente dar formato a los estmulos en ciclos,
de forma similar a como se introducen en las mquinas para el test de circuitos inte-
grados. Esto es til en el caso de que los estmulos de simulacin se quieran conver-
tir a vectores para la mquina de test o en el caso de querer realizar una descripcin
Banco de pruebas
Componente
a
verificar
funcional que, a nivel de ciclos de reloj, proporcione los mismos estmulos que una
descripcin estructural pero acelerando la simulacin al disminuir el nmero de
procesos que se ejecutan. En este ltimo caso se realizara una simulacin de la des-
cripcin estructural del sistema almacenando en un fichero los estmulos que se
aplican al componente a verificar en cada ciclo. Posteriormente se podra sustituir
el banco de pruebas estructural por un banco de pruebas mucho ms sencillo que le-
yera los estmulos de un fichero y los aplicara.
La aplicacin de estmulos segn ciclos de test o de reloj era normal antes de la
existencia de los HDLs modernos, cuando la descripcin de los estmulos se reali-
zaba con el lenguaje propio de cada simulador. El principal inconveniente de esta
tcnica es que no se puede realizar un banco de pruebas mnimamente inteligente,
que se adapte a posibles cambios en el componente igual como se adaptara el en-
torno real. Por ejemplo, cuando definamos una entidad para nuestro procesador y lo
separemos del resto del sistema, la memoria de datos y programas formar parte del
entorno del procesador y ser muy til describir el comportamiento de la memoria
de forma independiente al nmero de ciclos que el procesador tarde en realizar la
lectura y escritura de datos. De este modo ser ms prctico realizar un modelo que
tenga en cuenta las relaciones causa-efecto de las seales al interactuar con el pro-
cesador que no uno que se limite a aplicar estmulos en cada ciclo sin tener en cuen-
ta las salidas del procesador.
Modelo
Reloj -,--------,--+i de
referencia
Comparacin
Aplicacin ~----------_'I de OK
de resultados
estmulos (en cada ciclo)
Modelo
a
verificar
Anlisis
de
respuestas
independiente
del test
Generador Modelo t
de a
estmulos verificar ~
-
Anlisis
de
respuestas
dependiente
del test
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entlty BancoPruebas la
port (
Inicializa out std._logic;
Reloj out stQ_logic;
BusLibre out std_logic;
Datos inout stQ_logic~vector(15 downto O);
Direccion in stQ_logic_vector(7 downto O);
HabilitaMem in std_logic;
Escribe in std,_logic;
PeticionBus in std,_logic) ;
end BancoPruebas;
salidas del procesador. Una parte se encargar de generar la seal de reloj, otra de
generar la seal Inicializa, otra de la interaccin del procesador con la memoria
(proceso Memoria) y la cuarta controlar el acceso al bus del procesador (proceso
Arbi troBus).
La generacin de las seales Reloj e Inicializa es suficientemente simple
como para poder utilizar sentencias de asignacin concurrentes en lugar de proce-
sos. La nica dificultad estriba en que necesitaremos utilizar la seal Reloj a la de-
recha de la asignacin y no lo podremos hacer ya que es un puerto de salida. Para
estos casos podemos utilizar una seal interna (Reloj_I) en la cual generaremos el
reloj y posteriormente asignar esta seal al puerto de salida.
El proceso que realizar el papel de la memoria de datos y programas contiene
una inicializacin de las posiciones de memoria (variable Man) donde se introducen el
mismo programa y los mismos datos que se utilizaban en la descripcin funcional del
procesador. Con posterioridad a esta inicializacin, el proceso entra en un bucle para
realizar las funciones habituales de una memoria: cada vez que se activa la seal Ha-
bili taMem, realiza un ciclo de escritura o de lectura segn indique la seal
Escribe. En realidad, el proceso no se activa de acuerdo con la seal Habili taMem
sino con una seal homloga retrasada 10 ns (HabilitaMem'delayed(lO nsJ). De
esta forma es posible asegurar que las seales asignadas por el procesador (Direc-
cion, Escribe y Datos) estn estables cuando las lee este proceso.
Finalmente, el proceso Arbi troBus reacciona a las peticiones de bus por parte
del procesador activando la seal BusLibre. En el Listado 5-19 se muestra la arqui-
tectura Funcional del banco de pruebas.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_AR!TH.a1l;
begin
Memoria: process
variable Mero:tMemoria(O to 255);
begin
Mero(O) := "00010000000011510'; -' 101ID(2,b,lOP
294 VHDL. Lenguaje estndar de Diseo Electrnico
loop
Datos <= (othera => 'Z');
wait until HabilitaMem'delay.ed(lCtns} = '+,'i
if Escribe = 'l' then ",
Mem(Conv_integer(unsign~(ISirecdoI))l) :,,; Datos;
elae ., .. ,
Datos <= Mern(Canv~integer(unsigned(Direccion)));
wait until HabilitaMem'delayed(lG ns) '" '0';
end if;
end loop;
end procesa;
ArbitroBus: process
begin
BusLibre <= '0';'
wait unUl PeticioriBus = ' l' ;
BusLibre <= '1';
wait until PeticionBus = 'O';
end proceaa;
end Funcional;
Hasta el momento, el objetivo que se persegua con los diferentes modelos funcio-
nales descritos en los apartados anteriores era tratar de describir el funcionamiento
de nuestro sistema electrnico con una doble finalidad:
1. Especificar y documentar las caractersticas del sistema.
2. Simular los modelos para verificar la validez del diseo.
Sin embargo, a medida que pasemos a: refinar estos modelos funcionales debe-
mos tener bien claro cul es el objetivo de dichos modelos:
1. Disponer de una descripcin precisa de aquello que se pretende modelar.
2. Escribir una descripcin inteligible por las herramientas automticas de sn-
tesis, que generarn el circuito a partir de dicha descripcin.
La razn es bien sencilla. El VHDL, y en general los HDLs, fueron pensados
para facilitar la tarea del diseador de sistemas electrnicos; por tanto, se puso ms
nfasis en tratar de dotarlo de caractersticas como la flexibilidad que no en otras
que mejoraran las prestaciones de las herramientas asociadas.
Por lo que respecta a la simulacin, esto simplemente significa que, aunque se so-
portan todas las construcciones del lenguaje, algunas, o algunos estilos de modelado,
resultan bastante ineficientes desde el punto de vista del tiempo de simulacin.
En el caso de la sntesis, resulta un tanto ms crtico, puesto que el grado de
flexibilidad del lenguaje dificulta enormemente el trabajo a las herramientas auto-
mticas. En consecuencia, slo se permite utilizar un subconjunto de construccio-
nes, perfectamente definido, en los modelos que tienen como objetivo la sntesis
automtica. La consecuencia inmediata es que, si bien cualquier modelo para la sn-
tesis puede ser simulado, no todos los modelos simulables son sintetizables.
En resumen, a la hora de escribir modelos sintetizables habr que ceirse al
subconjunto de construcciones y estilos recomendados por las herramientas de sn-
tesis, mientras que si slo se trata de escribir un modelo simulable habr que tener
en cuenta ciertas recomendaciones que pueden mejorar el rendimiento del simula-
dor, aunque cualquier construccin est soportada.
loop
Leerlnstruccion;
Ejecutarlnstruccion;
wait lor 100ns;
end loop;
Ejercicio 5.1
Modelar un multiplexor 2 x 1 que verifique las siguientes caractersticas:
E11J-0 ... S
E2 1
tp e hasta S lOns
Solucin
En este caso existen dos tiempos de propagacin diferentes, en funcin de si el
cambio se produce en cualquiera de las entradas de datos o en la entrada de control.
El proceso combinacional mux comprueba en qu seal de entrada se ha producido
el evento, y asigna el valor a la salida con el retardo que corresponda. La funcin
CalculaDato es la que realmente implementa el comportamiento del multiplexor,
mientras que el cuerpo del proceso nicamente identifica la seal sobre la que se
produjo el evento y asigna el retardo en consecuencia. Note cmo no se ha tenido
en cuenta el caso de que se activen simultneamente una seal de datos y otra de
control. Esta comprobacin est implcita en el cdigo, puesto que como el tiempo
de dato es el mayor de los dos, se verifica en primer lugar.
library IEEE;
use IEEE.STD_LOGIC_ll64.all;
entity Multiplexor ie
port(
El, E2 : in std_logic_vector(l5 downto O);
C : in std_logic;
S : out std_logic_vector(15 downto O));
end Multiplexor;
functlan ealculaDato(
El, E2 ; in std,_logic_vector(15 downto O);
e ; in std_logicl
return std_logic_vector ls
begin
if (e = '1') then
return E2
e1se
return E1
end lf
end CalculaDato;
begln
if (El' event ar E2' event ) then
S <= ealcu1aDato(E1, E2, e) after TpoDato;
elee
S <= ealculaDatci(El, E2, e) after TpoControl
end if
end process Mux
end Funcional
Ejercicio 5.2
Escribir el modelo correspondiente al circuito de la Figura 5-11, reflejando la infor-
macin temporal incluida en la Tabla 5-5.
5. Modelado con VHDL 299
Y1
Y2
D-
E-
F------I
Solucin
El modelo del circuito consistir, por tanto, en una copia por referencia de las cinco
puertas ando A cada una de estas puertas se le pasar como parmetro los tiempos
de propagacin, que como puede verse dependen de su posicin en el circuito. La
frmula empleada consiste en sumar al tiempo base un retardo adicional, en funcin
del nmero de entradas extra a las que la puerta est conectada.
Para tener en cuenta los diferentes casos de simulacin: tpico, mnimo y mxi-
mo, las constantes de tiempo son vectores de tres tiempos, uno para cada caso de si-
mulacin. Segn sea este caso de simulacin, que se pasa como parmetro a la enti-
dad ejemplo, se elegir el tiempo correspondiente en el vector.
entity Ejemplo is
generie(
Caso tCaso := tipico);
port(
A, B, C, D, E, F in std._logic;
Y1 oot std_logic;
Y2 oot std._logic;
Y3 oot std._logic);
end Ejemplo;
canponent and2
generie (
tplh time;
tphl time) ;
port (
A, B : in std._logic;
y : out std._logic);
end eCJlll)Onent;
begin
AND_l: and2
generie map(AND2tplh(Caso) + AND2dtplh(Caso) .. 1,
AND2tphl(Caso) + AND2dtphl(Caso) .. 1)
port map(B, C, Nodo1);
AND_2: and2
generie map (AND2tplh(caso) + AND2dtpl.!1caso) .. 1,
AND2tphl(Caso) + AND2dtpni{caso) .. 1)
port map (D, E, Nodo2);
AND_3: and2
generie map (AND2tplh(Caso), AND2tphl (Caso) )
port map (A, Nodo1, n);
AND_4: and2
generie map(AND2tplh(Caso), AND2tphl{Caso
port map (Nodo1, Nodo2, Y2);
5. Modelado con VHDL 301
AND_S: and2
generic map (AND2tplh(casol I AND2tphl (caso))
port map (Nodo2, F, Y3);
end Estructural;
5.5.3. La comprobacin
,
de errores
Una de las ventajas de la utilizacin de los simuladores es que permiten poner de
relieve fcilmente los errores que se pueden producir, no slo de codificacin, sino
tambin en la concepcin del modelo. Por ejemplo, puede resultar que en un siste-
ma con un DMA se genere una direccin de memoria inexistente. O podemos haber
olvidado desactivar el acceso de un componente a un bus y tener en ste como re-
sultado un valor indeterminado. Para facilitar esta tarea, el diseador puede incluir
explcitamente en los modelos una serie de condiciones, que en caso de no verifi-
carse generarn mensajes de error durante la simulacin.
Ejercicio 5.3
Modelar la siguiente memoria ROM, incluyendo las comprobaciones necesarias
para asegurar que las direcciones son correctas antes de realizar una operacin de
lectura y escritura.
Habilita
8 Dato
ROM
8 I
Direccion
Solucin
La funcin Valido ser la encargada de 'comprobar que el valor almacenado en
Direccion es un vector formado nicamente por ceros y unos, es decir, representa
una direccin vlida. En caso de que la direccin no sea correcta en el momento de
recibir la seal de habilitacin se generar un mensaje de error explicativo.
302 VHDL. Lenguaje estndar de Diseo Electrnico
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE. STD_LOGIC..}IRITH. all ;
entity ejemplo3 is
port(
Habilita in std.._1ogic;
Direccion in stdJogic_vector (7 downto O);
Dato out std_logic_vector (7 downto al);
end Ejemplo3;
ROM: process
begin
end process;
end Algoritmica;
Seal 1
CargaRDM
CargaCP
CargaRI FuenteDireccin
CargaA
CargaN
CargaC
IncCP ..
HabilitaDireccin
d
e
C
SelCampo
o RI'3-11 (Rf_Rd)
n
Salto Evaluacin
de la
o Condicin
Opera
Cero Operacion
library IEEE;
use IEEE.STD~LOGIC_1164.all;
use work.PaqueteMR.all;
entity UAL ls
port(
A in stQ_logic_vector(cBitsDato-l downto O);
B in std_logic_vector(cBitsDato-l downto O);
Opera in std_logic;
Operacion in stQ_logic_vector(l downto O);
Resultado out stQ_logic_vector(cBitsDato-l downto O);
Negativo out stQ_logic;
Cero out std_logic);
end UAL;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_uoGIC_ARITH.all;
use work.PaqueteMR.all;
begin
process(A,B,Opera,Operacion)
variable ResultadoTemp std_logic_vector(cBitsDato-l downto O);
variable Retardo: time;
5. Modelado con VHDL 307
begin
end process;
end Funcional;
Dado el estado del arte de las herramientas de sntesis automtica que se co-
mercializan actualmente, el modelo anterior es prcticamente sintetizable. La ma-
yor parte de estas herramientas son capaces de reconocer las diferentes operaciones
complejas, tales como sumas, multiplicaciones, etc., de manera que a partir de ellas
308 VHDL. Lenguaje estndar de Diseo Electrnico
16 A B
Operar
1-{) '.--f-- Operacion
..
Negativo Resultado
dor, operador Y), de un multiplexor, que nos permitir elegir de qu mdulo obte-
ner el resultado final, en funcin del cdigo de operacin a realizar, y la lgica
necesaria para activar los indicadores. En este caso no incluiremos informacin
acerca de los retardos de las diferentes operaciones, puesto que se har en cada uno
de los diferentes mdulos.
Veamos a continuacin cmo el cdigo VHDL correspondiente al modelo es-
tructural refleja fielmente la particin de la figura anterior.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use work.PaqueteMR.all;
camponent Sumador
generic (
NumBits: natural);
port( A, B in stq_logic_vector(NumBits-l downto O);
Acarreo : out stq_logic;
Resultado: out stq_logic_vector(NumBits-l downto O)i;
end camponent;
camponent Restador
generic(
NumBits: natural);
port ( A, B in stq_lgic_vector(NumBits-l downto O);
Acarreo out stq_logic;
Resultado out std_logic_vector(NumBits-l downto O));
end camponent;
camponent Desplazador
generic (
NumBits: natural);
port ( A ... in stq_logic_vector(NumBits-l downto O);
Resultado: out stq_logic_vector(NumBits-l downto O));
end camponent;
camponent OperadorY
generic t
NumBits: natural);
310 VHDL. Lenguaje estndar de Diseo Electrnico
begin
-- Operaciones
Sumar: Sumador
generic map (cBitsDato)
port map (A, B, apen, Suma);
Restar: Restador
generic map (cBitsDato)
port map(A, B, apen, Resta);
Desplazar: Desplazador
generic map(cBitsDato)
port map (B, Desplazamiento);
OperarY: OperadorY
generic mep(CBitsrito)
port map (A, B, 'fL?9~ca);
-- Multiplexor
SelMux <= Opera & Operacion;
Mux8: Multiplexor8
ganerie map(cBitsDato)
port map (B, B, E, B, Suma, Resta, Desplazamiento, YLogica,
SelMux~:;ResultadoTeIlI ; .' i;
-- Indicadores
Negativo <= ResultadoTemp(cSitsDato-1);
Cero <= '1' wben ResultadoTemp = 0" else
'O' ;
end Estructural;
se se
Resultado Resultado
libraxy IEEE;
use IEEE.STD_LOGIC_1164.all;
use work.PaqueteMR.all;
312 VHDL. Lenguaje estndar de Diseo Electrnico
entity SumadorCampleto 1a
port ( A,B in std_logic;
AcarreoE in std,_logic;
Resultado out std....logic
AcarreoS out std_logicl;
end SumadorCompleto;
begin
end FlujoDeDatos;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
camponent SurnadorCompleto
port(
A,B in std,_logic;
AcarreoE in std,_logic;
Resultado out std_logic;
AcarreoS out std,_logic);
end CCJDpOOeOt;
beg1n
end Ripple;
Tiempo(Resultado) = 2 * TpoXor
Tiempo(Acarreo) = TpoXor + 1POAO,
donde TpoAO > 'lPoXor.
A partir de estos clculos es inmediato deducir que el camino crtico en el su-
mador ser el que va desde el acarreo de entrada hasta el de salida, pasando por los
16 sumadores completos. El tiempo total, tanto para el clculo del Resultado como
del Acarreo, puede expresarse de la siguiente manera:
Aj Bj Cj
O O O
O 1 Cj+1 propagacin
1 O Cj+1 propagacin
1 1 generacin
Gj =Aj and B,
Pj =Aj xor B,
INCRUSTAR
Resultado'5-'2 A'5-'2 8'5-'2 Resultado"_8 A"_8 8"_8 Hesultado., A7_4 87-4 Resultado3-Q A3-Q83-Q
do, calculado a partir de la ecuacin (*). En este caso, cada bloque CIA obtiene los
valores del acarreo de un grupo de cuatro bits, por lo que en total son necesarios
cuatro bloques en un primer nivel (4 bloques*4 bits = 16 bits), ms un ltimo CIA,
responsable de calcular por anticipado el acarreo que toma como entrada cada blo-
que del primer nivel.
El Listado 5-28 contiene el cdigo VHDL correspondiente al bloque CIA. El
Listado 5-29 modela el sumador, utilizando el componente CIA anterior. Observe
cmo, por simplicidad del modelo y eficiencia, los bloques P&G y Suma no han
sido implementados tal cual aparecen en la figura. En su lugar, el clculo de la pro-
pagacin y generacin de acarreo, y el clculo de la suma, se efecta mediante la
operacin lgica correspondiente. El cdigo obtenido es absolutamente equivalente.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity CLA is
generic(
NumBits : integer := 4);
port(
G in std_logic_vector(NumBits-l downto O);
P in stq_logic_vector(NumBits-l downto O);
AcarreoE in std~logic;
GG out std._lcijic;
AcarreoS out std_ioglc,;"vector(NumBits-l downto O)';
end CLA;
begin
CLA: process(G, P)
variable PTenp, GTenp std_logic;
variable AcarreoTenp std_logic;
begin
PTenp := P(O);
GTemp := G"{O);
AcarreoTemp : = AcarreoE;
AcarreoS (O) <= AcarreoE;
for i in 1 to NumBits-l loop
PTenp := PTenp aDd P(i);
GTeI1il := G(i) or (GTeI1ilaDd P(i;
AcarreoTenp : = G(i -1) or (AcarreoTemp and P (i -l ;
AcarreoS (i) <:; ,AcarreoTerrq:;
end loop;
GC <= GTenp;
GP <= PTenp;
end process CIA;
end Funcional;
library IEEE; . ,
use IEEE.STD_LOGIC_1164.all;
arehitecture CLA of Sumador is
eOlli>OnentCIA
generlc (
NumBits : lnteger := 4);
port(
G in stCLlogic_vector (NumBits-l downto O);
P in stCl.logic_vector(NumBits-l downto O);
AcarreoE in stCLlogic; . , ,
GG out stCLlogic;
GP out stCLlogic;
AcarreoS out std.._logic_vector(NumBits-l downto O));
end cClllPOnent;
signal G, P ,. st<l_logic_vector(NumBits-l downto O);
signal GG std_logic_vector(NumBits/4-1 downto O);
signal GP sfd_logic_vector(NumBits/4-1 downto O);
signal GC stCLlogic_vector'(NumBits/4-1 downto O);
signal AcarreoG stCl.logic_vector(NumBits-l downto O);
signal Cero std_logic := 'O';
begin
-- Clculo de las etapas de generacin y propagacin
G <= A and B;
P <= :xor B;
end CIA;
librazy IEEE;
use IEEE.STD~LOGIC_1164.all;
use work.PaqueteMR.a11;
entity BancoRegistros is
port(
Reloj in std_logic;
Inicializa in std_logic;
DatoEscritura in std_logic_vector(cBitsDato-1 downto O);
EscribeRegistro in std_logic;
SelRegLectura in std_logic_vector(2 dowoto O);
SelRegEscritura in std_logic_vector(2 downto O);
DatoLectura out std_logic':'_vector(cBitsDato-l downto O)
);
end BancoRegistros;
En este caso la respuesta del modelo a la seal Inicializa ser de tipo asn-
crono, puesto que no depende del estado del reloj. Para modelarla como una seal
sncrona sera suficiente con preguntar por su estado dentro de la condicin que
comprueba si ha habido un evento en el reloj, en lugar de hacerlo antes, como en el
listado. Utilizando este esqueleto, completemos la arquitectura funcional de nuestro
banco de registros.
librazy IEEE;
use IEEE.STD_LOGIC_1164.a11;
use IEEE. STD_LOGIC_ARITH .aH ;
use work.PaqueteMR.a11;
320 VHDL. Lenguaje estndar de Diseo Electrnico
begin
end Funcional;
En nuestro caso la inicializacin del banco, que tendr lugar cuando la seal
Inicializa tome el valor '1', consistir en un bucle que asignar el valor Oa todos
los registros. Puesto que se trata de un banco de registros, no es necesario realizar
ningn clculo sobre el valor a almacenar, que directamente ser DatoEscritura.
Sin embargo, obsrvese que antes de verificar si se ha producido un evento de reloj,
para almacenar el valor en el registro correspondiente, se comprueba el estado de la
seal EscribeRegistro. La razn es que esta seal es ms prioritaria que el reloj,
puesto que no hay asignacin si no est activada.
En nuestro modelo aparece adems una asignacin concurrente, que simple-
mente se encarga de asignar como dato de salida del banco el contenido del regis-
tro, indicado por SelRegLectura. A esta asignacin se le ha asociado un retardo
fijo TpoRegistro, que pretende modelar el tiempo empleado en leer el dato del
registro que corresponda.
library IEEE;
use lEEE.STD_LOGIC_1164.all;
entity UProceso 18
port (
Reloj : in std._logic;
Inicializa : in std_logic;
-- Control de la UAL
Opera : in std_logic;
-- Indicadores
CodigoOp out std_logc:,:"vctor(l downto O);
Salto e out std_logic;
322 VHDL. Lenguaje estndar de Diseo Electrnico
-- Memoria
Direccion out std...logic,_vector(<;Bit,SDirecqion-1 downto O);
Datos inout std...logic_vectorlcBitsDirecci0I1-1 downto O));
end UProceso;
-- Declaracin de componentes
CCJll)O!leIlt UAL
end component;
component BancoRegistros
end component;
-- Registros especficos
signal A std...logic_vectorlcBitsDato-1 downto O);
-- Registro Acumulador
-- Seales temporales
signal B : std...logic_vectorlcBitsDato-1 downto O);
begin
-- Lgica adicional
end FlujoDeDatos;
-- Registro de instrucci6n
rRI: process{Inicializa,Reloj)
begin
if (Inicializa = '1') then
RI <= (others => 'O');
elsif (Re1oj'event and Reloj 'g') then
if (CargaRI = ' 1') then
RI <= Datos;
end if;
end if;
end process rRI;
-- Registro de direccin
rROM :process(Inicializa,Reloj)
begin
if (Inicializa = '1') then
ROM <= (otbers => 'O');
elsif (Reloj'event and Reloj = 'O') then
if (CargaRDM = ' 1') then
ROM <= unsigned(RI (7 downto O)) + unsigned(Rx(7 downto O));
end if;
end if;
end process rRDM;
-- Registro Acumulador
rA :process(Inicializa,Reloj)
begin
if (Inicializa = '1') then
A <= (otbers => 'O');
elsif (Reloj'event and Reloj 'O') then
if (CargaA = '1') then
A <= Rx;
end if;
end if;
end process rA;
-- Registro C
rc: process(Inicializa,Reloj)
begin
if (Inicializa = '1') then
C <= '0';
elsif (Reloj'event and Reloj '1') then
if (CargaC = '1') then
C <= Cero;
end if;
end if;
end process rC;
-- Registro N
rN: process(Inicializa,Reloj)
begin
if (Inicializa = '1') then
N <= 'O';
elsif (Reloj'event and Reloj - '1') then
if (CargaN = '1') then
N <= Negativo;
end if;
endif;
end process rN;
-- Evaluacin de la condicin
EvalCond:process(Condicion,Negativo,Cero)
variable Resultado : std_logic;
begin
Resultado := 'O';
case Condicion is
when '000 => Resultado := 'l'L,-'" BR
when '001"1"101" => Resultado := Cero; .;..B~
when '0101"110 => Resultado := Negativo; -- BL
when '011" => Resultado := Negativo ar Cero; -- BLE
when "101" => Resultado := not Cero; -- BNE
when "110 => Resultado := not Negativo ar Cero; -- 1lOE
when "U1" => Resultado := Negativo and Cero; -- BG
when others => Resultado .- 'X';
end case;
Salto <= Resultado;
end process EvalCond;
La Unidad de Control es la encargada de sincronizar todas las tareas que deben rea-
lizarse para ejecutar las instrucciones sobre la unidad operativa. Nos referimos a es-
tas tareas elementales que conforman cada instruccin como microoperaciones, de
manera que la ejecucin de una instruccin consistir simplemente en llevar a cabo
la secuencia de rnicrooperaciones que le corresponda.
En nuestro caso, el control de la ejecucin de las diferentes microoperaciones
se realizar mediante una serie de seales de control sobre la unidad de proceso, el
bus del sistema y el rbitro de bus. Adems, su secuenciamiento depender de la in-
formacin de estado proporcionada por la unidad de proceso, en forma de seales
de entrada, tal y como muestra la Figura 5-19.
A partir de la figura anterior puede determinarse el cdigo VHDL correspon-
diente a la entidad de la Unidad de Control (Listado 5-38), y cuya funcionalidad
modelaremos en los siguientes apartados.
5. Modelado con VHOL 327
CargaRDM
CargaCP
rbitro de BusLibre CargaRI
Bus PeticionBus CargaA
CargaN
CargaC
Unidad de Unidad de
IncCP
Control proceso
Opera
EscribeRegistro
SelCampo
FuenteDireccin
HabilitaDireccin
I AWnwri, F Escribe
HabilitaMem
HabilitaDatos
Salto
CodigoOp
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity UControl is
port (
Reloj in std_logic;
Inicializa in std_logic;
-- Estado de la UP
CodigoOp in std_logic_vector(l downto O);
Salto in std_logic;
-- Microoperaciones
CargaRDM out std_logic;
CargaCP out std_logc;
CargaRI out std_logc;
CargaA out std_logc;
IncCP out std_logic;
CargaN out std_logic;
CargaC out std_logic;
end UControl;
2 Se llega a este estado cada vez que finaliza la ejecucin de una instruccin o se produce una
Bl : BusLbre
CO : CodigoOp
S : Salto
1 2 3 4 5 6 7 8
Carga A O O O O O O 1 O
CargaC O O O O O O O 1
CargaCP O O O O O 1 O O
CargaN O O O O O O O 1
CargaRDM O O 1 O O O O O
Carga RI O O O O O O O
IncCP O 1 O O O O O O
EscribeRegistro O O O O O O 1
SelCampo Rd Rfl_Rx Rf2
Opera O 1
HabilitaDatos O O O O 1 O O O
HabilitaDireccion O 1 O 1 1 O O O
Escribe Z Z Z Z 1 Z Z Z
PeticionBus 1 O O O
library IEEE;
use IEEE.STD_LOGIC_1164.all;
begin
end case;
end process Combinacional;
Secuencial: process(Reloj,Inicializa)
begin
if (Iniciali~ = '1') then
Estado <= SolicitaBus;
e1sif (Reloj'event and Reloj '1') then
Estado <=SiguienteEstado;
end if;
end process Secuencial;
end Funcional;
'O' CargaCMP
Salto
CodigoOp'
'1 '
Memoda de
Control
22 21 20 19 15 14 o
SelSigDireccion SelCondcion SigDreccon Microordenes
Micrordenes SelSigDireccion
Direccin Microinstruccin
library IEEE;
use IEEE.STD_LOGIC_1164.a11;
use IEEE. STD_LOGIC_ARITH .all ;
use work.PaqueteMR.all;
-- Instruccin OPERAR
'01010011000000000000001' , ,..,.:
lilQP1.Si BusLibre salt.a a 10011
'00000000000001100000101', ~..1001.{)Busca instruccin
'00000000100000000100000', -- 10011. Lee operando
'10000000010100011010000~, -- 10100 Ejecuta operacin
others => 00000000000000000000000');
component ROM
generie (
BitsDireccion natural;
BitsDato natural;
Contenido tContROM) ;
port(
Habilita in stcLlogic;
Direccion in stcLlogic_vector(BitsDireccion-1 downto O);
Dato out stcLlogic_vector(Bitstlato-1 downto O));
end eaoponent;
begin
ROM_VC: ROM
generie map (
BitsDireccion =>'cBitsDirROM,
BitsDato => cBitsDatoROM,
Contenido => Microprograma)
port map(
Habilita => UnUno,
Direccign => DirSigMicroinst,
Dato c. =:>Microinstruccion)
e i
RegistroRMIC: proceas(Inicializa,Reloj)
begin
if Inicializa = '1' then
RMic <= (others => 'O');
elee
RMic <= Microinstruccion;
end if;
end process RegistroRMic;
ContadorMP: process
subtype tContador is integer ranga O te 2**cBitSDirROM;
constant Tope: integer:= 2**cBitsDirROM;
variable Valor : tContador;
begin
wait until Inicializa = '1';
loop
if Inicializa = '1' then
Valor := O;
end lf;
wait until (Reloj'event and Reloj '1') or (Inicializa = '1');
next when Inicializa = '1':
case Valor ia
when Tope => Valor := O;
5. Modelado con VHDL 339
-- Secuenciador
Secuenciador: process
begin
case SelSigDireccion ls
when SALTAR',,>
case SelCondicion ls
wben "OO' =>
DirSigMicroinst <= CMP;
wben 01" =>
lf (salto'= 'r') then
DirSigMicroinst <= SigDireccion
else
DirSigMicroinst <= CMP;
end if
wben "la" =>
if (BusLibre' = '1') then
DirSigMlcr61nst <= SigDreccion
else
DirSigMicroinst <= CMP
end if
wben "11" =>
DirSgMicroinst <= SigDireccion;
when others =>
DrSigMicroinst <= (others => 'X')
end case
when CODlGO_OP =>
DrSgMicroinst <= "000" & CodigoOp;
when others => "
DirSigMicroinst <= (others => 'X')
end case;
end process Secuenciador;
Para completar nuestro sistema ser necesario disponer tambin un modelo para la
memoria de programas. Sin embargo, puesto que las memorias son un componente
habitual de todo tipo de sistemas electrnicos, realizaremos un esfuerzo extra en
dos direcciones:
Por un lado, se tratar de que el modelo sea suficientemente general como
para que pueda ser aprovechado sin mayor esfuerzo en otra situacin. Para
ello se pasar como parmetros al modelo toda aquella informacin que pro-
porcione esta generalidad: espacio de direccionamiento, ancho de la palabra
a almacenar, valores temporales, etc.
Por otro lado, se intentar reflejar con la mxima fidelidad su comportamien-
to real, para lo cual nos basaremos en una hoja de datos de una memoria
RAM tpica.
El objeto de este modelo no ser el de la fabricacin de esta memoria tras una
serie de etapas de refinamiento, puesto que dispositivos generalmente se adquieren
de uno de los mltiples proveedores. Sin embargo, ser necesario para poder rea-
lizar una simulacin realista del entorno en el que estar integrado nuestro disposi-
tivo (la Mquina Rudimentaria en nuestro caso). Por estas razones, el modelado de
este tipo de componentes estar nicamente enfocado a poder realizar una simula-
cin eficiente.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity RAM is
generic (
Palabras integer .- 8; -- Nmero de palabras
BitsDir integer .- 3; Nmero de lneas de direccin
BitsPalabra integer .- 8; -- Nmero de bits por palabra
Fichero string .- "ram.txt"; -- Contenido de la memoria
TEstablDir: time .- O ns; Establecimiento de la direccin
TMantDir: time .- O ns; Mantenimiento de la direccin
TPulsoL: time .- O ns; Pulso mnimo de lectura
TPrecarga: time .- O ns Precarga mnima de la memoria
TPulsoE: time .- O ns; Pulso mnimo de escritura
TEstablL: time .- O ns: Establecimiento de la seal de lectura
TMantL: time .- O ns : -- Mantenimiento de la seal de lectura
TEstablE: time .- O ns; -- Establecimiento de la seal de escritura
TMantE: time .- O ns: -- Mantenimiento de la seal de escritura
TAcceso: time .- O ns; -- Acceso para lectura
TDatoValido: time .- O ns; -- Dato vlido
TEstablDato: time .- O ns; -- Establecimiento para escritura
TMantDato: time .- O ns); -- Mantenimiento despus de escritura
port(
HabilitaMem in std_logic;
Escribe in std_logic;
Direccion in std_logic_vector(BitsDir - 1 downto O);
Dato inout std_logic_vector(BitsPalabra - 1 downto O)) ;
end RAM;
Memoria:process(Escribe,HabilitaMem,Dato)
begin
for i in O to Palabras-l loop
Memoria(i) := O;
end loop;
end Inicializa;
begin
While not endfileIF) loop
iDireccion := ';
redl ine W, Linear;
LeeHexadecimaltrich~io, Linea, 2, iDitecciol);
read(Linea,Caracter);
if (Caracter'!:i" ') then
aeeert false
report "Error de sintaxis en el,fichero: & Fichero
severity failure;
end if;
LeeHexadecimal(Fichero,Linea,4,Memoria(iDireccion;
end loop,
end CargaFichero; .
begin
if Inicializacion then
Inlcializa(Memoria) ;
CargaFichero(Memoria,Fichero);
Inicializacion := FALSE;
Dato <= (othere => 'Z'),
end if;
if HabilitaMem'event tben
if HabilitaMem = '1' and Escribe = '1' tben
Dato <= conv_std_logic_vector(.Memoria(conv_integer
(unsigned(Direccion)))) BitsPalabra) after TAcceso;
eleif HabilitaMem = 'O' or HabilitaMem = ~Z' then
if Escribe = '1' or Escribe = 'Z' then i
Dato <= (othere => 'Z') after TDatoValido;
elee
344 VHDL. Lenguaje estndar de Diseo Electrnico
cOIlV_integer(unsigned(Dato
endif;
endif
endif;
end process Memoria
procedure VEstablecimiento(
signal Senyal: in std_logfC
constant NombreSenyal: in string
signal SenyalRef: in stCl_logic
constant NombreSenyalRef: in string
constant Cond.c.om' in boolean;
constant TiempoEstabl: in time) 18
begin
if SenyalRef'event and Condicion then
assert ((now - Senyal'last_event) >= TiempoEstabl)
report 'Violacion de setuP en & Nambre6enyal &
"respecto a' & NombreSenyalRef
5. Modelado con VHDL 345
severity warning;
end if;
end VEstablecimiento;
VCiclos: process(HabilitaMem)
begin
if HabilitaMem'event then
if HabilitaMem " '1' then
VCiclo(HabilitaMem, "HabilitaMem",TPrecarga,O ns);
else '
if (Escribe =
'1') then
VCiclo(HabilitaMem, "HabilitaMem' ,O ns, TPulsoLl ;
elee
VCiclo(HabilitaMem, "HabilitaMem', O ns, TPulsoE);
end if;
end if;
end if;
end process vci~ls_
-- Establecimiento
if Direccion' event then
VMantenimiento (Dir~ion, "Direccion' ,liabilitaMern, "liabili taMell\' ,
,' D.recci.on
:~.:~p-. j _
..; : '.
' stable, .'IMantDir)-_i
end if;
-_ Mantenimiento
if HabilitaMem'event aIId HabilitaMem = '1' then
~tablecimiento (Direccion, Direccion ,HabilitaMem, "HabilitaMem' ,
, D~r~ccion'stal:>le,TEstablDir); .
end if;
end process VDir;
-- MaItenWento
if Dato' eVent aIId sscrbe 'O' then
VManteniinierito (Dato, "Dato' ,iIabilitaMem, "HabilitaMem' ,Dato' stable,
TM.!lntDatoJ;
end if;
346 VHDL. Lenguaje estndar de Diseo Electrnico
-- Establecimiento
if HabilitaMem'event and Escribe = 'O' then
VEstablecimientoWato, "Dato" ,HabilitaMem, "HabilitaMem",Dato'stable,
TEstablDato) ;
end if;
end process VDatoS,
5.6. EJERCICIOS
6. Las funciones del procesador que se repiten cclicamente, como los accesos al
bus de memoria, tienen una relacin causa-efecto y un orden en la activacin
de las seales que deben cumplirse para todos los ciclos. En estos casos es fcil
escribir un proceso en el banco de pruebas que verifique estas propiedades.
Escriba un proceso pasivo, es decir, que no asigne ninguna seal sino que slo
las lea, que compruebe los accesos a memoria del procesador.
7. Escriba un proceso similar al del ejercicio anterior pero que verifique que des-
pus de una instruccin de LOAD se realiza una lectura a memoria y que
despus de una instruccin de STORE se realiza una escritura. Para ello ser
necesario que el proceso observe las instrucciones que pasan por el bus de
datos hacia el procesador y pueda distinguir el tipo de instruccin.
12. Utilice un solo proceso para modelar la memoria RAM de programas, en el que
se incluya tanto la funcionalidad como la verificacin temporal. Simule el siste-
ma y compruebe cmo la reduccin del nmero de procesos mejora el rendi-
miento.
5.7. BIBLIOGRAFA
Un error conocido
es una victoria ganada.
Annimo
349
350 VHDL. Lenguaje estndar de Diseo Electrnico
6. 1. INTRODUCCIN
Aunque la realidad no dista mucho del esquema arriba mostrado, s lo hace en pun-
tos de vital importancia, que suelen dar al traste con lo que sera un proceso de dise-
o fluido y sin complicaciones.
Por un lado, las especificaciones nunca son estables. A menudo la idea del di-
seo sufre cambios a lo largo del proceso de desarrollo que obligan a rehacer parte
del diseo. Por otro, no es frecuente que el diseador disponga de modelos simula-
bles del entorno, lo que le obliga a desarrollarlos, duplicando el trabajo y las fuentes
de errores. Adems, la complejidad alcanzada en los diseos actuales hacen ne-
cesaria una importante tarea adicional de gestin global del diseo que hasta ahora
se daba en contadas ocasiones. Los equipos de diseo que es necesario coordinar
suelen ser mayores y, a menudo, formados por personas que trabajan en distintos
centros.
La misma complejidad de los circuitos obliga a hacer unos bancos de prueba
cada vez mas sofisticados. La propia validacin de la funcionalidad se vuelve una
tarea compleja debido al gran nmero de modos de funcionamiento de los circui-
tos y de solicitaciones a los que se les somete. El tiempo de simulacin se con-
vierte entonces en uno de los principales problemas para el diseador, que tiene
que esperar a que terminen largas simulaciones para analizar los resultados. Es
frecuente, como ocurre en el caso del diseo de un microprocesador, que el mode-
6. La gestin del diseo 353
lo de simulacin del circuito tenga que ejecutar largos programas en un entorno vir-
tual para verificar sus respuestas ante situaciones que de otra manera seran difciles
de comprobar (p. ej., cmo responde un microprocesador a un sistema operativo
multitarea).
Adems, la integracin de las herramientas bajo un mismo entorno no slo deja
que desear, sino que, en muchos casos, est desapareciendo como concepto. Actual-
mente, distintos vendedores de CAD estn ofreciendo herramientas que cubren dis-
tintas partes del proceso de diseo; especificaciones, diseo arquitectural, sntesis,
diseo fsico, etc. La tendencia actual es que estas diferentes herramientas inter-
cambien informacin entre ellas a travs de un lenguaje comn (VHDL o Verilog
en la mayora de los casos), pero esto es algo que dista mucho de estar completa-
mente resuelto. Generalmente, los subconjuntos del lenguaje que entienden unas y
otras herramientas no son los mismos, teniendo que realizarse tediosas tareas de tra-
duccin para intercambiar informacin entre ellas. En estos casos, se dificulta an
ms la retroanotacin de las modificaciones hechas en una etapa posterior del pro-
ceso de diseo sobre los datos de etapas anteriores.
Por ltimo, puesto que los circuitos electrnicos ya no aportan, de por s, valor
aadido a un producto, sino que es su funcionalidad la que les da ese valor, el cos-
te de diseo se ha vuelto un factor importante en el coste final del producto, coste
que es necesario reducir. Esto obliga a reutilizar parte de los diseos realizados, lo
que, a su vez, requiere poner un cuidado especial en la manera de disear. Los di-
seos deben realizarse de forma que otros diseadores puedan entenderlos y modi-
ficarlos con poco esfuerzo para adaptarlos a sus necesidades. Esto requiere tam-
bin que se preste una atencin especial a la documentacin del diseo, que acaba
siendo un porcentaje no despreciable del tiempo dedicado al desarrollo de un dis-
positivo.
En el presente apartado se plantea, en primer lugar, lo que podra ser un flujo de di-
seo tpico aplicado al desarrollo mediante VHDL y herramientas de sntesis lgica,
describiendo brevemente las tareas a realizar en cada etapa. A continuacin se entra
en detalle en cada una de las etapas que componen el proceso de diseo. Se mues-
tran cules son los objetivos de cada etapa y cmo llevarlos a cabo, pormenorizan-
do los problemas que a menudo aparecen durante el diseo. Se presta especial aten-
cin a los procedimientos para controlar que en cada etapa se realicen las tareas
adecuadas y que no se omitan pasos que luego pudieran obligar a una vuelta atrs.
Como se ha explicado en la introduccin al captulo, la documentacin del diseo
es un aspecto crucial en el desarrollo de cualquier proyecto, por lo que es tratada
con cierta profundidad.
Se ha procurado mostrar, mediante ejemplos concretos, cmo aplicar las re-
comendaciones dadas al desarrollo de un circuito, especialmente cuando estas reco-
mendaciones afectan a la escritura del cdigo VHDL o a su sntesis. Los ejemplos
mostrados se han llevado a cabo utilizando herramientas de simulacin y sntesis
comerciales, y podran no ser aplicables en todos los casos. De cualquier manera,
stos deben servir como gua para que el lector adquiera una visin general de los
problemas y de cmo solucionarlos; la adaptacin de estos ejemplos a sus herra-
mientas concretas no debe suponer un gran esfuerzo.
Conviene tener en cuenta que la aplicacin de un flujo de diseo requiere un
esfuerzo adicional al puramente tcnico. Es necesario valorar la complejidad del
circuito antes de considerar la aplicacin de los procedimientos que se muestran en
este apartado. El diseo de un circuito pequeo (2.000 o 3.000 puertas), realizado
por un solo diseador, puede no requerir este tipo de procedimientos, aunque siem-
pre es conveniente llevar un cierto control sobre el proceso. En un diseo algo ms
grande (10.000 a 20.000 puertas), generalmente llevado a cabo por ms de un dise-
ador, la aplicacin de estos mecanismos suele aportar ms ventajas que inconve-
nientes. Por ltimo, en diseos mayores o crticos, donde el nmero de participantes
y complejidad aumenta, el seguimiento detallado de un flujo de diseo es la nica
manera de llevar a buen trmino el desarrollo.
6. La gestin del diseo 355
:"" - -- -- -- _. -...t
te todas las etapas, entrando y saliendo de cada una de ellas tras un proceso de revi-
sin, implicara en este caso un coste excesivo, por lo que es necesario plantearse
un flujo de diseo algo ms flexible que permita entrar en una etapa sin haber ter-
minado la anterior. As, podramos empezar con el diseo fsico de alguna parte del
circuito sin haber siquiera completado la etapa de diseo arquitectural (o incluso
antes). De esta manera podramos hacernos una idea del coste final del circuito,
ajustando la funcionalidad a la vista de los resultados.
La Figura 6-2 muestra grficamente esta idea. El grado de solapamiento y la
duracin de las etapas vara segn cada proyecto. Tambin puede apreciarse una ta-
rea global de gestin, que discurre a lo largo de todo el proyecto, y que no estaba
explcita en el flujo de diseo de la Figura 6-1. Disponer de un flujo de diseo flexi-
ble facilita la resolucin de estos problemas, aunque debe existir un cierto compro-
miso entre flexibilidad y control del proceso de diseo.
Un ltimo aspecto importante del flujo de diseo es que permite, cuando se de-
sarrollan circuitos de forma habitual, detectar dnde estn los problemas y corregir-
los en futuros proyectos. Al realizar siempre las mismas etapas y tareas, se pueden
ir identificando aquellos procedimientos que no dan buenos resultados y modificar-
los para corregir sus defectos. Lo importante, entonces, de un proceso de diseo no
es tanto lo bueno que resulte, sino que pueda reproducirse y corregirse en aquellos
puntos donde no funcione -.
Por ltimo cabe destacar que, en todo flujo de diseo, es necesario buscar los
procedimientos para automatizar, en el mayor grado posible, las tareas a realizar.
Como se ha visto, la mayora de las tareas que se llevan a cabo son cclicas; se repi-
ten una y otra vez hasta alcanzar el resultado deseado. Este proceso cclico es mu-
cho ms acusado durante las etapas de diseo arquitectural, lgico y fsico. En estos
casos es especialmente importante disponer de mecauismos de automatizacin de
las tareas. Durante la etapa de diseo arquitectural, por ejemplo, es muy convenien-
te tener mtodos para realizar la compilacin del cdigo VHDL, su simulacin y
D~se~oarquitectural
Fabricacin I
I Validacin
El desarrollo de los requisitos es, generalmente, una tarea poco formalizada. Depen-
diendo del tipo de proyecto, las caractersticas del circuito pueden estar muy poco
definidas o, por el contrario, pueden conocerse con bastante detalle.
El primer caso responde, normalmente, al desarrollo de un producto nuevo. El
circuito formar parte de un sistema que an est poco definido y que, por tanto, '
puede' modificarse segn sea necesario. Un caso tpico podra ser el circuito para
controlar el expendedor de latas de refresco del ejemplo mostrado en el Apndice 1.
360 VHDL. Lenguaje estndar de Diseo Electrnico
Las funciones que realice el circuito dependern no slo de las necesidades funcio-
nales, sino tambin de coste final y la facilidad de desarrollo. As, por ejemplo, po-
dramos pensar que el expendedor de refrescos pudiese incluir una pantalla de visua-
lizacin donde mostrar los precios ms o menos compleja, aceptar ms o menos ti-
pos de monedas o que pudiera expedir ms de un tipo de producto en una sola opera-
cin (jsi se ha introducido suficiente dinero, claro est!). Escoger una solucin u otra
depende de multitud de factores, y generalmente requiere un anlisis de viabilidad
tcnica y econmica complicado para encontrar la mejor solucin. Este anlisis no
slo incluir los aspectos relacionados con el circuito a desarrollar, sino tambin los
relacionados con el coste de los dems elementos del sistema, la facilidad de fabri-
cacin, la funcionalidad de nuestra mquina respecto a otras que existan en el merca-
do, etc. El desarrollo de los requisitos consistir entonces en un proceso cclico en
donde la idea inicial se va depurando en funcin de los anlisis que se vayan reali-
zando. El principal objetivo en este caso es identificar, a grandes rasgos, cul es la
funcionalidad bsica que debe realizar el circuito y plasmarla en un documento ini-
cial de trabajo que pueda servir de base para el desarrollo de las especificaciones.
Ms sencillo resulta el desarrollo de los requisitos en el caso de un circuito cu-
yas condiciones de contorno estn ms definidas. Volviendo al ejemplo del expen-
dedor de refrescos, podramos querer desarrollar un circuito para controlar una m-
quina que admitiese cinco tipos de monedas (25, 50, 100,200 y 500 pesetas), cuatro
tipos de refrescos (cola, tnica, naranja y cerveza), cuyos precios pudiesen fijarse
mediante cuatro pulsadores exteriores (evidentemente slo accesibles por el dueo
de la mquina) en unidades de 25 pesetas y que admitiese hasta un mximo de 50
latas por producto. Los precios podran mostrarse mediante un visualizador de tres
dgitos de siete segmentos y los clientes dispondran de cuatro pulsadores para se-
leccionar el producto y un pulsador para la devolucin de monedas. En estos casos
el desarrollo de los requisitos requiere un anlisis menos detallado, puesto que la
funcionalidad bsica est definida.
En cualquier caso, los requisitos deben plasmar en un documento no slo la fun-
cionalidad del circuito, sino tambin el coste estimado del circuito a desarrollar, el
tiempo de desarrollo, su tamao y caractersticas tecnolgicas, como son la tensin
de alimentacin, consumo, temperaturas mximas y mnimas que debe soportar, etc.
Todos estos aspectos quedan recogidos en el Documento de Requisitos, que ac-
ta como texto base para iniciar el proyecto. Si la empresa que va a realizar el pro-
ducto (la mquina de refrescos) no dispone de centro de diseo, este documento se-
r distribuido entre varios centros de diseo para que hagan una evaluacin tcnica
y econmica del circuito a desarrollar y oferten un presupuesto a travs de una Pro-
puesta de Desarrollo. Esta propuesta incluye normalmente un plan para el desarro-
llo del circuito, una descripcin de la funcionalidad de la propuesta presentada, una
estimacin del tiempo de diseo y del coste del desarrollo, estimaciones sobre el
coste final del producto, posibles modificaciones a los requisitos del cliente, etc. En
funcin de esta propuesta el cliente escoger el centro de diseo que ms le satisfa-
ga para llevar a cabo el desarrollo.
La Tabla 6-1 muestra los aspectos fundamentales que deben quedar definidos
en el Documento de Requisitos, mientras que la Tabla 6-210 hace para la Propuesta
de Desarrollo.
6. La gestin del diseo 361
Documento de requisitos
Propuesta de desarrollo
library ACME;
use ACME.TiposBasicos.all;
entity mi_circuito is
port (
Evento in bit;
Inicia in bit;
Reloj in bit;
Salida out inteqer
)
begin
Pruebareloj(Reloj)
ead mi_circuito
Cuenta : process
begin
wait until Evento = '1' ar Inicia = 'O'
if Inicia = '0' tben
AuxCuenta <= O
end if
wait until Evento = 'O' ar Inicia = 'O'
if Inicia /= 'O' tben
if AuxCuenta < 16 tben
AuxcUenta <= AuxCuenta + 1
else
AuxCuenta <= O
end if
endif;
end process;
end ESPECIFICACION
entity mi_especificacion is
ead mi_especificacion
camponet mi_circuito
port (
Evento in bit;
Inicia in bit;
Reloj in bit;
Salida out integer
);
end camponent;
begin
Inicia<= '1',
'O' after 111 ns,
'1' after 50 ns;
Generador : process
begin
wait fer 122+. nsr
Evento <= '1';
wait fer 200 ns
Evento <= 'O';
end process;
Verifica : process
begin
wait en Inicia, Evento;
if Inicia = 'O' then
wait for .20 ns:
assert CUenta ~ O report
"Error : el circuito no se resetea'
severity ERROR; .
NumEventos <= O;
else
if Evento = '1' then
PulsoEmpezado := true;
end if;
if Evento = ' O' then
if PulsoEmpezado then
if NumEventos < 16 then
NumEventos <= NumEventos + 1;
else ,..
NumEventos <=n;
end if;
wait for 20 nsj
366 VHDL. Lenguaje estndar de Diseo Electrnico
Circuito : mi_circuito
port map (
Evento => Evento,
Inicia => inicia,
Reloj => RelQj,
Salida => Cuenta
)
end PATILLAS_AFUERA
redundancias, sin que por ello se omita informacin. Adems, las especificaciones
deben estar cenadas, ya que los cambios en las especificaciones producen rediseos
constantes y son causa habitual de malentendidos. Las especificaciones deberan es-
tar escritas de forma que pueda comprobarse que se cumplen todas las condiciones
y funcionalidades incluidas en el documento.
Las especificaciones ideales seran aquellas que se mantuviesen estables a lo
largo del proceso de diseo. Su contenido sera suficiente para que el diseador tra-
baje sin necesidad de consultar al cliente. Aparte de la descripcin textual de la fun-
cionalidad y aspectos tecnolgicos, contendran un modelo VHDL del entorno del
circuito. Este modelo no slo emulara las seales de entrada al circuito a disear,
sino que adems respondera adecuadamente a las respuestas del circuito. De esta
manera, el diseador podra realizar las simulaciones del sistema completo sin tener
que desarrollar los bancos de prueba. Con ello se evitara un problema relativamen-
te frecuente, como es que se cancelen errores debido a que la misma persona realice
el modelado del circuito y del entorno (podemos pensar, por ejemplo, en el diseo
de un contador de (} a 15; el diseador podra realizarlo para que contase de O a 14,
y hacer los bancos de prueba que comprueban esta cuenta; evidentemente, no sera
consciente del error),
Clk
ResN
BotProd1 TrampProd Clk TrampProd
BotProd2 NoHayP1 ResN NoHayP1
BotProd3 NoHayP2 BotProd1 NoHayP2
BotProd4 ColaMatic NoHayP3 BotProd2 NoHayP3
PrecProd1 NoHayP4 BotProd3 NoHayP4
v1.0 NoHayCambio BotProd4 NoHayCambio
PrecProd2
PrecProd3 MoneLleno BotDevuelve MoneLleno
PrecProd4 MonedaOut BotPVPlncre MonedaOut
BotDevuelve DispUnidad BotPVDecre DspUnidad
BotPVPlncre DispDecena InteModo DlspDecena
BotPVDecre DispCentena Monedalnt DispCentena
Monedalnt
entre otras, de cuatro seales de entrada para fijar el precio de cada producto (Prec-
Prodx) y otras cuatro seales para la seleccin del producto (BotProdx). En un an-
lisis posterior se podra llegar a la conclusin de que mientras se est fijando el pre-
cio de cada refresco no se estn expediendo refrescos. Podran entonces utilizarse
las mismas seales de seleccin para fijar el precio del producto, existiendo una se-
al inteModo que cambiara entre operacin normal y operacin de cambio de pre-
cio (v2.0). De esta manera ahorraramos tres entradas al circuito, pudindose redu-
cir el coste del encapsulado. Encontrar el punto justo entre unas especificaciones
completas, sin que por ello estemos sobreespecificando, es el objetivo de una buena
etapa de especificaciones.
En otras ocasiones, el contenido de las especificaciones es incompleto. A me-
nudo existen aspectos no conocidos o que requieren un anlisis ms detallado o que
son funcin de resultados posteriores del proyecto. En estos casos es corriente en-
contrar que en las especificaciones aparecen notas como por definir, por confirmar
o por consultar. El diseo del circuito puede comenzarse y fijar esos detalles ms
adelante. En otras ocasiones las especificaciones resultan incompletas simplemente
porque se olvidan algunos detalles.
Por otro lado, aparecen a menudo contradicciones o ambigedades que son di-
fciles de detectar en las etapas iniciales del proyecto. Estas ambigedades pueden
ser debidas a errores de redaccin, imprecisiones o conocimiento poco detallado de
lo que posteriormente ser el circuito. En nuestro sencillo ejemplo podra ocurrir
que, puesto que el importe de los productos se especifica en unidades de 25 pesetas,
no se hubiese previsto la devolucin de monedas de 5 pesetas. Se estara suponien-
do con ello que el usuario de la mquina no va a introducir, por ejemplo, 155 pese-
tas para pedir un refresco que cuesta 125. Pero dicha situacin, aunque poco proba-
ble, es posible, y podra dar al traste con el diseo.
Por ltimo, la redaccin de las especificaciones no es siempre lo clara que sera
deseable. Debe prestarse una especial atencin a este aspecto, intentando evitar fra-
ses largas y de difcil comprensin. La inclusin de grficos y diagramas puede
ayudar en gran medida a conseguir este objetivo. Sin embargo, debe tenerse en
cuenta que la interpretacin del texto, diagramas y grficos puede ser diferente se-
gn quien los lea. Esta fue precisamente una de las razones por las que el DoD pro-
puso la creacin de un lenguaje estndar para la descripcin de circuitos integrados,
el VHDL.
El contenido y organizacin del Documento de Especificaciones puede variar
notablemente dependiendo del tipo de circuito y aplicacin que se est consideran-
do. Sin embargo, existen una serie de puntos que siempre aparecern. La Tabla 6-3
muestra un esquema tpico de un documento de especificaciones.
El Documento de Especificaciones debe entenderse como un documento vivo.
Los cambios, aunque no deseables, son relativamente frecuentes. En este sentido
deben plantearse mtodos para que estos cambios no repercutan de forma negativa
en el proyecto. Estos mtodos van desde el control de versiones y cambios, que per-
mite a todos los participantes en el proyecto estar al da de las ltimas modificacio-
nes, hasta los procedimientos de diseo genrico, que facilitan los cambios de lti-
ma hora de forma rpida y con poco esfuerzo. Estos procedimientos sern expuestos
en posteriores apartados de este captulo.
6. La gestin del diseo 369
a llevar a cabo las tareas, cmo se va a controlar el avance del diseo y cul va a ser
la programacin temporal del mismo. Todos estos aspectos quedarn recogidos en
un documento, denominado Plan de Desarrollo, que debe ser aprobado por el clien-
te y el diseador. El plan de desarrollo no es ms que una planificacin detallada
del proyecto en sus aspectos organizativos. Cuando el diseo es pequeo o poco
crtico, el plan de desarrollo, aunque interesante, puede no ser necesario. Para dise-
os grandes o crticos, que deben ser coordinados con el desarrollo del resto del sis-
tema, su elaboracin resulta imprescindible. A menudo surgen problemas debido a
la falta de definicin inicial de las responsabilidades y los procedimientos de con-
trol del proyecto. Podramos encontrar, por ejemplo, que un cliente poco experto en
diseo no se sienta capacitado para analizar las simulaciones de los modelos VHDL
tras el diseo arquitectural. El diseador, por su parte, podra no querer admitir la
responsabilidad de validar el diseo sin que el cliente verifique por su cuenta el de-
sarrollo. Si el cliente dispone de modelos VHDL con los que validar el diseo, el
problema queda resuelto; si no, habr que encontrar el procedimiento (prototipos,
revisiones ms prolongadas, formacin del cliente en el diseo, etc.) para solventar
el problema. En otras ocasiones, el cliente podra exigir unos mtodos y herramien-
tas de trabajo para los que el diseador no est preparado (por falta de formacin o
de equipo). Anticiparse a estos problemas y resolverlos antes de que el proyecto es-
t realmente en marcha evitar sorpresas desagradables.
Por otro lado, el plan de desarrollo puede incluir los procedimientos que se
van a seguir para realizar el diseo. La Figura 6-4 muestra un flujograma de los pa-
sos a seguir para realizar un diseo con unas determinadas herramientas. Este flujo-
grama, aunque complejo, sirve para resaltar el gran nmero de programas (en gris
claro), acciones (en gris oscuro) y revisiones que deben realizarse en ocasiones. Co-
mo se puede imaginar, no es difcil olvidarse algn paso o cometer algn error. El
tener estos procedimientos documentados ayuda no slo a evitar errores sino tam-
bin a facilitar la tarea a los diseadores menos expertos en el flujo de diseo.
El contenido del Plan de Desarrollo es muy variable, aunque existen una serie
de puntos que deben incluirse en la mayora de los casos. La Tabla 6-4 muestra un
esquema de lo que puede ser el esqueleto del documento. Es importante hacer notar
que, aunque no se considere necesaria la elaboracin de dicho documento, s con-
viene plantearse estos puntos al principio del proyecto para garantizar que no surjan
problemas ms adelante.
Otro aspecto importante a cubrir durante la etapa de especificaciones es la ela-
boracin del plan de pruebas. El objetivo del Plan de Pruebas es definir cmo se va
a realizar la validacin del diseo. Las simulaciones son el procedimiento habitual
de validacin, pero no son adecuadas en todos los casos. En ocasiones ser necesa-
rio realizar un prototipo del circuito completo o de parte del mismo. En otros casos
puede necesitarse algn otro programa para validar los resultados de las simulacio-
nes. Como ejemplo podemos pensar en el diseo de un filtro digital. Para compro-
bar que los resultados son correctos podramos seguir un procedimiento como el
mostrado en la Figura 6-5.
En este procedimiento, los datos de entrada son generados por un programa es-
pecfico para generar unas formas de onda con unas determinadas caractersticas.
Los mismos datos son pasados al modelo VHDL del circuito y a un programa de
372 VHDL. Lenguaje estndar de Diseo Electrnico
anlisis matemtico que incluye funciones de filtrado digital (con lo que evitamos
que el diseador desarrolle al mismo tiempo el circuito y los bancos de prueba, dis-
minuyendo el riesgo de cancelacin de errores). Los resultados son mostrados me-
diante funciones grficas del programa de anlisis matemtico y se calculan los
errores relativos (del circuito respecto al programa).
De nuevo, definir al principio del proyecto cmo se van a realizar las pruebas,
obliga a plantearse posibles fuentes de problemas y a realizar una mejor planifica-
cin del trabajo. Todo ello redundar en un proceso de diseo ms fluido y un resul-
tado de mayor calidad.
puesto bsicamente por el Director, responsable del proyecto, y los diseadores. Ha-
bitualmente es necesario contar con un experto en la aplicacin donde va a integrarse
el diseo. Este experto puede formar parte del equipo de diseo o ser parte del equipo
del cliente. En cualquier caso, lo consideraremos integrante del equipo de diseo.
Las principales cuestiones que deben resolverse desde el punto de vista del
equipo de diseo son la asignacin de tareas y la coordinacin del equipo de diseo
durante el desarrollo .
Programa Mat~
~ - -_
Resultados
-
Modelo Funcional
Ficheros Dal~
- Resultados
Modelo VHDL del Modelo ASIC
ASIC
Resultados
Patrn
La etapa de diseo arquitectural puede ser entendida como una etapa de transicin
entre las especificaciones y el diseo lgico del circuito. El objetivo fundamental
de la etapa de diseo arquitectural es obtener una jerarqua de mdulos en la que
los bloques funcionales estn definidos de manera que sean compatibles a nivel de
ciclos de reloj (en el caso de diseos sncronos) con el diseo final. El diseo as
dividido deber cumplir con las restricciones planteadas en la etapa de especifica-
ciones y ser ptimo en cuanto a los parmetros del diseo (temporales, de rea y
consumo). Para ello deben investigarse distintas alternativas de diseo y escogerse
la ms adecuada. Durante esta etapa se desarrollarn tambin unos bancos de prue-
ba del circuito completo que puedan ser utilizados en posteriores etapas del desa-
rrollo.
El resultado fundamental de la etapa de diseo arquitectural es el modelo
VHDL del circuito. Este modelo habr permitido simular el comportamiento del
circuito frente al resto del sistema y analizar las posibles alternativas para su reali-
zacin. El modelo VHDL contendr una descripcin a nivel de transferencia de
registros (nivel RT) del circuito. Su comportamiento ser casi real. Aunque no in-
cluya los retardos reales de las puertas y del interconexionado, la evolucin de las
seales en cada ciclo de reloj ser igual a la del circuito una vez fabricado (siempre
que se sigan unas normas de diseo sncrono y se garantice en la fase de sntesis
que las entradas a los registros cambien antes de la llegada de un nuevo flanco de
reloj).
entity BANCO_REGS la
generic(
gNumBits integer ;= 8;
gNumRegs integer := 4;
);
port(
Reloj in std....logic;
InicioN in std..logic;
LeeEscrN in std._logic;
Registro in irtteget range O te gNtunRegs - 1;
Entrada in std_logic_vector(gNumBits - 1 downto O);
Salida out std_logic_vector(gNumBit!t - 1 downto )
);
end BANCO_REGS;
begin
end COMPORTAMENTAL;
entity BANCO_REGS
is
port(
Reloj in std_logic;
Inicic1l in st<Llogic;
LeeEscrN in std,_logic;
Regis;ro in integer ranga O to 3;
.Entrada in std,_logic_vector(7 downto O);
salida out std,_logic_v~ctor(7 downto O)
);
end BANCO_REGS;
architecture of BANOD_REG
COMPORTAMENTAL 1s
OOgin
end COMPORTAMENTAL;
cos, podra disponer de generadores de macroceldas (RAM, ROM, PAL, etc.), ge-
neradores optimizados de estructuras ms complejas (multiplicadores, data-path,
etc.) e incluso celdas de gran complejidad (controladores, filtros, etc.). El tener
acceso a estos elementos de biblioteca puede ser indispensable en algunos casos para
poder realizar el diseo. En otros, simplemente facilita su desarrollo. Sea como fue-
se, es conveniente saber de qu elementos disponemos para no desarrollar algo que
ya est hecho, o para considerar el coste de su utilizacin (los fabricantes suelen
facturar una cierta cantidad por el uso de su biblioteca, o por el uso de algunos
componentes de sta).
Sin embargo, estos modelos no son el nico resultado que se debe obtener de
esta etapa. Como en cualquier fase del diseo, el diseo arquitectural debe quedar
correctamente documentado para poder utilizar el trabajo en posteriores etapas.
Para ello deberemos redactar el Documento de Diseo Arquitectural. Al igual que
se hizo en la etapa de especificaciones, el objetivo del documento es describir, en
lenguaje natural y con la ayuda de grficos y cronogramas, el funcionamiento del
circuito (el modelo) y los bancos de prueba. El contenido y extensin del docu-
mento dependen, de nuevo, del tipo de proyecto en el que se est trabajando. Si se
trabaja en proyectos de cierta complejidad, donde a menudo colaboran varios dise-
adores, el Documento de Diseo Arquitectural adquiere una gran importancia. Su
redaccin, como la del Documento de Especificaciones, debe ser especialmente
cuidada. Este documento, junto con el cdigo VHDL, servir de referencia para las
posteriores etapas. Si se ha redactado correctamente, facilitar en gran medida el
trabajo. En proyectos de baja complejidad, o cuando el diseador es el mismo du-
rante las etapas de diseo arquitectural y detallado, el Documento de Diseo Ar-
itectural es menos crtico. Sin embargo, su redaccin presenta dos grandes ven-
tajas. En primer lugar, facilita el trabajo posterior. En segundo lugar, sirve como
documento base para elaborar la documentacin final del diseo (las hojas de ca-
ractersticas y la descripcin del circuito), por lo que siempre es un trabajo que se
aprovechar.
El Documento de Diseo Arquitectural, aunque especfico de cada circuito,
responde casi siempre a un mismo esquema. La Tabla 6-5 muestra un ndice genri-
co de un documento tpico de diseo arquitectural.
En el Apndice 1puede encontrarse el Documento de Diseo Arquitectural pa-
ra la mquina de refrescos de nuestro ejemplo. Aunque en este caso su extensin se
ha reducido para incluirla en el texto, puede valer como ejemplo del aspecto que
presenta un documento de este tipo.
Obsrvese que en el documento se ha incluido tambin una descripcin de los
bancos de prueba y su funcionalidad. Aunque en s los bancos de prueba no forman
parte del circuito, su descripcin facilitar la comprensin de los mismos por parte
de los participantes en las siguientes etapas del diseo. Adems, permitir verificar
que los bancos de prueba responden a las especificaciones (simulan el entorno del
circuito).
Introduccin
Documentos aplicables y de referencia
Discrepancias con el documento de especificaciones
Glosario
Terminologa usada
Descripcin arquitectural
Particionado del diseo y justificacin
Identificacin de bloques de la biblioteca aptos para ser utilizados
Identificacin de bloques susceptibles de ser incluidos en la biblioteca
Diagrama de bloques actualizado y de E/S del diseo
Interaccin entre bloques
Caracterizacin de seales internas
Estrategia de test global
process MuxErroneo(Seleccion)
begin
if Seleccion = '1' then
salida <= Entrada_1;
else
salida <= Entradq_O;
end if;
end process;
Ejercicio 6.1-
Dibujar el circuito resultante de la sntesis del cdigo del Listado 6-7 Y las formas
de onda resultantes de la simulacin.
6. La gestin del diseo 385
Seleccin .....1 L
Entrada_O Entrada_O ___fl___f"L___J
Salidas
Entrada_1~
Entrada_1
salidassntesis~
La revisin de estos aspectos suele ser llevada a cabo por los diseadores (nor-
malmente por el director del equipo de diseo). Como se observa, su objetivo final
es facilitar las tareas posteriores y la reutilizacin del diseo. Un cdigo VHDL
bien escrito es un cdigo fcil de leer y de depurar. Las modificaciones posteriores
implicarn poco trabajo y el riesgo de errores disminuir.
Los ltimos aspectos del diseo arquitectural a revisar son los relacionados con
la organizacin del proyecto, siendo el ms importante el referente al cumplimiento
de plazos. En este punto del diseo se tendr una idea mucho ms precisa de la
complejidad del proyecto y su evolucin. Se debern aplicar las medidas necesarias
para cumplir el plan de trabajo planteado inicialmente y, si fuese necesario, se rea-
justarn las tareas y plazos para solucionar posibles problemas. En este sentido, es
el cliente quien debe tomar las decisiones finales sobre cualquier modificacin a la
planificacin del proyecto.
El objetivo del diseo lgico es obtener una descripcin del circuito lo suficiente-
mente detallada como para servir de entrada a las herramientas de diseo fsico. El
trabajo fundamental de esta etapa consistir en la sntesis de las descripciones
VHDL y la optimizacin de la lgica para conseguir las prestaciones deseadas. La
optimizacin de la lgica se har a dos niveles: previamente a la sntesis (modifi-
cando el cdigo VHDL) y tras la sntesis (imponiendo restricciones temporales, de
rea o consumo). La ejecucin de esta etapa requiere la seleccin del fabricante y la
tecnologa en la que se implementar el circuito.
do con antelacin, se podrn realizar algunas pruebas de aquellas partes que se con-
sideren ms crticas con objeto de estimar si van o no a cumplir con las restriccio-
nes. Estas pruebas podrn realizarse durante la etapa de diseo arquitectural, o
incluso durante la etapa de especificaciones, previendo posibles problemas y
actuando en consecuencia.
Por otro lado, desconocer la tecnologa objetivo puede hacer que desarrollemos
celdas o componentes de forma inadecuada. Como ejemplo podemos fijarnos en el
desarrollo de un banco de registros de un microprocesador sencillo. Si disponemos
de una biblioteca que contenga generadores de memorias bipuerto es posible que
podamos implementar el banco de registros mediante este tipo de memorias con
unos buenos resultados en cuanto al rea final del circuito. Si dichas celdas no estn
disponibles en la biblioteca, o desconocemos su existencia, no quedar otro reme-
dio que implementar el banco de registros mediante biestables, lo que resultar en
un coste elevado de rea. De igual manera podra ocurrir que nos dedicsemos a de-
sarrollar celdas (puertos paralelo, transmisores/receptores serie, multiplicadores, fil-
tros, etc.) que ya estuviesen disponibles en la biblioteca, o que fuesen accesibles a
un coste razonable como macroceldas ya desarrolladas.
En cualquier caso, es importante asegurarse de que los componentes de biblio-
teca que se vayan a utilizar posean modelos VHDL que nos permitan su integracin
y simulacin sin problemas en nuestro diseo.
Ejercicio 6.2
Modificar el cdigo del Listado 6-8 para que no genere registros redundantes.
Los registros en auxCuenta y Cuenta se generarn debido a que es necesario
mantener el valor de ambos objetos entre dos ciclos consecutivos del reloj. Si en ca-
da ciclo de reloj asignamos un nuevo valor a auxCuenta no ser necesario mante-
ner el valor anterior, por lo que no se sintetizar un registro.
begin
if Inicio = 'O' then
end if;
end process;
Ejercicio 6.3
Modificar el ejemplo del Listado 6-10 para que al sintetizarlo se utilice un solo su-
mador.
Una posible solucin consiste en utilizar variables intermedias a la que se les
asigna el valor de los operandos en funcin del cdigo de operacin.
Op_1 := Dato_D;
Op_2 := Dato_e;
if Operation = COD_OPIR then
Op_1 := Dato_I;
Op_2 : = nato_R;
end if;
Suma : = Op_1 + Op_2;
if Operacin = COD_OPDC then
A <= Suma;
elsif Operaci~n = COD_OPIR then
B <= Suma;
end if;
end process;
Como se ha indicado previamente, el objetivo del diseo lgico es obtener una des-
cripcin lo suficientemente detallada como para servir de entrada a las herramientas
de diseo fsico. Como hemos visto, este proceso consiste en modificar el cdigo
(para eliminar lgica redundante, compartir recursos o satisfacer ciertas restriccio-
nes) y sintetizarlo con una determinada biblioteca suministrada por un fabricante.
Tras el proceso de sntesis (o en paralelo con ste), las herramientas permiten reali-
zar una optimizacin lgica que permita satisfacer los requisitos en cuanto a consu-
mo, rea o frecuencia de funcionamiento. El proceso de sntesis habr sustituido la
lgica descrita a nivel RT por un conjunto de puertas, biestables, y celdas bsicas
que poseen la misma funcionalidad.
Tras el proceso de sntesis obtendremos una descripcin estructural del circui-
to, que consistir en una lista de celdas (pertenecientes a la biblioteca del fabrican-
te) e interconexiones (netlist). Esta descripcin ser la entrada a las herramientas de
ubicacin y conexionado.
Durante toda esta etapa se habrn realizado modificaciones sobre el diseo (op-
timizacin del cdigo). Ser, por tanto, necesario realizar simulaciones que nos ase-
guren que la funcionalidad no ha cambiado. Para ello podemos utilizar los mismos
390 VHDL. Lenguaje estndar de Diseo Electrnico
Terminada la etapa de diseo lgico deben revisarse los resultados obtenidos hasta
el momento. La revisin del diseo lgico debe cubrir tres aspectos fundamentales:
revisar que la funcionalidad sigue siendo correcta, comprobar que se satisfacen los
requisitos en cuanto a prestaciones y verificar el test de fabricacin. Adems, al
igual que se hizo en la revisin del diseo arquitectural, deben verificarse los aspec-
tos organizativos del proyecto (cmo se ha hecho el diseo lgico y lo ajustado que
est al plan de desarrollo).
Para revisar la funcionalidad se habrn realizado simulaciones comparativas
entre los resultados del diseo arquitectural y el diseo lgico. Pero adems, puesto
que ya se dispone de una estimacin de los retardos de la lgica, se verificar que el
circuito sigue comportndose adecuadamente en las simulaciones en peor y mejor
caso (retardos mximos y mnimos), especialmente en los puntos que se consideren
ms crticos.
En cuanto al test de fabricacin, el proceso de revisin consiste en un anli-
sis de las partes del circuito que no han quedado suficientemente cubiertas por
el test de fabricacin. La decisin sobre una posible mejora del test de fabrica-
cin depende en gran medida del tipo de aplicacin a la que vaya dedicado el
circuito y de los recursos y tiempo necesarios para su modificacin. Esta deci-
sin debe ser valorada convenientemente por el cliente y el Director del equipo
de diseo.
En cuanto a los aspectos organizativos y metodolgicos del diseo, son apli-
cables los mismos comentarios que se hicieron para la etapa de diseo arquitec-
tural.
6. La gestin del diseo 391
Diseo Lgico. El trabajo de esta etapa suele estar bastante automatizado y no de-
bera plantear problemas para la mayora de los circuitos. Sin embargo, cuando el
circuito trabaja a altas frecuencias de funcionamiento el tamao de la lgica est li-
mitado (como en las FPGAs o matrices de puertas), o el consumo debe ser reduci-
do, pueden no conseguirse las prestaciones deseadas. Por otro lado, aunque las tare-
as a realizar durante el diseo fsico estn bastante automatizadas, a menudo existe
un salto brusco entre las herramientas utilizadas hasta el momento (simuladores y
sintetizadores) y las que se utilizarn en esta etapa. En ocasiones es necesario reali-
zar conversiones de formato, utilizar simuladores especficos del fabricante y resol-
ver todo tipo de problemas de interfaz entre herramientas. Como se ha comentado
previamente, realizar algunas pruebas durante las etapas de diseo arquitectural o
diseo lgico puede evitar sorpresas de ltima hora.
Tras la realizacin del diseo fsico, ser necesario realizar simulaciones del
circuito con los retardos debidos a las interconexiones. Estas simulaciones refleja-
rn con gran precisin el comportamiento real del circuito. Deben realizarse simula-
ciones en peor y mejor caso y verificar los puntos crticos.
El proceso de fabricacin depende de la tecnologa escogida. Si el circuito se va a
implementar mediante lgica programable (EPLDs, FPGAs), la programacin se har
normalmente en el centro de diseo. Si el circuito va a ser fabricado como un ASIC
(circuito integrado de aplicacin especfica), requerir de unos prototipos iniciales an-
tes de pasar a produccin. Esto debe tenerse en cuenta en la planificacin del proyec-
to, ya que normalmente implica un retardo adicional de al menos uno o dos meses.
entity DEMUX is
port (
Sel in bit;
Ent in bit;
Sal_O out bit;
Sa1_l out bit
);
end DEMUX;
else te"
Sal_l <'" Ent
Sal_O <= 'O'
end if;
end process;
end NORMAL;
end process;
end RETARDOS;
El ejemplo mostrado es un caso muy sencillo en el que las seales tienen retar-
dos diferentes en funcin de la seal de seleccin. En la mayora de los casos, la
descripcin debe complicarse para modelar correctamente todos los tipos de re-
tardos.
De cualquier forma, hay que tener en cuenta que un modelo obtenido de esta
manera refleja slo aproximadamente las caractersticas reales del circuito; puede
ser un modelo vlido para unas simulaciones estimativas sobre el comportamiento
del sistema, pero no resultar adecuado si se quieren realizar unas simulaciones pre-
cisas. An as, suelen ser modelos muy tiles durante las etapas iniciales de un pro-
yecto (hasta la etapa de diseo arquitectural).
al final del diseo con decenas de ficheros y versiones distintas de los componentes
diseados. Adems, los objetivos de estas versiones pueden ser diferentes, estando
unas pensadas para sntesis, otras para simulacin, etc.
La Pigura 6-6 muestra un ejemplo simplificado de las diferentes versiones o
ficheros que podran ir apareciendo durante el proceso de diseo. En la figura pode-
mos ver cmo un determinado mdulo del diseo (mdulo A) va pasando por dife-
rentes versiones hasta llegar a su versin definitiva.
Inicialmente disponemos de un modelo comportamental, posiblemente desarro-
llado durante la etapa de especificaciones. Durante el diseo arquitectural, el mismo
mdulo es rediseado (descrito de forma diferente) para obtener un modelo RT. Du-
rante este proceso se han podido generar diferentes versiones hasta llegar a la solu-
cin funcionalmente conecta o ms adecuada. Posteriormente pasaramos al diseo
lgico, donde todo este proceso de rediseo se repite. Podramos pensar que las ver-
siones antiguas no son importantes, ya que la versin que finalmente nos interesa es la
ltima, pero esto no es cierto. El proceso de diseo en VHDL nos permite comparar
fcilmente (incluso de forma automtica) una versin con otra. As, finalizado el dise-
o lgico, podemos realizar una simulacin comparativa entre el modelo que se obtu-
vo durante el diseo arquitectural y el que se ha obtenido durante el diseo lgico. Lo
mismo podramos hacer entre el modelo de las especificaciones y el arquitectural.
FPGA Modelo
prototipo simulacin
Synopsys + Xilinx Synopsys
Cadence
Docurnentacin
(para usuario) =-~
1" ij
=- Modelo
VHOL
i ~
/
(para simulacin)
Modelo
temporal " Topografa
(para anlisis MUX (para diseo fsico)
de tiempos) '-.........
~/ ~Smbolo
netlst ~ U (para esquemas)
FIGURA 6-7. Diferentes vistas del mismo componente dentro de una biblioteca.
6. La gestin del diseo 397
-
CPU. iQ DEC
=
-
-MEM
Ni I
14~~_~.oo_p,"."~ I
bliotecas que contienen elementos bsicos utilizados en todos los diseos. Entre
ellas podemos encontrar las bibliotecas STD y IEEE que normalmente son utiliza-
das en todas las descripciones VHDL.
En segundo lugar se dispone de bibliotecas de componentes; stas son biblio-
tecas que contienen elementos de distinta complejidad que sern incluidos dentro
de algn diseo. Podramos tener, por ejemplo, una biblioteca de mdulos perifri-
cos tpicos (mdulos de transmisin/recepcin serie asncrona, puertos de EIS para-
lela, etc.), de la que seleccionamos alguno para nuestro diseo. Tambin estn in-
cluidas en esta categora las bibliotecas de puertas tpicas de los fabricantes.
Finalmente tenemos la biblioteca de diseo; en ella se incluyen todos los ele-
mentos que forman parte de nuestro diseo. Esta biblioteca har referencia a ele-
mentos de la biblioteca de recursos y de las bibliotecas de componentes. Los com-
ponentes de estas bibliotecas normalmente sern componentes de cierta comple-
jidad.
La Figura 6-8 muestra la jerarqua existente entre estos tres tipos de biblio-
tecas.
La complejidad de los componentes de biblioteca vara desde puertas hasta mi-
croprocesadores. Las necesidades de gestin de la biblioteca dependen en gran me-
dida del tipo de componente considerado. Los componentes de biblioteca se pueden
clasificar atendiendo a varias de sus caractersticas, las cuales no son necesariamen-
te exclusivas.
En primer lugar se pueden clasificar los componentes atendiendo a su comple-
jidad funcional. As, podramos hablar de:
398 VHDL. Lenguaje estndar de Diseo Electrnico
Mod_1,beld
Nombre: VmeTypes.vhd
E\ _ Versin: 3.1
Fecha: 13/02195
Autor: J. Snchez, y. Torroja
Descripcin: Tipos bsicos del diseo
Mdulo 1 ~-- ~ Pararn.vhd Dependencias:--
.--U "<, - Funcs.vhd
_
~
Types.vhd I
I ~
Nombre: VmeFuncs.vhd
Versin: 3.2~
vmeOttier.vhdE ...... E-~ . ~= ->
_______
MasterTB.vhd Master.vhd
-;- -
-~
I
~ Master.vhd
~ 8 lE Design.bdd
[i\: : ~-~
M: N.belda : / \ ~
MduloN
~
/T.~ /.~~.
~ . ~ I
!,~E
Funcs.vhd
~lhd
lZJ ~ ~_. ~ .
Inter.vhdSlave.vhd Types.vhd
(copia)
Base de datos
(directorio)
E
Fichero
local
Fichero
global
Procedimiento
de gestin
(modificable) (no modificable) de la BDD
Consideramos una versin como cada uno de los estados por los que va evolucio-
nando una vista de un componente. En nuestra mquina de refrescos, por ejemplo,
el modelo arquitectural puede haber sufrido mltiples modificaciones (que terica-
mente daban resultados correctos) hasta llegar a la versin final. Cada uno de esos
diseos intermedios es una versin. Si de un determinado componente obtuvira-
mos una descripcin para sntesis y otra para simulacin, consideraramos que son
vistas diferentes del mismo componente, y no distintas versiones. Tendran, por tan-
to, distinto nombre, aunque podran tener las mismas versiones (por ejemplo, podra
haber una versin 1.35 de ambos modelos).
Existen infinidad de mtodos para mantener un cierto control sobre las diferen-
tes versiones del diseo que se han ido generando. Algunos de estos procedimientos
son rudimentarios. Podemos, por ejemplo, realizar una copia de todos los archivos
VHDL que hemos generado cada vez que creemos que tenemos una versin defini-
tiva, o cuando la magnitud de los cambios a introducir nos hacen pensar que la
vuelta atrs va a ser complicada. Este procedimiento, sin embargo, presenta multi-
tud de inconvenientes y a menudo se vuelve intil cuando el nmero de modifica-
ciones que se realizan sobre el diseo es elevado, o el nmero de personas trabajan-
do sobre el diseo es grande.
Para realizar un control de versiones, lo primero que hay que definir es cules
son los ficheros que se mantienen bajo el control de versiones. Mantener todos los
ficheros que se utilizan durante el diseo sera un gasto intil, ya que muchos de
ellos pueden generarse a partir de otros mediante programas. Mantener un conjunto
mnimo tampoco es una buena idea, ya que la generacin de algunos ficheros es un
proceso costoso y a veces lento. Por ello, debemos distinguir, en primer lugar, la di-
ferencia entre ficheros fuente y ficheros objeto. Un fichero fuente es aquel que no
puede obtenerse de forma automtica a partir de otro fichero. Un ejemplo claro de
ficheros fuente son la mayora de las descripciones VHDL; stas son fruto de la
creatividad del diseador. Por el contrario, los ficheros objeto son aquellos que pue-
den obtenerse de forma automtica a partir de un fichero fuente. Un ejemplo claro
podran ser los resultados de un proceso de sntesis automtica.
Todos los ficheros fuente deberan estar bajo el control de versiones. Los ficheros
objeto pueden no estar bajo control, aunque s puede ser conveniente si el proceso de
generacin de los ficheros objeto es largo o complejo (un proceso de sntesis y optimi-
zacin hasta obtener resultados satisfactorios puede durar varias horas). En general, se
considera que deben estar bajo control de versiones los siguientes tipos de archivos:
01
ASIC
diseo
05 Banco de Pruebas
01
ASIC
diseo
Banco de Pruebas
del usuario. En estos casos puede ser necesaria una gua donde se describa
cmo configurar, simular y sintetizar correctamente el componente.
- Hoja de catlogo: al igual que ocurre con los componentes discretos, dis-
poner de una hoja de catlogo facilita la consulta y seleccin del compo-
nente por parte del usuario. Esta hoja debera contener toda la informacin
necesaria para la seleccin y operacin del componente.
- Notas de aplicacin: los ejemplos son una ayuda ideal a la hora de utilizar
un componente. Debera haber notas de aplicacin disponibles tanto para el
uso del componente de biblioteca (especialmente si ste es configurable)
como para su operacin.
- Problemas y soluciones: las descripciones VHDL se encuentran a mitad
de camino entre el software y el hardware. Si el componente es complejo,
podra tener algunos errores que, aunque no impidiesen su utilizacin, es
necesario conocer y plantear alternativas para su solucin.
Soporte tcnico y mantenimiento: como en cualquier otro producto, estos
factores son crticos para la comercializacin del componente.
Estimadores: cuando los componentes son genricos o configurables, el di-
seador necesita encontrar la mejor combinacin de parmetros que satisfaga
sus requisitos. En estos casos no resulta factible sintetizar el componente ba-
jo cada posible combinacin de parmetros, ya que el tiempo empleado en la
sntesis puede ser elevado. Resulta, por tanto, muy til disponer de estimado-
res fiables de rea, retardos o consumo.
Herramientas de configuracin: en diseos configurables complejos pue-
den necesitarse herramientas que ayuden al usuario a configurar el compo-
nente de acuerdo a sus requisitos.
Herramientas de validacin: en componentes de mediana o alta compleji-
dad pueden hacerse necesarias funciones que faciliten al usuario la simula-
cin del circuito o del sistema completo. Podramos imaginar, por ejemplo,
un usuario que est utilizando un transmisor/receptor sncrono de una deter-
minada biblioteca de componentes. Para comprobar que el componente fun-
ciona o es operado correctamente, le sera muy til disponer de funciones en
VHDL que le permitiesen transmitir mensajes hacia el componente correcta-
mente formateados (con la velocidad de transmisin adecuada, el CRC aa-
dido, etc.). En otros casos, cuando la complejidad del componente de biblio-
teca hace poco recomendable la simulacin a nivel RT, sera conveniente
disponer de modelos algortmicos o de alto nivel de la celda.
Soporte para la deteccin de errores: los componentes de biblioteca van a
estar normalmente inmersos en diseos ms complejos, y estarn controlados
por otros componentes o partes de la lgica del circuito. Al igual que en los
componentes ms simples (biestables, puertas) existen mtodos para detectar
situaciones peligrosas, como violaciones en los tiempos de establecimiento
(set-up time) y mantenimiento (hold time), los componentes de biblioteca
complejos deben contar con mtodos para detectar operaciones errneas por
6. La gestin del diseo 409
parte de la lgica que lo opera (por ejemplo, una secuencia incorrecta de se-
ales, valores no controlados en buses, etc.).
Una de las ventajas fundamentales de los HDLs es que permiten, de forma sencilla,
generalizar el diseo. As, cuando se disea un componente, ciertos valores pueden
quedar como parmetros que se concretarn ms adelante en el proceso de diseo.
Ejemplos tpicos son el final de cuenta de un contador, el ancho del bus de un regis-
tro paralelo, el nmero de bits de una ALU, etc.
Esta facilidad para dejar ciertos datos como parmetros permite la reutilizacin
del componente en diseos posteriores. Adems, permite que parte de las especifi-
caciones del diseo queden abiertas, 10 que facilita la toma de ciertas decisiones
que, en otro caso, podran restringir el desarrollo.
Pero para aprovechar al mximo estas posibilidades es necesario considerar
ciertos aspectos y mantener unos procedimientos de trabajo que garanticen que el
esfuerzo invertido en realizar el diseo genrico va a ser aprovechable posterior-
mente.
En este apartado se dan una serie de recomendaciones sobre cmo realizar un
diseo genrico y cules son sus ventajas e inconvenientes.
En primer lugar, conviene acotar qu entendemos por diseo genrico, ya que exis-
ten diferentes interpretaciones de este concepto.
6. La gestin del diseo 411
entity AscDescContador le
generlc(gMaxBits : integer := 4);
port(
~eloj in std_logic;
InicioN in std_logic;
AscDesc in std_logic;
CUenta out stq_logic_vector(gMaxBts - 1 downto O)
);
end AscDescContador;
entity ContadorGenrico is
generie (
gTipo : integer := O;
_ O significa contador ascendente
_ 1 significa contador descendente
_ resto: significa contador ascendente/descendente
gMaxBits integer:= 4);
port(
Reloj in std_logic;
IniciaN in std,_logic;
AseDasc in std_logic; _ solo usada en el contador, Up/J:)own
Cuenta out std_logic_vector(gMaxBits - 1 downto O)
);
end ContadorGenrico;
Permite mantener las especificaciones abiertas. Puesto que los valores que
aparecen en el diseo son variables, es posible esperar a etapas ms tardas
del diseo para decidir su valor final. Sin embargo, debe considerarse que es-
ta facilidad no implica que no se hayan tenido que definir dichos valores
durante la especificacin. Un excesivo nmero de grados de libertad o deci-
siones retardadas puede acarrear ms inconvenientes que ventajas.
Evaluacin de alternativas. Al poder modificar los parmetros del diseo,
es posible evaluar alternativas que, en principio, podran no haber sido con si-
414 VHDL. Lenguaje estndar de Diseo Electrnico
deradas. Este aspecto tiene especial relevancia cuando en las ltimas etapas
del diseo surgen restricciones (rea, tiempo, cambio de tecnologa) que
obligan a tomar soluciones de compromiso. En general, estas restricciones
no son consideradas en las primeras etapas del diseo. Realizar un diseo ge-
nrico lleva implcita su consideracin.
Anlisis exhaustivo del diseo. Realizar un diseo genrico implica que el
componente a disear debe funcionar bajo todos los valores posibles de sus
parmetros. Esto requiere por parte del diseador un anlisis del problema
mucho ms exhaustivo que cuando se disea el mismo componente para
unos valores fijos de sus parmetros. Adems, el diseo genrico impone
unas pruebas funcionales que no slo verifican la funcionalidad del compo-
nente sino tambin el comportamiento del mismo al variar los parmetros.
Todo esto redunda en una verificacin mucho ms exhaustiva del componen-
te y unos bancos de prueba ms depurados.
Organizacin del diseo. De igual manera que el diseo genrico exige al
diseador un anlisis ms profundo del componente que est diseando, tam-
bin requiere del equipo de diseo una mejor organizacin de los ficheros, ti-
pos de datos, constantes del diseo, etc. Esta mejor organizacin redunda en
un ahorro importante de tiempo, especialmente si 'el equipo de diseo est
formado por varias personas.
Mejora del mantenimiento. Uno de los aspectos claves para hacer un dise-
o reutilizable es que disponga de una buena documentacin. Parte de la do-
cumentacin del diseo la constituye el propio cdigo HDL. Cuanto ms le-
gible sea el cdigo, ms fcil resultar su interpretacin y modificacin. El
realizar un diseo genrico implica que los valores constantes que normal-
mente aparecen en el cdigo son sustituidos por nombres de parmetros,
expresiones, etc. Si estos nombres y expresiones son escogidos bajo ciertas
reglas, su lectura e interpretacin ser sencilla, facilitando as la consulta y
mantenimiento del cdigo por personas distintas a las que lo realizaron.
Simplificacin del cambio de tecnologa (retargeting). La utilizacin de
HDLs permite, en teora, realizar diseos independientes de la tecnologa en
la que finalmente se implementar el circuito. En la prctica, esto no siem-
pre es cierto. Factores como la velocidad, el consumo, la biblioteca o la ca-
pacidad de integracin, obligan a redisear muchas de las partes de un
circuito al cambiar de tecnologa. Es necesario, por tanto, escoger la tecno-
loga objetivo lo antes posible en el proceso de diseo. Sin embargo, la ex-
periencia muestra que, en muchos casos, es necesario cambiar la tecnologa
objetivo (bien sea por factores tecnolgicos, econmicos o polticos) cuan-
do se est bastante avanzado en el proceso de diseo. De nuevo, el diseo
genrico permite reducir los efectos negativos de estos cambios al permitir
el redimensionamiento sencillo de ciertos aspectos del diseo. Conviene in-
sistir, sin embargo, en que los cambios de tecnologa pueden suponer modi-
ficaciones muy importantes en el diseo y que deben evitarse en la medida
de lo posible.
6. La gestin del diseo 415
El diseo genrico presenta, por otro lado, una serie de inconvenientes que es
necesario valorar:
Como conclusin cabe decir que el diseo genrico puede paliar en gran medida
los problemas inesperados que se presentan en las etapas finales del proceso de dise-
o. Su realizacin supone un coste adicional en tiempo de desarrollo. La experiencia
muestra, sin embargo, que este tiempo invertido es claramente recuperado por las ven-
tajas que aporta este tipo de diseo. Slo si el diseo est absolutamente cerrado en
las especificaciones, puede tener sentido no realizar el diseo con esta aproximacin.
package TiposBasicos is
=============================~=====;:================~====--====
...~-----",,----'-_._....
-~-------~-,--':"".-:"",--.--------------:,---~-~--..; _~-
-- ,<;qn&~1*> definj,dap para el manejo de Jos ,.datos en 9en~al
constant ~BitsDatos : natural .- '9;
constant cBitscoef , : riatUfil : =' 6;
constant cBitsNorma : natural x 5;
-- Filtro 1
constant cBitsMaxNumEtapas1 natural j 4;
constant cBitsMaxNumAccesos1 natural .- cBitsMaxNumEtapas1 - 2;
constant cPa1abrasPorAccesol natural.- 4;
-- Filtro 2
constant cBitsMaxNumEtapas2 natural:= 4;
constant cBitsMaXNumAccesos2 natural :.;;:0- cBitsMaxNumEtapas2 -
cBitsNumBloqsMem;
subtype tDireccCPU 1s
std_logic_vector(cAnchoBusDirecs - 1 dow.nto O)i
subtype tDatosCPU 1s
std_logic_vector.(cAnchoBusDatbs - 1 downto Ol:
aubtype tBusCPU is
std_logic_vector(cAnchoBuSCPU - 1 downto O);
subtype tElemIntervalo 1s
stQ_logic_vector(cBitsMaxNumMuestras - 1 dow.nto O):
type tIntervalo 1s array (1 dow.nto O)
of tElemlntervalo;
type tBancoDeIntervalos i8 array (O to ~Intwal. ~ Jl
of tIntervalo "
type tBancoDeMximos i8 array (O to cMaxlnterval - 1)
of tDatoPalabra:
type tBancoDePosiciones La array (O to eMaxInterval - l}
of tElemIntervalo:
6. La gestin del diseo 419
. .. af tElemInterv,sDet;
type tVectorCtrlnet' La array (1 te cNumDetectores)
af std_logic;
=!:::===========~=:z===::*=c:::::=============.:==::=:::::,:!::r:-=:;:;:,_;: ..~*c:==
..- FUNCI~
================;=====:===========:========:====================
--"~--:'-::;;'';'':'";::-::-----------------::-''_--------:,:.:
...
-:.'''_''::~,
..-~~-:t.r:r--------
-- Calcula el. logaritmo en base 2 del parmetro
----------------------------------------------------_'--;.. .. ~_,.~:"l'"
1ibrary IEEE;
use IEEE. st<LlogiG_1164. al1;
use IEEE.st<Llogic_arith.al1;
use IEEE.std_logic_signed. al1;
use WORK.BasicTypes.al1;
use STD.textio.al1;
entity FIRl is
ganarie (
gBitsDatos : natural. :,;: cBitsDatos
gBitsCoef :. natl,l.rf:;, cBitsCoef
gBitsNoIIDa :- nat%~::= BitSNorm,i
gMaxNumEtapas : ruiturli': = hlaxNumEtapas1
gMaxNumAccesos natural .:= cMaxNumAccesos1
gPalabrasPorAccesc natural .: = cPalabrasPorAcceso1
J;
port(
RelojFIR in st<Llo~'ic;.
InicioN in std_logic
_ Interfaz de Configuracin
Accesos in integer range O to gMaxNumAccesoll--: 1;
CargaCoet in std_logic;
NunCoef in integer range O to gMaxN1.mlEtapas- l;
CoefIn in tCoefPalabra;
Norntapal' in tNoIIDal'alabra;
_ Interfaz de Operaciri
NuevoSensorlZi in stq).ogic;_
NuevaMuestraIn in std_logic;
DatoIn in tDatoPalabra
DatoOut out tDatoPa1abra
NuevaMuestraOut out st<Llogic
NuevoSensorOut out st<L1ogic
Error out boolean
J;
end FIRl
architecture FUNCIONAL
af FIRl is
begin
end FUNCIONAL;
Si no se quieren variar los valores de los parmetros en ningn caso, este pro-
cedimiento simplemente aporta una mejor organizacin del diseo y una mayor le-
gibilidad del cdigo.
Si se desea que el componente funcione para diferentes valores de los parme-
tros, habr que escribir el cdigo en consecuencia. Esto requiere analizar qu valo-
res son aceptables, dependencias entre los parmetros, etc. En la mayora de los
casos, esto no presenta problemas, especialmente si se ha diseado una buena
estructura de datos. Sin embargo, existen algunos casos donde la generalizacin
resulta un tanto engorrosa. El siguiente cdigo muestra un ejemplo tpico.
En este componente existen unos registros internos que pueden ser ledos por
una CPU. El tamao de los registros es parametrizable y su ancho no guarda rela-
cin con el ancho del bus de la CPU. Esto obliga a distinguir dos casos, el caso en
el que el ancho del bus de la CPU sea menor que el de los registros o el caso en el
que sea mayor o igual (ver cdigo Listado 6-17). Incluso en el caso en el que el bus
de la CPU sea menor que el ancho de los registros, cabra plantearse que los regis-
tros fuesen de un tamao tal que el acceso por parte de la CPU tuviese que hacerse
en tres o cuatro ciclos. Esto obligara a considerar nuevos casos en la escritura del
cdigo.
Al elegir los parmetros conviene, por tanto, imponer restricciones realistas a
los valores que pueden tomar los parmetros, de forma que exista un equilibrio en-
tre el coste del desarrollo y los beneficios previsibles.
Una posible regla para seleccionar qu parmetros incluir sera entonces con-
siderar todas las constantes que aparecen en el diseo, para escoger con cuidado
los mrgenes de variacin de los parmetros cuando stos modifiquen la funcio-
nalidad (en el ejemplo mostrado se consider que era conveniente mantener la
posibilidad de que el ancho de los registros fuese mayor o menor que el del bus
de la CPU).
El particionado del diseo puede influir, desde el punto de vista del diseo genri-
co, en dos aspectos fundamentales. Por un lado, va a influir en las estructuras de
datos (los tipos de las seales) que sean necesarios en el diseo, ya que la particin
influye en el nmero y tipo de seales que se comunican entre bloques. Por otro
lado, el cmo se realice la particin y se distribuyan las unidades funcionales en
los bloques va a determinar la facilidad o dificultad con la que se realicen modifi-
caciones al diseo. Es decir, la facilidad con la que podr hacerse que los parme-
tros puedan cambiar su valor y, por tanto, que el diseo genrico resulte realmente
til.
El particionado ptimo depende en gran medida de la aplicacin que se est
considerando, aunque pueden darse una serie de recomendaciones tiles.
La mayora de los bloques funcionales disponen de unidades operacionales
(ALUs, multiplicadores, etc.), registros programables y seales tpicas de control
para la carga o lectura de los registros y para la sincronizacin de las operaciones.
Una particin que da buenos resultados consiste en establecer una jerarqua donde
las unidades operacionales estn separadas de los registros y de un posible interfaz
con el resto del sistema.
La ventaja de un particionado de este tipo es que las posibles modificaciones
estructurales afectan a un nmero pequeo de bloques. Sin embargo, estas solucio-
nes no son siempre vlidas o fcilmente aplicables. En cualquier caso, conviene que
el nmero de bloques no sea excesivo (tres o cuatro es un buen nmero).
El particionado puede influir en la ubicacin y conexionado (place and route)
y, por tanto, en las prestaciones en cuanto a velocidad. Este aspecto debe ser tenido
en cuenta para no hacer que el diseo genrico comprometa las prestaciones.
6. La gestin del diseo 423
library IEEE;
use IEEE.std_logic_1164.all;
use WORK.BasicTypes.all;
entity FIR1_REDS i8
generle(
gBitsDatos : natural := cBitsDatos;
gMaxNumEtapas r natural := cMa:XNumEtapsl;
gMaxNUmAccesos natural := cMaxNumAccesosl;
gPalabrasPorAcceso : natural := cPalabrasPorAccesol
);
port(
RelojFIR in std_logic;
InicioN in std,,_logic;
NuevoSensorln in stc(logic;
CargaRegs in std_logic;
Datoln in tDatoPalabra;
RegsOUt out tAccesolVectorDatos(Q to gMaxNumAccesos - II
);
end FIR1_REGS;
arehitecture of FIR1_REGS Is
FUNCIONAL
424 VHDL. Lenguaje estndar de Diseo Electrnico
----------------------~----------~-------~---~-----:~~.----:------------..,-
-- Banco de registros del filtro
signa! BancoReg:s tDa,tosv~,~9r(O to gMaxNumEtapas -:J.).
begin
-~~-----------------------------------------------~------------------
-- Carga serie de los datos
----------------------'!""--------------------------,...~,~----- ....
------- ........
--
LOAD : process(RelojFIR, IniciON)
begin
if IniciaN = '0' tban
for i in O to gMaxNurnEtapas - 1 loop
BancoRegs(i} <= (others => '0');
end loop;
elsif RelojFIR' event and Reloj FIR =",
i: then
if CargaRegs = '1' then
BancoRegs (1 te gMaxNumEtapas - 1) <=
BancoRegs (O to gMaxNumE~ - A)
BancoRegs (O) <= Da,toln;
end if; .
if NuevoSensorln = '1' then
for i in 1 to gMaxNurnEtapas - 1 loop
BancoRegs (i) <= (others =>. 'O') ;
end loop;
end if;
endif;
end proceSB;
end FUNCIONAL;
LectBancoMuestras std_logic
end record;
entity Decod la
port(
DirecCPU in std_logic_V'eCtorlg-BitsDirecCPU - 1 downto O}
EscrN in std_logic;
Seleccion out DecodSelRecord
};
endDecod
En este caso, las seales de seleccin se han incluido en una estructura tipo regis-
tro (record). De esta forma, una posible inclusin futura de una seal de seleccin no
modifica la interfaz, reduciendo el riesgo deerrores. La definicin de las seales que
contiene la estructura record se realiza en el paquete de tipos bsicos y constantes.
El objetivo de estas estructuras de datos es que sean lo suficientemente flexi-
bles como para permitir cmodamente la variacin de los parmetros. Al mismo
tiempo deben facilitar el que posibles modificaciones afecten al menor nmero
posible de ficheros o entidades. "
LISTADO 6-20. Asignacin de buses con diferentes tamaos. Puede dar lugar a
errores.
426 VHDL. Lenguaje estndar de Diseo Electrnico
end generate;
else
-- Cdigo generado en caso contrario
end if;
end if;
end process;
end if;
endif;
end process;
end if;
end process;
end FUCIONAL;
Sentencias while cond loop. Deben ser sustituidas por sentencias for rango
loop junto con sentencias if not cond then exi t.
6.5.3.5.5. Nomenclatura
Cuando se realizan diseos genricos, se generan una gran cantidad de constantes y
tipos. Es necesario establecer un criterio claro para nombrar estos tipos y datos, ya
que, de lo contrario, es fcil perderse en el significado de cada nombre. Esto se hace
ms importante cuando el equipo de diseo est formado por varios diseadores.
A continuacin se dan algunos ejemplos de este tipo de reglas.
Nombres de genricos: llevarn el prefijo g. Ejemplo: gMaxMemBloques.
Nombres de constantes: llevarn el prefijo c. Ejemplo: cBitsBusCPU.
Ancho de buses: cBitsNombreBus.
Mximo valor de datos: cMaxNombreDato.
Nmero de bits para codificar datos: cBitsMaxNombreDato.
ltimo valor de un dato: cUltimoNombreDato.
Declaracin de tipo: utilizar el prefijo t. Ejemplo: tBusCPU.
En el Listado 6-15 se muestra un paquete de definicin de tipos bsicos y cons-
tantes utilizando estas reglas. Conviene hacer un anlisis detallado al principio del
proyecto de los datos y estructuras a utilizar con objeto de generar unas normas cla-
ras y sencillas en este sentido.
Entendemos por diseo configurable aquel que posee ciertos parmetros que, al va-
riarlos, modifican la funcionalidad a nivel RT del componente. En este sentido, el
diseo configurable implica un grado mayor de flexibilidad que el diseo genrico.
Como ejemplo podemos fijarnos en la Tabla 6-7. Esta tabla recoge los parme-
tros de configuracin de un diseo configurable de un transmisor/receptor serie
asncrono. Como puede verse en la tabla, existen una gran variedad de parmetros
que permiten mltiples configuraciones con muy distintas caractersticas. Seleccio-
nando los parmetros adecuados podramos configurar un transmisor, receptor o
transmisor/receptor, con frecuencias de funcionamiento fijas o programables, con
longitudes de palabra fijas o programables, etc.
Como resultado, en una tarde, un diseador podra estudiar varias alternativas,
analizar su coste y escoger la solucin ms adecuada a su diseo.
Los diseos configurables poseen ventajas parecidas, e incluso mayores, que el
diseo genrico en cuanto a la evaluacin de alternativas, anlisis y organizacin
del diseo, simplificacin del cambio de tecnologa, etc. Pero de igual manera que
comparte las ventajas, tambin comparte con el diseo genrico los mismos proble-
mas, acentuados adems en algunos casos. La complejidad del cdigo es mucho
mayor en los diseos configurables que en los diseos genricos. Asimismo, la difi-
cultad de las pruebas y el tiempo de desarrollo crecen de forma exponencial con la
432 VHDL. Lenguaje estndar de Diseo Electrnico
configurabilidad del componente. Por otro lado, las prestaciones alcanzables con
los diseos configurables pueden ser menores que las que se alcanzan con los dise-
os genricos, ya que deben buscarse ms soluciones de compromiso.
Al contrario que los diseos genricos, los diseos configurables no son nunca un
resultado colateral de un proyecto, sino que son el resultado de un proyecto concre-
to de realizacin de un componente de biblioteca.
6. La gestin del diseo 433
(BCLRON o BCLROFF)
(PR o RR) (TRUE/FALSE)
cGenintStatus, cirqDtack
--- Sintetizador
--- 8
.vhd .vhd .vhd
config. mod.vhd
-8
FIGURA 6-15. Componente configurable generado por programa.
-8
~
config.vhd ~
mod.vhd
...
SetPattern(seal ...
SetPattern(seal wait unlil slrobe = '1 ';
CheckPattern( ...)
vectores
...
SetPattern(seal 1) Verificador de seal 2(s2)
SetPattern(seal 2)
wail unlil strobe = '1 ';
vectores CheckPattern( ...) Seal de control (c2)
...
wait unlil slrobe ='1 ';
CheckPattern( ...}
6.7. EJERCICIOS
entity CALC_SENO is
port
a in real; -- Mt.r~ 0.0 Y 1..0
a2 in real; --: cuadrado de a.
start in std_lOgic; .
x out real r
);
eDd CALC_SENO;
k := k * (k + 1) * (k + 2);
y := - a2 * y;
n := n + 1;
end loop;
x <= z;
end process;
end ALGORITMO;
7. Realizar un diseo genrico de un contador BCD cuyo nmero de dgitos sea pa-
rametrizable entre 1 y 4.
entity BANCO_INDEX i8
port (
Clk in std_logic.;
Busca in std_logic;
Indice in std_logic_vector(7 downto O);
Salida out std_logic_vector(31 downto O)
);
end BANCO_INDEX;
6.8. BIBLIOGRAFA
DOCUMENTO DE REOUISITOS
Descripcin de la aplicacin
443
444 VHDL. Lenguaje estndar de Diseo Electrnico
Entradas
Sensores: Sensor de entrada de las monedas, que detectar el tipo de moneda que
se ha echado. Los tipos de moneda previstos inicialmente son seis (duro, cinco
duros, diez duros, veinte duros, doscientas pesetas y quinientas pesetas).
Botones: Botones de producto, que servirn para seleccionar el producto que se
quiere comprar y tambin para seleccionar el producto cuyo precio se quiere
programar. En principio est previsto un nmero de cuatro productos.
Botn de devolucin de monedas, que servir para que el usuario pueda
recuperar su dinero. Tambin se podr utilizar este botn para indicar el fin de
la programacin del precio de un producto determinado.
Botones de programacin de precio, sern dos botenes para programar el
precio deseado para cada producto. Un botn incrementar y otro decrementar
el precio por cada pulsacin. El intervalo de incremento se dejar abierto en
esta etapa del diseo, definindose ms claramente en etapas posteriores.
Interruptores: Interruptor de cambio de modo de funcionamiento, este interruptor
seleccionar entre los dos posibles modos de funcionamiento: funcionamiento
normal y modo de programacin de precios.
Salidas
Actuadores: Apertura de las trampillas de los productos, el ASIC deber abrir,
cuando se cumplan las condiciones necesarias para ello, las trampillas de cada
uno de los productos. En principio deber actuar sobre cada trampilla de pro-
ducto.
Apertura de las trampillas de las monedas, dispondr de tantos actuadores
como tipos de monedas para devolver el cambio. En principio habr cinco
trampillas para la devolucin del cambio.
Apndice l. Sistema Colamatic 445
Control de la devolucin del cambio: deber calcular el cambio que hay que
devolver al usuario, teniendo como criterio principal el devolver el mnimo
nmero de monedas posible (monedas de mximo valor) siempre que estn
disponibles. Adems, deber conocer el nmero de monedas de cada tipo dis-
ponibles en el interior de la mquina y actualizarlos a medida que se vaya
introduciendo dinero. Se supondr que cada vez que se abre la mquina se
rellenan los cajetines de las monedas con un nmero de monedas que se
determinar ms adelante. Cada uno de los carriles de monedas tendr una
trampilla independiente.
Control de llenado de los monederos: cuando se detecte que alguno de los almace-
nes de monedas se ha llenado, se abrir una trampilla que har que las monedas
introducidas caigan en la caja de recaudacin.
446 VHDL. Lenguaje estndar de Diseo Electrnico
Los LEDs de falta de producto se iluminarn cuando se detecte que falta algn
producto, en modo de funcionamiento normal, y cuando se selecciona un producto
para programar su precio, en modo de programacin de precios.
Documentacin aplicable
DOCUMENTO DE ESPECIFICACIONES
Introduccin
Documentacin aplicable
Ninguna conocida.
Terminologa usada
Los nombres de las seales de entrada y salida, as como los nombres de los
bloques funcionales, intentan facilitar la comprensin de su funcionalidad al m-
ximo.
Especificaciones globales
Nombre Descripcin
ENTRADAS
Clk Reloj principal del sistema (frecuencia por determinar)
ResN Seal de inicializacin global del sistema (activa por nivel bajo)
SALIDAS
TrampProd Seales que controlan la apertura de las trampillas de los productos
NoHayCambio Seal que controla el LED que indica que no hay cambio
PrecioProd precioProd--r-:==l__
ProgPrecio SelRegPVP SelRegpVp~ Precios V
AIExterior
Bloque A1Exterior. Este bloque se encargar de generar las seales para la visua-
lizacin externa a travs de los visualizadores de 7 segmentos y de los LEDs.
En modo de funcionamiento normal (InteModo = 'O'), se iluminarn los LEDs
correspondientes a aquellas lneas de producto que estn vacas. El visualizador
mostrar diferentes valores, dependiendo de las acciones del usuario:
Este bloque generar las seales de entrada a los registros de los precios (blo-
que RegPrecio). Generar unas seales que actuarn como habilitacin de cada uno
de los registros de precio de los productos (SelRegPVP) y otra en la que se encon-
trar el precio a almacenar (PrecioProd).
Bloque Sirve Cola. Este bloque es el encargado del control de la trampilla de los
productos y de detectar la disponibilidad de productos. Generar las seales que
indiquen que no hay producto.
Especificaciones operacionales.
Formato y rango de los datos
Parmetros elctricos
Tensin de alimentacin = 5 V 0,5 V.
Consumo esttico y dinmico: el consumo no ser un parmetro crtico en este
diseo (TBD).
Margen de temperaturas
Frecuencia de funcionamiento
Encapsulado
El circuito tiene un total de 47 seales de entrada y salida. A esto hay que aadir las
necesarias para alimentacin y masa y la posibilidad de tener que aadir alguna
seal externa adicional para test. Esto se definir en las etapas posteriores del diseo.
El encapsulado final del circuito no est definido, aunque se prev necesario un
PLCC de 68 pines.
Introduccin
Documentos aplicables
Ninguna conocida.
454 VHDL. Lenguaje estndar de Diseo Electrnico
Descripcin arquitectural
PrecioProd PrecioProd ~
ProgPrecio
SelRegPVP SelRegPVP ~ PrecosV
AIExteror
SirveCola
Monedero
PreciosV-'-- --l
Bloque AIExterior
l/nteMod~
PrecioProd -
-1 NoHayProd
A/Exterior
-i DispUnidad
IProduct9>-
UneaVacia-
-1 DispDecena
H DispCentena
<,
PrecioProd-
Convertidor -------rl DispUnidad>
entero- MUX H DispDecena>
7 segmentos
Dinero/nt-
_---- rl DispCentena>
l/nteModo >---
"-.......
I Producto
MUX H NoHayProd>
LineaVacia l
\. L-------- ..J
Bloque ProgPrecio
Este bloque generar las seales de entrada a los registros de los precios (blo-
que RegPrecio). Generar unas seales que actuarn como habilitacin de cada uno
de los registros de precio de los productos (SeIRegPVP) y otra en la que se encon-
trar el precio a almacenar (PrecioProd).
PrecoProd
ProgPrecio
SelRegPVP
Bloque RegPrecio
En este bloque se almacenarn los precios programados para cada uno de los pro-
ductos. Como salda tendr unas seales (Precios V) que indicarn los precios de
cada uno de dichos productos.
Este bloque contiene cuatro registros en los que se almacenarn los precios
programados para cada producto, con las seales generadas por el bloque anterior-
mente descrito. Los precios se codifican con valores enteros que Valan entre O
y 975.
Apndice l. Sistema Co/amatc 457
PrecioProd -r:==L_
se/RegpVp~ . Precios V
O Q,-----
PreciosV(1 )
Se/RegPVP(1) en
O QI-- PreciosV(2)
SeIRegPVP(2) en
O Qf-- PreciosV(3)
SeIRegPVP(3) en
Este bloque es muy sencillo, ya que simplemente lleva la cuenta de los produc-
tos que quedan en cada lnea, Inicialmente se considera que la lnea est llena con
30 productos,
Internamente contiene un contador que se decrementa cada vez que se abre la
trampilla del producto correspondiente (TrampProd(i) = '} ').
Bloque Monedero
Este bloque es el encargado del control general de la mquina. Las funciones prin-
cipales que se realizan en l son:
HayCa
Estado cambio: en este estado se realiza el clculo del cambio que hay que
devolver, comprobndose si hay cambio suficiente en los monederos.
Estado devuelve: se entra en este estado cada vez que se pulsa el botn de
devolucin de monedas (BotDevuelve). En l se abren las trampillas de las
monedas correpondientes.
Para la realizacin del test funcional del sistema se realizarn un conjunto de simu-
laciones de los bloques por separado y una simulacin general de todo el sistema.
La estrategia que se seguir ser comprobar de forma exhaustiva cada uno de los
requisitos del sistema, ponindolo en situacin lmite en algunos casos. Asimismo, se
comprobarn los cambios de modo del sistema (inicializacin ~ ... modo de pro-
gramacin de precios ~ ... modo de funcionamiento normal).
Requisitos Qu se ha comprobado?
Clculo del cambio Comprobacin del clculo del cambio para distintas circuns-
tancias (cuando hay todo tipo de monedas, cuando slo que-
dan monedas pequeas, etc.). Comprobacin del caso en el
que no hay cambio. Comprobacin de la salida por los vi-
sualizadores.
I Este requisito no se encontraba explcito en las especificaciones. Si se echa ms dinero del mxi-
mo permitido (> 1.000 pesetas), las monedas introducidas en la mquina se devolvern.
CONCLUSIN
11.1. ADVERTENCIA
Las reglas que aparecen en el texto no son ms que recomendaciones (su utilizacin
est pensada para una herramienta comercial especfica y pueden no ser aplicables
para otras). En ningn momento han de convertirse en una obligacin si el uso de
las mismas va en detrimento de la productividad. El director del equipo de diseo
461
462 VHDL. Lenguaje estndar de Diseo Electrnico
11.2.2. Identificadores
Para facilitar la lectura de las descripciones, es muy til usar maysculas y mins-
culas en los nombres de cualquier objeto del VHDL. Por ejemplo, en lugar de escri-
bir una funcin con el nombre detectordeflancopositivo, es mejor escribir el nombre
como DetectorDeFlancoPositivo. Esto es preferible a usar el carcter '_', que esta-
ra reservado para otros cometidos.
Apndice 11.Normas de codificacin y modelado en VHDL 463
i:integer.
s:std_logic.
b:bit.
l:boo1ean.
u:std_u10gic.
t:Declaracin de tipos.
e:Declaracin de constantes ..
Si va acompaado con una 'v' ('sv', 'xv', ... ) indica que se trata de un vector.
Si va acompaado con una 'e' ('se', 'xve', ... ) indica que se trata de una constante.
De esta manera la funcin DevuelveUnEntero quedara iDevuelveUnEntero,
resultando explcito el tipo.
11.2.3. Comentarios
El objetivo de los comentarios es facilitar que el cdigo pueda ser entendido por
otra persona distinta a la que 10 ha escrito.
Los comentarios deberan estar en un nico idioma (ingls si va a ser ledo por
personas de distintas nacionalidades).
Su contenido debe ser 10 ms descriptivo posible y no una mera repeticin o
traduccin del cdigo VHDL, al que complementa.
Deben situarse prximos a las partes del cdigo que describen; no es aceptable
una cabecera que explique todo el cdigo que aparezca a continuacin.
Los comentarios debern alinearse y estar justificados para facilitar su lectura.
Cada fichero debera incluir una cabecera que contenga, como mnimo, la
siguiente informacin:
11.2.4. Tipos
Es recomendable que el bit situado a la izquierda de un vector sea siempre el ms
significativo, independientemente del orden de los bits. Por ejemplo, en VectorDe-
Bits(O to 15), el bit O es el bit ms significativo (MSB), mientras que en' Vector-
DeBits (15 downto O), el bit Oes el bit menos significativo (LSB).
De este modo se recomienda que a la hora de declarar tipos, el orden, en el
caso en el que el ndice sea un entero (caso tpico de buses), sea descendente, es
decir, VectorDeBits(7 downto O). Esto facilitar la lectura del contenido de los bits
en las simulaciones.
Se recomienda escribir el cdigo de manera que se pueda modificar el tipo de
una seal o variable sin modificar el resultado de las simulaciones. Esto implica:
En cualquier caso, las seales estarn comentadas, una a una, como se ha dicho
anteriormente.
En las referencias a los componentes no se usar la asignacin por posicin, a
no ser que los nombres de las seales sean 10 suficientemente representativos (mis-
mo nombre o derivado). Lo mismo se aplicar a los parmetros genricos. Por
ejemplo:
camponent CampContador1
generic (
tSubida TIME; -- Tiempo de subida de las salidas
tBajada TIME); , '-- Tiempo de bajada de las salidas
port (
sEnab1e in std_logic; -- Hebi1itaci6n de cuenta
sClk in std;:._1ogic; -- Reloj del sistema
sReset_n in std_logic; -- Reset general (nivel bajo)
sFinCuenta out std_logic; -- Fin de cuenta (activo nivel alto)
-- (activoun solo ciclo de sC1k)
svCuenta out std_logic_vector(3 downto O)); -- Valor del contador
end camponent;
begin
Contador1 : CompContador1
gEmeric 1Il@(
tSubida := 2 ns,
. tBajada:= 2 ns)
. poit map(
sEnab1e => ssl,
sC1k => ss2,
sReset_n => ss3,
SFinCuenta => ss4,
svCuenta => svb1);
end Funcional;
466 VHDL. Lenguaje estndar de Diseo Electrnico
Todos los procesos contarn con una etiqueta descriptiva. Lo mismo se aplica a
cualquier sentencia concurrente siempre que esto mejore la legibilidad. De este
modo es ms fcil referirse a ellos en las simulaciones interactivas.
Los procesos con una sola sentencia wait (tpico en procesos sintetizables)
debern usar en su lugar una lista de sensibilidad en lugar de la sentencia wait, ya
que esto mejora la legibilidad.
La lista de sensibilidad de un proceso deber incluir TODAS las seales que
estn en la parte izquierda de una asignacin, as como las que vayan a ser usadas
en construcciones condicionales (if, case, etc.). Esto es especialmente importante en
aquellas descripciones orientadas a la sntesis. Por ejemplo:
BIEN MAL
Usar variables siempre que no vayan a tener visibilidad juera del proceso en
el que son declaradas y usadas.
entity pl is
port ( sell, sel2 in bit;
IW in bit;
reset~N in bit;
c1k in bit;
datoin in bit;
architecture a2 of pl is
signal datol, dato2, readl , read2,. Wl;"ite1, write2 bit)
begin .
-- Parte combinacional
-- Salida combinacional
-- CORRECTO
-- Asignacin combinacional
En otros casos se puede usar la sentencia else, siempre que haya decisiones
excluyentes con if-then-elsif:
Hacer los bloques secuenciales con la construccin if clk'event and clk 'L' =
(o 'O'), no pudiendo aparecer ninguna otra condicin en dicha construc-
cin. En casos muy especiales se pueden usar otras construcciones (ver
apartado //.5.10).
474 VHDL. Lenguaje estndar de Diseo Electrnico
-- CORROCTO:
Biestable con enable
-----_ .....
-..;...---------....
_------:--~~;..~
....
pl : process (reset_N., d, e, 'clk}
begin
if reset_N = 'O' then
,1 <= 'O'
elsif clk' event and clk = '1' then
if e = 'O' then
q <= d
end if
end if
end process pI;
p2 : process(reset_N, datoInt,clk2)
begin "
if. reset_N = 'O' then
datoOut <= ' O' ;
elsif clk2' event and clk2 = '1' then
datoOut <= datolnt;
end if.;
end process p2;
-- INCORRECro:
la lnea donde se usa el reloj est dentro de un bucle
-----------~~--~--~~._---~------------~-------------------~~~-~--~-~~
for i in O to 1 loop
if reset_N '0' then=
if b(i) =
'1' and c(i) = '0' then
dato (i) <= TU",;
el.se
dato(i) <= '1';
end'if;
elsif clk'event and clk = '1' then
tflli:recctonc~reaaraddtess, mascara, mustra) tn
dato(i) <= datoin(i);
end ifl
end if;
end loop;
Usar funciones para reducir la complejidad del cdigo (ver apartado 1/.5.5).
En algunas descripciones puede ser necesaria una gran cantidad de decisiones
antes de realizar una accin determinada. El englobar esto en una funcin o proce-
dimiento permite que el cdigo sea ms fcil de leer y hace que la herramienta de
sntesis cuente con un particionado que le facilita la optimizacin. Un ejemplo es el
siguiente:
if reset.)il =
iO' then
dato <:; (others => '0');
476 VHDL. Lenguaje estndar de Diseo Electrnico
-- Parte secuencial
procesa lreset'"..:.1t,"''ctk; din)
bgin
-tf reSetJ{ ;n (), then
dato anterior <= '0';
~lsif 'lx'I ~t ;aRd d_k -it, '1: then
dato_arlteior .<= _.din;
end if;
end process;
-- Parte combinacional
dout <= i l'----when dato_anteri -= ' (}' and din ~-, l' else
'O' i
Apndice 11.Normas de codificacin y modelado en VHDL 477
return I'g
end RestaUno
begin
end Sintetizable;
else
's~gESj;:ado <= AOORT
end if .
when FIN =>
if enl::i:c1dal = 'O' and'entrada2 = .'{}, and entrada3 = 'O tlien .'
sigEstado <= INICIO
else
sigEstado <= FIN;
end if
end case
end process C()ffilNACI~
-- 'Generacin de salidas
-- Si salidas =
flestado actual, entradas) Mquina de Mealy
-- Si salidas = f(estado actual) Mquina de Moore
-- En este caso es una mquina de Moore
salida1 .<= '1' when estado = INICIO el se
'1' when estado =
DE'lEl'_3 else
'Ol
Las entradas y salidas de los bloques de ms alto nivel deberan ser de tipo
std_ulogic o std_logic. Para asegurarse de que no se estn haciendo cone-
xiones de seales no deseadas, se pueden usar tipos no resueltos (en este
caso, std_ulogic).
En bloques de menor jerarqua se pueden usar tipos no estndar, ya que
stos permiten una rpida ampliacin de la funcionalidad y son ms fciles
de mantener y entender por el equipo de diseo.
Cuando se necesiten varios resultados de una funcin, se podrn usar varia-
bles tipo registro. Estas variables tienen que tener los campos relacionados
para evitar confusiones.
/1.5.13.1. Introduccin
En sntesis, como mucho, slo permite que los genricos sean enteros, o bien tipos
enumerados que puedan asimilarse a enteros. Es por ello que para hacer una para-
metrizacin eficaz, no es suficiente con el uso de genricos.
La solucin que aqu se propone es el uso combinado de genricos y constantes
definidas en un package. El uso de estas constantes permite controlar el proceso de
sntesis, de modo que se puede:
Los genricos y las constantes se pueden usar siempre que representen valo-
res escalares sin ningn problema:
entity Contador is
Generic( maxCuenta natural:= 10;
valActivo natural:= 7);
Port( ... ) ;
end Contador;
1/.6. EJEMPLOS
123 4 5 678
--34567890123456789Clf23456789012345678901234567890123456789012j45678~0234567890
--------------------------------------------_._ ....... '--_.--..;,:._ .... _._--'
........ _--_.:.. .....-_ ..... ... __ .... _._-,._-
..;.\-
-- Fichero transmisor.vhd
entity Transmisor is
Generic( n integer:= 8 ); -- NUmero de bits
PRINCIPAL
process(clk, resetn, tempor, regDesp, temporLleno, enviando, "contador)
-------------------------------------------------------~---------------------- :
-- PROCEDIMIENl'O CARGA:
-- Si se est enviando y llega un nuevo dato" se almacena sobre \ln buffer
-- auxiliar siempre y cuando est vaco.
-- El dato se pierde si no eS almacenado.
-- Este procedimiento acta sobre seales definidas en la arquitectura y que
-- no son enviadas como parmetros.
procedure Carga is
if not temporLleno then
temporLleno <= true;
tempor <= data;
If not enviando then
temporLleno <= false;
enviando <= true;
regDeSp <=< 'o' &data;
end if;
end if;
end Carga;
;.~-;-------------------.- .... ,"'!' ... ...;--:--~,_ ....... _---_ .... - ........ -------------------------~~ ... --~ ... -
-- PROCEDIMIENl'O ENVIA:
-- Se encarga de envif'os datos del registro ~ desplazamiento a travs de
';;-lil seal tx. .
-- Se enva un solo bit cad.; vez que'se llama el procedimiento: se desplaza
r: el registro y se Incrarenta el contador de bits.
'..i_ Ctnd acaba la transmi~i6n 'COl11Pruebasi hay algn dato pendiente en el
-'- buffer. Si lo hay, pasa auahSliUtir el nuevo dato.
-- Este procedimiento acta sobre seales. definidas en la arquitectura y que
-- no son enviadas como parmet:r;os." ,. .
procedure Envia(signal tx : out std.._ui<Sgic) is
begin
-- Slo entra cuando est transmitiendo. La seal 'enviando' se activa en
-- el proceso PRINCIPAL(se pone a true)
if enviando then
if contador <= N then
-- Transmisin de un bit
tx <= regDesp(N)
-- Desplazamiento
.;egOellP!N down.to 'll~:;_ J;egIlesp (N-l downto. O) "
regDesp(a) <= '1';
486 VHDL. Lenguaje estndar de Diseo Electrnico
-- Inicializacin
if resetn = 'O' then
enviando <= false;
tempdrLleno <= false;
tenqx>r <= (others => 'O');
regDesp <= (others => '1');
-- Funcionamiento sncrono
elsif clk'event and clk = '1' then
if load = '1' then
carga;
end if;
end if;
-- COnfigllraci6n
487
488 Glosario
491
492 ndice
Smulacin Tiempo,
comparativa, 395 de simulacin, 252
realista, 298 de propagacin, 297, 298, 299
Simulador lgico, 287 Time-driven, 139
Sintaxis, 150 Tipos de datos, 61,251
Sntesis, 22, 28 abstractos, 183
comportamental, 184 bit, 65,183
fsica, 181 compuestos, 67
lgica, 181, 196 declaracin, 62
mapeo tecnolgico, 181 enumerado, 65, 200, 276
transferencia de registros (RT), 181, escalares, 63, 200
196 estructurados, 427
Sistemas embebidos o empotrados resueltos, 126,256
(Embedded Systems), 149 Topografa de un circuito, 3, 6, 24, 403
Sistemas en chip (Systems on chip, Traductor, 146
SOCo Systems on silicon, SOS), 9, 23,
410
Ubicacin y conexionado, 6, 24, 27
Situaciones prohibidas, 303
UDL/I, 13,19
Sobrecarga
Unidad
operadores, 76, 125,201
de control, 197
subprogramas, 124
de datos, 197
Sobre-especificacin, 367
de diseo, 155
Standard Delay Format, SDF, 30
Unit De/ay, 142
Subprogramas, 119
llamada concurrente, 106
llamada secuencial, 100 Validacin, 138,392,408
Subtipos de datos, declaracin, 66 Valor
Sumador, 18 actual, 161
completo, 311 conducido, 161
con acarreo anticipado, 313 efectivo, 161
con acarreo de propagacin , 311 Variables, 59
asignacin, 59, 88
globales, 254
Tareas Vector, tipo, 68
asignacin, 374 Vectores
coordinacin, 374 de simulacin, 403
Tecnologas, 3,9,378,385 de test, 289
Temporizacin, Verificacin, 286
funcional,182 automtica, 290
lgica, 182 temporal, 303, 344
RT,182 Verilog, 10, 13, 15, 18
Terminacin, 144 VHDL, 9,13-21
Test, 24, 30, 144 VHDL-AMS,l1
cobertura de faltas, 24 VIF, 155
de fabricacin, 390, 409 VITAL, 21, 30,188
diseo para testabilidad (Design for
testability, DFT), 24
Wait, sentencia, 82, 214, 219, 279
mquina de, 289
testabilidad, 24
vectores de test, 289 Zero Delay, 143