Vous êtes sur la page 1sur 28

http://ccc.inaoep.

mx/fpgacentral

Contenido
I. Introducción
Introducción a VHDL II. Dispositivos CPLD y FPGA
y dispositivos FPGA III. Diseño electrónico con CAD
IV. Sintaxis del lenguaje VHDL
© Miguel Arias Estrada 2005 V. Diseño con VHDL
INAOE - Ciencias Computacionales
VI. Síntesis digital
FPGAcentral
http://ccc.inaoep.mx/fpgacentral VII. Gestión de diseño
ariasm@inaoep.mx

© FPGAcentral - INAOE 2

Formato del curso Objetivos


♦ Curso introductorio ♦ El objetivo de este curso introductorio es:
♦ Exposición de temas importantes: – Actualizar sobre las tecnologías actuales y futuras
– Tecnologías contemporaneas de diseño de sistemas digitales
– Introducción al lenguaje VHDL para Diseño Digital – Guiar en las metodologías contemporaneas de
diseño digital basadas en lenguajes HDL
– Ejemplos de uso
– Comprender las bases del lenguaje VHDL para
♦ Ejercicios introductorios usando Active-VHDL que el estudiante pueda abordar temas
– Circuitos combinacionales avanzados por su cuenta
– Circuitos secuenciales – Conocer el funcionamiento básico de un
– Circuito ejemplo simulador y sintetizador de VHDL

© FPGAcentral - INAOE 3 © FPGAcentral - INAOE 4

I. Introducción
1. Qué es VHDL
2. VHDL y Diseño Digital
I. Introducción 3. Metodologías de diseño
4. Niveles de abstracción y diseño digital

© FPGAcentral - INAOE 6

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

¿ Por qué surge VHDL ? Qué es VHDL


♦ Necesidad de compartir información entre ♦ VHDL es un lenguaje de descripción de
integrantes y equipos de un proyecto hardware estandarizado por la IEEE
♦ Necesidad de reutilizar módulos que ya han (1076-93)
sido desarrollados, depurados y probados
♦ Necesidad de tener un lenguaje portable a
diversos fabricantes ♦ VHDL – “VHSIC Hardware Description
♦ Tener un lenguaje estructurado para Language”
modelar, simular y sintetizar circuitos ♦ VHSIC – “Very High Speed Integrated
digitales Circuit”

© FPGAcentral - INAOE 7 © FPGAcentral - INAOE 8

Otros lenguajes de descripción Hardware Breve historia de VHDL


♦ ABEL ♦ Desarrollado en los años 80 por el
♦ CUPL departamento de defensa de EU
♦ PALASM
♦ Verilog (Cadence)
♦ Adoptado como estandar por la IEEE
♦ AHDL (Altera Hardware Description Language) en 1987 (estandar IEEE 1076-87)
♦ Handel-C (Celoxica)
♦ System-C (Synopsys)
♦ Revisado por la IEEE en 1993
(estandar IEEE 1076-93)

© FPGAcentral - INAOE 9 © FPGAcentral - INAOE 10

Similitudes y diferencias entre VHDL


Ventajas de VHDL para el diseño digital
y los lenguajes de programación
♦ Similitudes ♦ Estandar reconocido por fabricantes de
– VHDL es un lenguaje estructurado dispositivos digitales y herramientas
– Reutilización de submódulos CAD
– Portable
♦ Ciclo de diseño, realización y
♦ Diferencias
depuración integrado
– VHDL (y en general los HDLs) la información ♦ La mayor parte de los errores de diseño
temporal es explícita se localizan durante la compilación y
– Los comandos no siempre son procesados simulación, evitando ciclos de
secuencialemnte
– VHDL no se compila en un ejecutable, sino que se
fabricación-depuración prolongados
sintetiza en un circuito digital
© FPGAcentral - INAOE 11 © FPGAcentral - INAOE 12

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Metodologías de realización de un
Ventajas de VHDL para el diseño digital
proyecto
♦ VHDL es un lenguaje moderno, poderoso y Ascendente (Bottom-up)
general • Se comienza con componentes simples que se
van ensamblando y encapsulando en
♦ Permite la concepción modular y jerárquica componentes cada vez mas complejos hasta
de sistemas electrónicos llegar al sistema
♦ VHDL permite la descripción y simulación de
eventos concurrentes (paralelos) Descendente (Top-down)
♦ Permite mezclar diferentes niveles de • Se especifica y prueba el sistema con
herramientas de alto nivel de abstracción y
abstracción al describir un sistema digital posteriormente se van definiendo e
implementando los niveles de inferiores hasta
llegar a nivel componente

© FPGAcentral - INAOE 13 © FPGAcentral - INAOE 14

Espacio de diseño
Piramide de abstracción
Tiempo
Aplicación
Compilador/
Interprete
software Sist. Operativo
hardware Microprocesador
ALU, Memoria
Superficie Costo Registros, sumadores
Compuertas digitales
• Se busca un balance entre tiempo de diseño,
Transistores MOS
superficie de silicio ocupada, y costo total
Física de Semiconductores
© FPGAcentral - INAOE 15 © FPGAcentral - INAOE 16

< 10 pág. Diagrama de Gajski y Kuhn


> 100 pág. Especs
+ docs aplicables Requisitos y
Especificaciones
(Niveles de abstracción de un proyecto)
1.000-2.000 líneas
de código HDL Architectural Structural
Behavioral
(modelo +Banco Funciones E/S
y Restricciones Algorithmic
Pruebas)
Processor
Systems Functional Block
> 10.000 líneas de Hardware Modules
Arquitectura Nivel
código HDL (Modelo Algorithms Logic
Transf. Registros ALUs, Registers
+ BancoPruebas) Register Transfer
Circuit Gates, FFs
Logic
> 100.000 comp. Transistors
Diseño lógico Transfer Functions
> 100-200.000 vect.
de verific. y prueba compuertas Rectangles

Cell, Module Plans


Niveles
> 1.000.000 Trts Eléctrico Floor Plans
> 500.000 bits Bits (disp. prog. FPGA)
10.000.000 rect. Geométrico (Cls) Clusters

Physical Partitions
Pirámide de complejidad y niveles de abstracción
de las distintas fases del diseño hardware
© FPGAcentral - INAOE 17 © FPGAcentral - INAOE 18

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

II. CPLD y FPGA


1. Evolución de la tecnología digital
2. SPLD
II. CPLD y FPGA 3. CPLD
4. FPGA
5. ASIC
6. VLSI y circuitos programables

© FPGAcentral - INAOE 20

Evolución de la lógica programable Clasificación de la lógica digital


♦ ECL - Años 60s y 70s
Logic
♦ TTL y CMOS – Años 70s y 80s
– TTL – Transistor-Transistor Logic
• Dispositivos muy utilizados en los años 70s y 80s para el Standard
Logic ASIC
diseño digital
• Serie 74xx
Programmable
Logic Devices
Gate Cell-Based Full Custom
Arrays ICs ICs
– CMOS – Complementary Metal Oxyde Semiconductor (PLDs)

• Similares a TTL implementados con tecnología CMOS


• Serie 40xx
♦ SPLD – Años 80s SPLDs
(PALs) CPLDs FPGAs
♦ CPLD y FPGA – Años 90s a la fecha
♦ SoC (Sistemas en un chip) – 2000 en adelante

© FPGAcentral - INAOE 21 © FPGAcentral - INAOE 22

SPLD –
PLD – Arreglo AND-OR
Simple Programmable Logic Device
♦ PAL – Programmable Array of Logic
Global 3 Global 2 or 4
Clocks Tri-State
Macrocell 1 I/O

♦ PLA – Programmable Logic Array


♦ PLD - Programmable Logic Device AND
Product-
Term
Array
Allocator
36

♦ Arreglos AND-OR programables con From


FastCONNECT

salidas directas o a registros (flip-flops)


♦ Pueden contener el equivalente de 10 a
100 circuitos TTL en un solo chip To
Macrocell 18 I/O

FastCONNECT

© FPGAcentral - INAOE 23 © FPGAcentral - INAOE 24

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

CPLD CPLD
Complex Programmable Logic Device Complex Programmable Logic Device
♦ Contiene varios elementos JTAG Port
3
JTAG
In-System
Programming Controller
Controller
reconfigurables tipo PLA
interconectados por una matriz de Function
I/O
switcheo I/O
Block 1

♦ Equivale de 4 a 64 PLAs I/O


Function
Block 2
I/O
♦ Circuitos de 1000 a 10000 compuertas I/O
Blocks FastCONNECT
Switch Matrix

en un solo chip Global


Clocks 3
Function
Block 3

♦ Tiempos de retardo de pin a pin fijos del Global


Set/Reset 1

orden de ns. Global


Tri-
Function
Block 4

States 2 or 4

© FPGAcentral - INAOE 25 © FPGAcentral - INAOE 26

FPGA FPGA
Field Programmable Gate Array Field Programmable Gate Array
♦ Arreglo bidimensional de módulos digitales • Alta densidad -> 1M Compuertas eq.
Configurable
reprogramables con interconexiones Logic Blocks (CLBs)
• LUT basadas en SRAM para lógica
digital o memoria RAM doble puerto
programables C1 C2 C3 C4
• Estructura similar a un ASIC
H1 DIN S/R EC
♦ Capacidad de 5000 a 10 millones de • Buses de interconexión 3-estados
S/R
Control

G4

compuertas en un solo chip


G
DIN
G3 SD

G2 Func.
F'
G' D Q
• Reconfigurable múltiples veces
Gen. H'

G1
EC

♦ Tiempos de retardo dependientes de la


RD
1

H G'
Y
Func. H'
S/R
Gen.
arquitectura
Vcc
Slew Passive

F4
Control Rate Pull-Up,
Control Pull-Down

F3 F
Func. DIN
SD
F2 Gen.
F'
G' D Q
D Q
Output
Buffer
Pad

F1
♦ Sustituyen a ASIC de mediano tamaño
H'

Input
EC Buffer
Q D
RD Delay
1
H'
X

♦ Buena relación costo/rendimiento para


F'

K
I/O Blocks
producciones relativamente pequeñas CLB CLB (IOBs)
Programmable Switch
Matrix

Interconnect
CLB CLB

© FPGAcentral - INAOE 27 © FPGAcentral - INAOE 28

CLB de un FPGA (Xilinx) IOB de un FPGA (Xilinx)


C1 C2 C3 C4

H1 DIN S/R EC
S/R
Control

G4 DIN
SD
G3 G F'
D Q YQ
Func.
G'

G2 Gen.
H'

G1 EC
RD
1

H G'
Y
Func
H'
S/R

.Gen.
Control

F4
F3 F DIN
SD
Func. F'
XQ
F2 Gen. G' D Q

F1
H'

EC
RD
1
H'
F'
X
K

© FPGAcentral - INAOE 29 © FPGAcentral - INAOE 30

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Unidad de interconexiones (Xilinx) Interior del FPGA


Programmable Interconnect Points, PIPs (White)
Switch Routed Wires (Blue)
Matrix
CLB CLB

Direct
Switch Switch
Matrix Matrix Interconnect
(Green)

CLB CLB CLB


(Red)

Long Lines
(Purple)
© FPGAcentral - INAOE 31 © FPGAcentral - INAOE 32

ASIC
Application Specific Integrated Circuit
VLSI y Lógica Programable
♦ ASIC – Circuitos integrados para propósito ♦ El uso de FPGA permite el diseño de sistemas tan
específico complejos como microprocesadores o sistemas en
un solo chip
♦ Requiere fabricación
♦ El costo de desarrollo es relativamente bajo
♦ Costeable para grandes volúmenes ♦ No se depende de una fábrica de CI
♦ Ciclo de diseño largo ♦ Ciclo de diseño con FPGA corto, el diseño se puede
♦ Posibilidad de integrar partes analógicas y portar a un ASIC si la demanda lo requiere
digitales ♦ Los FPGAs están sustituyendo a los arreglos de
compuertas y a algunos ASIC debido a sus ventajas
♦ Mayor frecuencia de operación que los
♦ Potencial grande de desarrollo tecnológico en México
FPGAs con los FPGAs

© FPGAcentral - INAOE 33 © FPGAcentral - INAOE 34

Plataforma de desarrollo con FPGA FPGA vs DSP


D
a
t
♦ Computadora PC a 1G
R ASIC
♦ Herramienta CAD a100M
(Active, t
e
Foundation)
S
10M FPGA-Based
♦ Tarjetas de a
m 1M DSP
desarrollo p Multiple DSP Cores
l
(xess.com) e 100k or Chips
s
♦ Tarjetas PCI Single-Chip DSP
p 10k
(alphadata.co.uk) e
r
♦ Sistemas
s 1k MPU/MCU
Multimódulos y e
Less Complex More Complex
sistemas c Algorithm Complexity
o
dedicados n
d

♦ FPGAs son de 10 a 1000 veces más rápidos que un DSP


© FPGAcentral - INAOE 35 © FPGAcentral - INAOE 36

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Flujo de diseño Principales fabricantes de FPGAs


Especificación del diseño esquemático,
VHDL, y/o Verilog. Hay varios fabricantes
1 de herramientas como Synopsys, Aldec ♦ Xilinx (FPGA de 10K hasta 10 Mcompuertas)
(Xilinx Foundation), Mentor, Cadence, – www.xilinx.com
Viewlogic, y otros

Implementación Después de la síntesis


♦ Altera (FPGA y CPLD)
2
digital se realiza el posicionamiento y – www.altera.com
ruteado en el dispositivo FPGA. Se pueden
hacer simulaciones post-síntesis para ♦ Actel (FPGA de microfusibles)
asegurar el funcionamiento del diseño
M1 Technology – www.actel.com
Programación se programa el ♦ Triscend (SoC = Microprocesador + FPGA)
dispositivo FPGA y se valida el diseño 3 – www.triscend.com
Se puede reprogramar tantas veces
sea necesario para depurar

XC4000 XC4000 XC4000

© FPGAcentral - INAOE 37 © FPGAcentral - INAOE 38

III. Diseño Electrónico con


Herramientas CAD
1. Evolución de herramientas
III. Diseño Electrónico con 2. Flujo de diseño y compilación con VHDL
Herramientas CAD 3. Herramienta Active HDL para simulación
con VHDL
4. Herramienta Foundation de Xilinx para
simulación VHDL y síntesis FPGA

© FPGAcentral - INAOE 40

1. Evolución de herramientas Síntesis digital


♦ Diseño tradicional ascendente (bottom-up) basado ♦ A partir de una descripción VHDL, el
en esquemáticos “compilador” obtiene una descripción de
♦ Diseño con herramientas EDA (Electronic Design compuertas del circuito
Assistent) similar a otras herramientas de alto nivel
usadas en software ♦ La herramienta de ruteo adapta la
♦ Manejo de proyectos, archivos VHDL, bibliotecas, descripción de compuertas a los recursos
esquemáticos, etc. particulares del FPGA
♦ Simulación funcional VHDL, síntesis digital, ♦ Se pueden realizar simulaciones antes de la
simulación post-síntesis, ruteado en FPGA, programación física para comprobar que el
simulación con retardos asociados al dispositivo. circuito conserva la funcionalidad original

© FPGAcentral - INAOE 41 © FPGAcentral - INAOE 42

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Descripción Funcional
Nivel funcional 2. Flujo de diseño y compilación VHDL
Síntesis de VHDL
comportamiento Description

Arquitectura RT Nivel RT Synopsys VHDL


compiler
VHDL
Síntesis RT-Lógica Driver Synopsys Design
compiler
Nivel lógico
Circuito lógico
VHDL Gate-
Level Description
Posicionamiento e
Retroanotación
Interconexión VHDL
VHDL Simulator
Simulator

Implementación Simulation Compare Simulation


Output Output Output
Proceso de Síntesis
© FPGAcentral - INAOE 43 © FPGAcentral - INAOE 44

Desc. Física
3. Herramienta Active HDL
Especificación Topográfica (layout)
Funcional

♦ Ver documentación de Active HDL


Desc. Estructural
estudiante
Arquitectura jerárquica

Conjunto de bloques Conjunto de bloques


y módulos básicos Bib. De
y módulos básicos
(desc. estructural) celdas
(desc. funcional)

Flujo de diseño manual Flujo de diseño asistido por


ordenador

Esquema de las fases básicas del diseño ascendente (bottom-up)


© FPGAcentral - INAOE 45 © FPGAcentral - INAOE 46

4. Flujo de diseño de Xilinx Flujo de diseño de Xilinx


DSP COREGen
VHDL
& LogiBLOX
Verilog
Module Generator Behavioral Simulation Models
H
XNF D
.VEI
.NGO L
.VHI
VHDL Timing S
VHDL Verilog Requirements I
HDL Editor Translate Map Place & Route Configure
Verilog M
State Diagram .V U
Editor .VHD Express L
A
Schematic EDIF T
Capture XNF I
O
Gate Level EDIF/XNF .UCF .XNF Reports N
Simulator

Foundation Design Entry Tools

Xilinx Implementation Tools


Reports

BIT VHDL
EDIF SDF
JDEC Verilog

© FPGAcentral - INAOE 47 © FPGAcentral - INAOE 48

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

IV. Sintaxis de VHDL


1. Componentes básicos de VHDL
2. Elementos primitivos
IV. Sintaxis del Lenguaje VHDL
3. Declaraciones secuenciales
4. Señales y asignación de señales
5. Declaraciones concurrentes

© FPGAcentral - INAOE 50

1. Componentes básicos de VHDL 1. Componentes básicos de VHDL

♦ Biblioteca (Library)
Unidades de diseño Biblioteca
♦ Paquete (Package)
♦ Entidad (Entity)
Entity Entity
♦ Arquitectura (Architecture) Architecture Architecture
♦ Configuración Configuration Configuration
Package Compilador VHDL Package

© FPGAcentral - INAOE 51 © FPGAcentral - INAOE 52

Biblioteca (Library) Paquete (Package)


♦ Resultado de una compilación VHDL para simulación
posterior o para ser usada en otros diseños. ♦ Reúne un grupo de declaraciones
♦ Sirve para compartir diseños previamente compi-lados relacionadas y es compilada por separado.
sin revelar el contenido. ♦ Almacena subprogramas comunes, tipos de
• Bibliotecas: WORK y STANDARD
• No hay bibliotecas jerárquicas en VHDL datos, constantes y diseño de interfaces
• Se tienen que declarar antes de usarlas en otro diseño precompiladas. Se usa para:
– declaración de constantes
♦ Componentes: – declaración de subprogramas
– Paquete - declaraciones comúnes/compartidas – declaración de tipos
– Entidad - diseños compartidos ♦ Ejemplo:
– Arquitectura - implementacion de diseños package mis_defs is Encabezado del paquete
compartidos Constant retardo: time:=1ns;
– Configuración - versiones de diseños compartidos end mis_defs; No hay
contenido/cuerpo
© FPGAcentral - INAOE 53 © FPGAcentral - INAOE 54

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Modelo VHDL Entidad (Entity)


♦ Define un nuevo componente, sus interconexiones de
♦ Todo modelo se E/S y las declaraciones relacionadas.
Modelo VHDL
especifica por una ♦ La definición de una entidad no incluye la arqui-
Entidad – ENTIDAD o interfaz tectura del componente, y se puede utilizar sin
del componente conocerla.
Arquitectura modelado ♦ Sintaxis:
– ARQUITECTURA o
entity name is Requerido
descripción del [generics][ports] Opcional
comportamiento de [declarations {constants, types, signals}] Opcional
un componente [begin statements] No usado
generalmente
Entorno end [name]; Requerido
(nombre
opcional)
© FPGAcentral - INAOE 55 © FPGAcentral - INAOE 56

Entidad (Entity) Arquitectura (Architecture)


Una entidad especifíca las conexiones externas de un ♦ Especifíca el comportamiento del componente, sus
componente interconexiones y componentes internos. Tiene que
compilarse para hacerlo funcional. La arquitectura
entity COMPARA is Nombre del puerto, dirección puede ser modelizada con diferentes niveles de
port (A,B: in bit; y tipo de datos abstracción.
C: out bit);
♦ Las arquitecturas en VHDL se categorizan
end COMPARA;
dependiendo del estilo en:

bit – Funcional (Behavioral). Define un proceso


A bit descrito secuencialmente
bit COMPARA C – Flujo de datos (Dataflow). Incluye estructura y
B comportamiento
– Estructural (Structural). Define interconexiones
y componentes
© FPGAcentral - INAOE 57 © FPGAcentral - INAOE 58

Una entidad puede tener varias arquitecturas, solo una


esta activa. Arquitectura funcional (Behavioral)
Entity
xyz ♦ Ejemplo:

architecture ARQ1 of COMPARA is


begin
Architecture Architecture Architecture process (A,B)
a of xyz b of xyz c of xyz begin
if (A=B) then
♦ La sintáxis es: C <= '1' after 1 ns;
architecture name of entity_name is else
[declarations]
begin C <= '0' after 2 ns;
concurrent_statements end if;
end [name]; end process;
end ARQ1;
♦ Por convención, una arquitectura puede llamarse behavioral, dataflow,
o structural
© FPGAcentral - INAOE 59 © FPGAcentral - INAOE 60

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Arquitectura Flujo de Datos (Dataflow) Arquitectura Estructural (Structural)


♦ Ejemplo:
entity COMPARA is -- Entidad
♦ Ejemplo:
port (A,B: in bit; C: out bit);
architecture ARQ2 of COMPARA is
end COMPARA
begin
C <= not (A xor B) after 1 ns; architecture STRUCT of COMPARA is
end ARQ2; signal I: bit; -- Declaración de
componentes
♦ Otro ejemplo: component XR2 port (x,y: in bit; z: out bit); end component;
entity XR2 is component INV port (x: in bit; z: out bit); end component;
generic (m: time := 1.0 ns); -- Tiempo de retardo begin
port (X,Y: in bit; Z: out bit); U0: XR2 port map (A,B,I); -- Componentes
end XR2; U1: INV port map (I,C); -- utilizados
end STRUCT;
architecture DATAFLOW of XR2 is U0 U1
begin
Z <= X xor Y after m; -- Retardo genérico A x I x INV z C
end DATAFLOW; XR2 z
B y
© FPGAcentral - INAOE 61 © FPGAcentral - INAOE 62

Jerarquía de diseño Configuracion (Configuration)


entity ALU is Selecciona una arquitectura para una entidad declarada. Si no se
port ( opcode: … define se utiliza automáticamente la última arquitectura compilada.
CPU end ALU;
Declaración de la configuración
architecture first of ALU is configuration name of entity_name is
ALU component COMPARA [declarations] specification
port (a,b:in bit; c:out bit); end name;
COMPARA end component; Ejemplo: Nombre de la configuración
XR2 INV Entidad que se esta configurando
begin
U0: COMPARA configuration FAST_ONE of ALU is Arquitectura que se
port map (s,d,q); for first esta configurando
… for U0: COMPARA use entity WORK.COMPARA(DATA_FLOW);
end first;

Componente configurado Biblioteca Arquitectura a usar


© FPGAcentral - INAOE 63 © FPGAcentral - INAOE 64

Escalares y cadenas de
2. Elementos primitivos
caracteres
♦ VHDL es un lenguaje fuertemente declarativo
Tipos escalares Cadenas
character string
♦ Los primitivos estándares en VHDL son: bit bit_vector
std_logic std_logic_vector
• Escalares, cadenas de caracteres boolean
real
• Nombres (identificadores) integer
• Objetos - declaraciones time
• Expresiones

© FPGAcentral - INAOE 65 © FPGAcentral - INAOE 66

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Character String Lógica estándar IEEE


'A'
"error en sincronia” -- Cadena de dimensión Std_Logic
'b'
18 U no inicializado
’x' X forzando valor desconocido
"z" -- Cadena de dimensión 1
'' 0 forzando 0
string'("10") 1 forzando 1
''' Z alta impedancia - tres estados
W valor debil desconocido
Bit_vector L 0 débil
Bit H 1 débil
'0’ "0101_1001" - sin importancia (don’t care)
'1’ x"00AF"
bit_vector'("101") Std_Logic_Vector
bit'('1')
”101Z"
"UUUUU"
signed'("1011") -- Menos 5
© FPGAcentral - INAOE 67 © FPGAcentral - INAOE 68

Boolean Real
true -2.0 Restricción de rangos
false +3.76 ♦ La sintáxis es:
TRUE 45.0
-1.0E + 38 range index_constraint
FALSE
VHDL define por lo menos seis
digitos decimales de precisión. index_constraint
El rango de los números reales es
de -1.0E+38 a 1.0E+38
{low_val to high_val | high_val downto low_val}

Tiempo (valor físico) Integer ♦ Ejemplo:


10 ns +1
120 us entity COMPARA_DIGITO is
682
port (B,A: in integer range 0 to 9 := 0; Restricción del rango
3.4 ns -139
C: out boolean);
+239_485 end COMPARA_DIGITO;
Unidades: 16#00AE
El rango de los números enteros es
fs,ps,ns,us,ms,sec,min,hr de -2,147,483,647 a +2,147,483,647
♦ Algunas declaraciones como las variables y las señales permiten un
rango de restricción como parte de la declaración (i.e., [constraint]).
♦ Algunas declaraciones de vectores permiten una restricción del índice.
© FPGAcentral - INAOE 69 © FPGAcentral - INAOE 70

Declaración de constantes Declaración de señales


♦ Sintáxis:
♦ Sintáxis: Escalar: signal name(s):=type [range_contraint][:=expression];
Vectorial: signal name(s):
Escalar: constant name: type := expression; array_type[index_constraint][:=expression];
Vectorial: constant name: array_type[(index_constraint)] := expression;
Entidad: port (name(s): direction type
[range_constraint][:=expression]);
♦ Ejemplos:
– Las señales pueden declararse en una entidad, en una arquitectura o
constant Vdd: REAL := -3.3; en un paquete. Si se quiere inicialiar una señal hay que indicar un
valor en [:=expression]. Por ejemplo: signal S: BIT:='1';
constant CICLO: TIME := 200 ns; – De otra manera, el valor es inicializado al valor más bajo del tipo de
constant PI: REAL := 3.14; variable definido.
constant OCHO: INTEGER := 3 + 5; ♦ Ejemplos:
constant OCHO: BIT_VECTOR := "1000"; -- Longitud 4 signal count: integer range 1 to 50; -- Valor inicial sería 1
constant OCHO: std_logic_vector (8 to 11) := "1000"; signal GROUND: BIT:='0';
signal YS_BUS std_logic_vector (7 downto 0);
port (B,A: in integer range 0 to 9);
© FPGAcentral - INAOE 71
signal bogus: bit_vector; -- Errónea, no hay dimensión
© FPGAcentral - INAOE 72

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Declaración de variables Conversión de tipos


♦ Sintáxis:
♦ Ejemplos:
Escalar: variable name(s):=type integer (4.0) tipo entero
[range_contraint][:=expression];
real (5) tipo real
Vectorial: variable name(s): integer * time tipo tiempo
array_type[index_constraint][:=expression];
nanos + picos tipo tiempo
– Una variable puede tener un rango. También se le puede dar un valor
nanos/picos tipo entero
inicial incluyendo un valor o una expresión en [:=expression].
Por ejemplo: variable COUNT: INTEGER range 0 to 99 := 0;
– El valor inicial de COUNT es 0 y solo puede asignarsele valores de 0 a
99. Expresiones
– El valor inicial, es el mas bajo valor del rango del tipo definido.
Operadores por orden de precedencia (del más bajo al más alto)
♦ Ejemplos: Operadores lógicos and, or, nand
Operadores relacionales nor, xor, =, /=, <, <=, >, >=
variable INDEX:INTEGER range 1 to 50; Operador de concatenación &
variable CYCLE_TIME:TIME range 10 ns to 50 ns := 10ns; Operadores aritméticos +, -, *, /, mod, rem, **, abs
variable MEMORY:BIT_VECTOR (0 to 7); -- Restricción del rango Operador lógico not
variable x,y: INTEGER; -- valor inicial -2,147,483,647
© FPGAcentral - INAOE 73 © FPGAcentral - INAOE 74

3. Declaraciones secuenciales Declaración de procesos


♦ Declaración de procesos
♦ Asignación de variables MUX & 2 REGISTER
♦ Asignación secuencial de señales Selector (Low)

– IF bus a 7
– CASE 2
bus b
– LOOP
– NEXT bus c 5
– EXIT
– WAIT
– ASSERT MUX & 7 REGISTER
– Subprogramas (funciones y procedimientos) Selector (High)
• Functions
• Procedures

© FPGAcentral - INAOE 75 © FPGAcentral - INAOE 76

Entity low_high is
port (a, b, c: in integer);
end low_high;
Declaración de procesos
architecture behavior of low_high is
begin ♦ Sintáxis:

L: process [label:]
variable low: integer := 0;
begin process [(sensitivity_list)]
wait on a, b, c; [subprogram]
if a < b then low := a; else low := b; end if; [type]
if c < low then low := c; end if;
end process; [constant]
[variable]
H: process
variable high: integer := 0; [other declarations]
begin begin
wait on a, b, c; sequential_statements
if a > b then high := a; else high := b; end if;
if c > high then high := c; end if; end process [label];
end process;
end behavior;
© FPGAcentral - INAOE 77 © FPGAcentral - INAOE 78

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Asignación de variables IF
♦ Sintáxis:
if condition then sequential_statements
♦ Sintáxis:
{elsif condition then sequential_statements}
target := expression; [else sequential_statements]
end if;
♦ Ejemplos:
ix := 'a'; Caracter
♦ Ejemplos:
a := 2.7; Asignación de un valor real if ... then if ... then
if ... then s1; s2; sn; s1; s2; s3;
s1; s2; sn; else elsif ...
Asignación secuencial de señales end if; s1; s2; sn; then
end if; s1; s2; ...
Sintáxis: sn;
elsif ...
target <= [expression][after delay]; then
s1; s2; sn;
else
s1; s2; sn;
© FPGAcentral - INAOE 79 © FPGAcentral - INAOE
end if; 80

CASE LOOP
♦ Sintáxis:
case expresion is
when choices-1 => sequence_of_statements ♦ Sintáxis:
. [label:][while condition | for loop_specification] loop
.
when choices-n => sequence_of_statements sequential_statements
end case; end loop [label];
♦ Opciones para utilizar el comando Case: ♦ El comando Loop es un declaración secuencial en un proceso.
case expression is
when value => s1; s2; ... sn; => significa "then" Puede tener una etiqueta que es util en ciclos interlazados. Hay
when val1 | val2 | valn => s1; s2; ... sn; | significa "or" dos tipos de ciclos LOOP: el ciclo FOR-LOOP y el ciclo WHILE-
when val1 to val2 => s1; s2; ... sn;rango LOOP.
...
when others => s1; s2; ... sn; "others" valor default ♦ Ejemplos:
end case;
L: for i in 1 to 10 loop
♦ Ejemplo: s1; s2; ... sn;
La variable bitindex (de tipo bit), es convertida a una variable ix entera. end loop;
case bitindex is
when '0' => ix := 0; i:=1;
M: while (i<11) loop
when '1' => ix := 1; s1; s2; ... sn;
end case; i := i+1;
end loop;
© FPGAcentral - INAOE 81 © FPGAcentral - INAOE 82

NEXT NEXT y WHILE


♦ Sintáxis: ♦ Cuando hay varios ciclos interlazados se puede dar
una etiqueta a cada uno de ellos. El comando Next
next [label][when condition]; puede hacer referencia a un ciclo en particular.

– El comando Next detiene la ejecución de un ciclo y ♦ Por ejemplo:


brinca a la siguiente iteración.
L1: While i<10 Loop
♦ Ejemplo: L2: While j<20 Loop
.
For i := 0 to max_limit Loop .
Next L2 when i=j;
if (a(i) = 0) then Next;
.
end if; .
q(i) := a(i); End Loop L2;
end loop; End Loop L1;

© FPGAcentral - INAOE 83 © FPGAcentral - INAOE 84

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

EXIT WAIT
♦ El comando Exit completa la ejecución de un ciclo Loop. La ♦ Sintáxis:
terminación del ciclo puede ser condicional si se incluye una condición.

♦ Sintáxis: wait [on signal_names]


exit [label][when condition] [until conditional_expression]
Exit termina la ejecución de una iteración Loop.
[for time_expression]

♦ Por ejemplo:
♦ Ejemplos:
For i in 0 to max Loop
If (a(i) = 0)) then exit; end if; Wait on a,b;
q(i) := a(i);
end Loop;

© FPGAcentral - INAOE 85 © FPGAcentral - INAOE 86

ASSERT Subprogramas - Funciones


♦ Sintáxis:
PROCESS
assert condition [report string_expression][severity function C_to_F (c: real) return real is
expression]; variable F: real; -- Declaración
begin
– Assert escribe mensajes de texto durante una simulación. Hay
cuatro niveles de severidad: FAILURE, ERROR, WARNING, F := C*9.0/5.0 + 32.0;
NOTE. El comando Assert es útil para checar la Return (F);
temporización, condiciones fuera de rango, etc. end C_to_F;

♦ Ejemplo: variable new_temp: real;


begin
Assert (x>3) -- Imprime si la condición es falsa new_temp := C_to_F (5.0) + 20.0 -- Llamada a la función
Report "violación de condición" end process;
severity warning;

© FPGAcentral - INAOE 87 © FPGAcentral - INAOE 88

Subprogramas - Funciones Subprogramas - Funciones


♦ Ejemplo. Función para convertir un bit_vector en
entinty … is
end…
entero.
architecture … of … is function vect_to_ int (s: bit_vector (1 to 8) return integer is
begin variable result : integer : = 0;
begin
process for i in 1 to 8 loop
-- Declaración de funciones result := result * 2;
begin if s (i) = ‘1’ then
-- Llamada a la función result : = result + 1;
end process; en if;
end…; en loop;
return result;
♦ Las funciones pueden ser declaradas en la entidad, en la end vect_to_int;
arquitectura o en un paquete. Existen bibliotecas comer-ciales
que incluyen funciones para sin, cos, sqrt, etc. en un paquete ♦ Funciones ya integradas:
VHDL y que pueden ser usadas en el diseño. Integer (abc) -- Real a entero
Real (xyz) -- Entero a real
© FPGAcentral - INAOE 89 © FPGAcentral - INAOE 90

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Subprogramas - Procedimientos 4. Señales y Asignación de Señales


procedure PARITY (A: in bit_vector (0 to 7);
result1, result2: out bit) is ♦ Estructuración de señales
variable temp: bit;
begin
♦ Comunicación entre procesos
temp := ‘0’; ♦ Conexión entre procesos y componentes: Testbench
for i in 0 to 7 loop
temp :=temp xor A(i); ♦ Declaración de señales
end loop;
result1 :=temp; result2 :=not temp; ♦ Declaración de señales de puerto en las entidades
end;
♦ Asignación de señales en un proceso
architecture behavior of receiver is
process ♦ Retardos en las señales
variable TOP, BOTTOM, ODD, dummy :bit;
variable Y: bit_vector (15 downto 0); ♦ Riesgos en asignación de señales secuenciales
begin
... ♦ Ciclo de simulación
PARITY (Y(15 downto 8),TOP, dummy); Llamado a los
PARITY (Y(7 downto 0), BOTTOM, dummy);
♦ WAIT y lista de sensibilidad
procedimientos
ODD := TOP xor BOTTOM;
end process;
end behavior;
© FPGAcentral - INAOE 91 © FPGAcentral - INAOE 92

Estructuración de señales Comunicación entre procesos


U0 U1 Architecture
A X I Architecture first of st_unit is
Z X Z C
Y XR2 INV signal B_Done: bit:= ‘0’;
B begin
B: PROCESS
entity COMPARA is A: PROCESS
Señal externa port (A,B: in bit; C: out bit); Señal
end COMPARE
B_Done
architecture ESTRUCTURAL of COMPARA is
Señal local signal I: bit;
component XR2 port (x, y, in bit; z: out bit); B: Process A: Process
end component; begin begin
component INV port (x: in bit; z: out bit); if S1 then B_Done <= ‘1’; wait until B_Done =‘1’;
end component; … ...
begin
U0: XR2 port map (A, B, I);
• Los procesos pueden comunicarse usando asignación de señales
U1: INV port map (I, C); • Un proceso puede esperar un evento sincronizádose con una señal de entrada
end ESTRUCTURAL;
© FPGAcentral - INAOE 93 © FPGAcentral - INAOE 94

Conexión entre procesos y componentes:


Banco de pruebas - Testbench Declaración de señales
Proceso Componente Proceso package sigdec1 is
signal vcc: bit := ‘1’; Señales globales
signal ground: bit :=‘0’
Generador de Vector de Respuesta
UUT Verificador end sigdecl;
estímulos prueba

entity board_design is
port (data_in: in bit; Señal global de la entidad
Tipos de prueba: data_out : OUT bit);
♦ Ad Hoc - Algunos vectores de prueba para verificar el signal sys_clk : bit := ‘1’;
funcionamiento general (no exhaustivo) end board_design;
♦ Algoritmico - Se tiene un algorítmo que genera los vectores de
prueba architecture data_flow of board_design is
♦ Archivo de vectores - Se tiene un archivo con los vectores signal int_bus: bit ;
previa-mente almacenados para realizar una prueba exhaustiva begin Señal local de la arquitectura

© FPGAcentral - INAOE 95 © FPGAcentral - INAOE 96

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Declaración de señales de puerto Asignación de señales en un


en las entidades proceso
♦ Síntaxis: Process
port (names : direction type [:=expression] [;more_ports]); begin
sys_clk <= not (sys_clk) after 50 ns;
int_bus <=data_in after 10 ns;
Dirección de data_out <= xfunction (int_bus) after 10 ns;
la señal Uso wait….
In Lado derecho de una variable o asignación de señal end;
Out Lado izquierdo de asignación de señal
Inout Los dos anteriores ♦ Asignación temporal:
Buffer Los anteriores (con 1 solo driver)
S <= ‘1’ after 4 ns, ‘0’ after 7 ns;
T <= 1 after 1 ns, 3 after 2 ns, 6 after 8 ns ;

© FPGAcentral - INAOE 97 © FPGAcentral - INAOE 98

Diferencias en la simulación durante


Retardos en las señales la asignación de señales y de variables
signal x: integer;
1 X
process ... +
begin Asignación de señal
...
Están sincronizadas con los pasos de simulación
x <= x + 1 after 10 ns;
... Pueden tener un retardo
Es válido para modelar, no es sintetizable en la práctica Los valores de señal se actualizan solamente después de
ejecutarse un wait (ciclo de simulación)
Retardo cero
entity VAR is
Asignación de variable
port (A : in bit_vector (0 to 7); index : in integer range 0 to 7; No están sincronizadas con los pasos de simulación
output : out bit);
end VAR; La asignación de variables se especifícan sin retardos
architecture VHDL_1 of VAR is Los valores de variable se actualizan inmediatamente
begin
process
begin
output <= A(index); -- Asignación programada en 0 ns
wait … ;

end VHDL_1;
© FPGAcentral - INAOE 99 © FPGAcentral - INAOE 100

Riesgos en asignación de
señales secuenciales Ciclo de simulación
entity mux is x
port (x, y: in bit;
select: in Boolean; M p
p: out bit); U Asignación Ejecución de procesos
end mux; y X de señales Evaluación de señales Tiempo
architecture wrong of mux is
signal muxval: integer range 0 to 1; select
begin
process
begin Entrada Inicio Mitad Final Salida
muxval <= 0;
if (select) then Variable muxval: integer range 0 to 1;
♦ El simulador modela retardos-cero utilizando tiempo-delta
muxval <= muxval + 1;
end if; ♦ Eventos programados para el mismo tiempo son simulados en
case muxval is orden durante un paso de tiempo-delta
when 0 => p <= x after 10 ns; muxval := muxval +1; ♦ La lógica relacionada es resimulada para propagar los efectos
when 1 => p <= y after 10 ns; durante otro paso de tiempo-delta
end case ;
wait on x, y, select; ♦ Pasos de tiempo-delta continúan hasta que ya no hay actividad
end process; durante el mismo instante de tiempo de simulación.
end wrong; © FPGAcentral - INAOE 101 © FPGAcentral - INAOE 102

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Simulación y las declaraciones WAIT Lista de Sensibilidad


Wait on a, b;
♦ Suspende la ejecución del proceso hasta que process (clk)
ocurra un evento en a o en b
begin process
Wait until a > 10; ... begin
♦ Suspende la ejecución del proceso hasta que ... …
ocurra un evento en a, y que a>10 <declaraciones> ...
<declaraciones>
...
Wait for 10 ns; ...
… …
♦ Suspende la ejecución del proceso por 10 ns end process; wait on clk;…
end process;
Wait;
♦ Suspende la ejecución del proceso indefinidamente
© FPGAcentral - INAOE 103 © FPGAcentral - INAOE 104

5. Declaraciones Concurrentes El proceso


♦ Un proceso:

– Se ejecuta simultaneamente junto con otros


♦ El Proceso procesos
♦ Asignación de señales concurentes – Contiene solamente declaraciones secuenciales
♦ Asignación de señales condicionales – Debe contener una lista de sensibilidad o un WAIT
– Pueden acceder señales definidas en arquitecturas
♦ Asignación de señales preseleccionadas y entidades.
♦ Llamada a procesos concurrentes
A: Process B: Process
♦ Declaraciones BLOCK
Loop Loop
………. ……….
Wait… Wait…
………. ……….
End End

© FPGAcentral - INAOE 105 © FPGAcentral - INAOE 106

Asignación de señales concurrentes Modelado Hardware con VHDL


Forma concurrente Forma secuencial Entity
(Architecture)
architecture V_1 of V_VAR is architecture V_1 of V_VAR is
begin begin Process Process
output < =A (index); = process (A, index); Sequential
Combinational
end V_1 ; begin process Red, blue
Ports process
output <= A (index); wait…;
end process; if A (Signals) X and (Y or Z);
then X
end V_1;
else Y 0 to 15 Subprogram
♦ Formas:
end if;
Destino <= Expresión -- Lógica, comparativa u operación
aritmética
Condicional -- Similar al comando IF
Seleccionada -- Similar al comando CASE Component

© FPGAcentral - INAOE 107 © FPGAcentral - INAOE 108

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

V. Diseño con VHDL


1. Circuitos combinacionales
2. Circuitos secuenciales
V. Diseño con VHDL – Diseño de máquinas de estado
– Notación gráfica
– Notación one-hot
3. Circuitos RTL
4. Codificación para la síntesis

© FPGAcentral - INAOE 110

Ejercicios de diseño Ejercicio 1


♦ Ejercicio 1. Circuito combinacional básico ♦ Realice en VHDL el circuito
♦ Ejercicio 2. Multiplexor combinacional siguiente, donde las
♦ Ejercicio 3. Jerarquía de diseño salidas estan definidas por las
♦ Ejercicio 4. Diseño de máquina de estados funciones:
♦ Ejercicio 5. Contador BCD arriba-abajo A Y0 = AB + C
♦ Ejercicio 6. Circuito contador de automóviles Y1 = A´ + C ´
B
Y2 = AB´
C Y3 = A´C + B

© FPGAcentral - INAOE 111 © FPGAcentral - INAOE 112

Ejercicio 2 Ejercicio 3
♦ Cree un módulo estructural conectando los
♦ Realice en VHDL un módulo multiplexor 4 a circuitos del ejemplo 1 y 2 para seleccionar
1, con un bus de control de 2 bits una de las salidas del módulo 1 con el
multiplexor
TOP
A0
A1 A
A2 Y B Y
A3 C

C0 C1
C0 C1
© FPGAcentral - INAOE 113 © FPGAcentral - INAOE 114

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Ejercicio 4 Ejercicio 5
♦ Realice con el editor de máquina de estados ♦ Realice un módulo contador arriba-abajo
un circuito con una entrada y dos salidas en BCD de dos dígitos. Inicie con un módulo
las que cada salida se activa en alto si recibe contador BCD de un dígito y luego ensamble,
la secuencia respectiva: usando jerarquía de diseño, un módulo de
dos dígitos. Codifique sus señales usando
♦ Salida A con 0110
enteros restringidos de 0 a 9.
♦ Salida B con 1010 A
SER
B

© FPGAcentral - INAOE 115 © FPGAcentral - INAOE 116

Ejercicio 6
♦ Realice un circuito contador de automoviles que entran y salen
de un estacionamiento. El circuito tiene 2 sensores y debe
detectar si un auto entra o sale para incrementar o decrementar
un contador BCD de 0 a 99. Si el auto entra o sale parcialmente
el circuito no debe dar falsas cuentas. Realice un diseño
VI. Síntesis Digital
modular y jerarquico donde se tengan los módulos: detector,
contador BCD 0-9, contador BCD dos dígitos, y circuito principal
(top)

Sensores

Auto

© FPGAcentral - INAOE 117

VI. Síntesis Digital Código listo para ser sintetizado


♦ Código listo para ser sintetizado ♦ Código que no se puede sintetizar
Signal x : integer;
♦ Consejos para escribir codigo sintetizable process
begin
♦ Inferencia de Flip-Flops y salidas Tri-State x <= x +1 after 10 ns;

♦ Síntesis del comando CASE ♦ Ejemplo de síntesis de:


x <= (a and b) or (c and (e or not f) xor g;
♦ Síntesis del comando FOR
♦ Sumador de 4-bits Genérico Biblioteca para ASIC

♦ Síntesis y el comando WAIT


♦ Proceso de síntesis
♦ Restricciones temporales
♦ Síntesis de máquinas de estado
© FPGAcentral - INAOE 119 © FPGAcentral - INAOE 120

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Consejos para escribir codigo Inferencia de Flip-Flops


library IEEE;
sintetizable use IEEE.std_logic_1164.all;
entity FFS is
DOUT(1) <= DIN(1) nand DIN(2);
end if;
port( DOUT(4) <= SRSTn and (DIN(1) nand
♦ Expresiones temporales CLOCK : in std_logic;
DIN(2));
end process;
ARSTn : in std_logic; seq2 : process (ARSTn, CLOCK)
SRSTn : in std_logic; begin
DIN : in std_logic_vector(5 downto 0); if (ARSTn = '0') then
Z <= X xor Y after 3ns; DOUT : out std_logic_vector(5 downto DOUT(2) <= '0';
0)); elsif (CLOCK'event and CLOCK = '1')
end FFS; then
Ignorado durante la síntesis DOUT(2) <= DIN(2) nor DIN(3);
architecture RTL of FFS is end if;
begin end process;
seq3 : process (CLOCK)
seq0 : process begin
♦ Valores iniciales begin if (CLOCK'event and CLOCK = '1') then
wait until CLOCK'event and CLOCK = '1'; DOUT(5) <= SRSTn and DIN(3);
DOUT(0) <= DIN(0) xor DIN(1); if (SRSTn = '0') then
end process; DOUT(3) <= '0';
signal A : integer := 5; else
seq1 : process DOUT(3) <= DIN(3);
begin end if;
end if;
Ignorado durante la síntesis wait until CLOCK'event and CLOCK = '1'; end process;
if (SRSTn = '0') then end RTL;
DOUT(1) <= '0';
else
© FPGAcentral - INAOE 121 © FPGAcentral - INAOE 122

Inferencia de Flip-Flops
Inferencia de salidas Tri-State
library IEEE; seq1 : process (EN, DIN)
use IEEE.std_logic_1164.all; begin
entity STATE3 is case EN is
port( when '1' =>
EN : in std_logic; DOUT(1) <= DIN(2) nor DIN(3);
DIN : in std_logic_vector(3 downto when others =>
0); DOUT(1) <= 'Z';
DOUT : out std_logic_vector(3 end case;
downto 0)); end process;
end STATE3; DOUT(2) <= DIN(1) nand DIN(2) when
EN = '1' else 'Z';
architecture RTL of STATE3 is with EN select
DOUT(3) <= DIN(3) when '1',
begin 'Z' when others;
seq0 : process (DIN, EN) end RTL;
begin
if (EN = '1') then
DOUT(0) <= DIN(0) xor DIN(1);
else
DOUT(0) <= 'Z';
end if;
end process;

© FPGAcentral - INAOE 123 © FPGAcentral - INAOE 124

Inferencia de salidas Tri-State Síntesis del comando CASE


use work.synopsys.all
entity VHDL is
port (A, B, C, D: In bit;
CHOICE : In ENUM;
Z: out bit); A
end VHDL;
B
M Z
architecture VHDL_1 of VHDL IS C
begin U
process (CHOICE) begin D X
case CHOICE is
when USE_A => Z <= A;
when USE_B => Z <= B; 0
when USE_C => Z <= C; 1
when USE_D => Z <= D;
end case;
end process;
end VHDL_1;

© FPGAcentral - INAOE 125 © FPGAcentral - INAOE 126

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Síntesis del comando FOR Sumador de 4-bits


♦ VHDL puede sintetizar operadores enteros para
entity VHDL is sumas y multiplicaciones
port (WORD: in bit_VECTOR (0 to 7);
PARITY: out bit); entity VHDL is
end VHDL; port (A, B: in INTERGER range 0 to 15; --Implica un resultado
de 4 bits
architecture VHDL_1 of VHDL is
C: out INTEGER range 0 to 15);
begin
process (WORD) end VHDL;
variable ODD: bit;
begin architecture VHDL_1 of VHDL is
ODD := ‘0’; begin
for i in 0 to 7 loop C <= A + B;
ODD : = ODD xor WORD (i);
end loop; end VHDL_1;
PARITY <= ODD;
end process;
end VHDL_1;

© FPGAcentral - INAOE 127 © FPGAcentral - INAOE 128

Síntesis y el comando WAIT Proceso de síntesis


Entity VHDL is
port (ENABLE : in bit;
CLOCK : in bit;
TOGGLE : buffer bit);
end VHDL;

architecture VHDL_1 of VHDL is


begin
process begin
wait until CLOCK’event and CLOCK = ‘1’;
if (ENABLE = ‘1’) then
TOGGLE < = not TOGGLE;
end if ;
end process
end VHDL_1; TOGGLE

ENABLE

CLOCK

© FPGAcentral - INAOE 129 © FPGAcentral - INAOE 130

Restricciones temporales en el diseño Síntesis de máquinas de estados

♦ Síntesis de circuitos combinacionales

♦ Síntesis de máquinas de estados


– Máquina de Mealy y máquina de Moore
– Ejemplo de máquina de estados
– Síntesis del ejemplo
– Inicialización de la máquina de estados
– Incluyendo salida con Flip-flops

© FPGAcentral - INAOE 131 © FPGAcentral - INAOE 132

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Síntesis de circuitos combinacionales Síntesis de circuitos combinacionales


♦Ejemplo: generador de paridad
library IEEE; architecture RTL of PARGEN is
function EVENPAR (constant DIN : in
use IEEE.std_logic_1164.all; std_logic_vector)
entity PARGEN is return std_logic is
port( variable result : std_logic;
RSTn : in std_logic; begin
result := '0';
CLOCK : in std_logic; for i in DIN'range loop
AD : in std_logic_vector(31 result := result xor DIN(i);
downto 0); end loop;
CBEn : in std_logic_vector(3 return result;
downto 0); end EVENPAR;
PAR : out std_logic); begin
delay : process (RSTn, CLOCK)
end PARGEN; begin
if (RSTn = '0') then
PAR <= '0';
elsif (CLOCK'event and CLOCK = '1')
then
PAR <= EVENPAR(AD) xor
EVENPAR(CBEn);
end if;
end process;
end RTL;
© FPGAcentral - INAOE 133 © FPGAcentral - INAOE 134

Síntesis de máquinas de estados Ejemplo

Máquina de Mealy

Máquina de Moore
© FPGAcentral - INAOE 135 © FPGAcentral - INAOE 136

library IEEE; else


use IEEE.std_logic_1164.all; NEXT_STATE <= WRITING;
entity RWCNTL is
port(
end if;
when READING => Síntesis
CLOCK : in std_logic; RDSIG <= '1';
START : in std_logic; if LAST = '0' then
NEXT_STATE <= READING;
RW : in std_logic; else
LAST : in std_logic; NEXT_STATE <= WAITING;
RDSIG : out std_logic; end if;
WRSIG : out std_logic; when WRITING =>
DONE : out std_logic); WRSIG <= '1';
end RWCNTL; if LAST = '0' then
NEXT_STATE <= WRITING;
architecture RTL of RWCNTL is else
type STATE_TYPE is (IDLE, NEXT_STATE <= WAITING;
READING, WRITING, WAITING); end if;
signal CURRENT_STATE, when WAITING =>
NEXT_STATE: STATE_TYPE; DONE <= '1';
begin NEXT_STATE <= IDLE;
comb : process(CURRENT_STATE, end case;
START, RW, LAST) end process;
begin
seq : process
DONE <= '0'; begin
RDSIG <= '0'; wait until CLOCK'event and CLOCK = '1';
WRSIG <= '0'; CURRENT_STATE <= NEXT_STATE;
case CURRENT_STATE is end process;
when IDLE => end RTL;
if START = '0' then
NEXT_STATE <= IDLE;
elsif RW = '1' then
NEXT_STATE <= READING;
© FPGAcentral - INAOE 137 © FPGAcentral - INAOE 138

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Inicialización de la máquina de estados


library IEEE;
use IEEE.std_logic_1164.all; else
Inicialización de la máquina de estados
entity RWCNTLR is NEXT_STATE <= WRITING;
port( end if;
when READING =>
RESETn : in std_logic; RDSIG <= '1';
CLOCK : in std_logic; if LAST = '0' then
START : in std_logic; NEXT_STATE <= READING;
RW : in std_logic; else
LAST : in std_logic; NEXT_STATE <= WAITING;
RDSIG : out std_logic; end if;
WRSIG : out std_logic; when WRITING =>
WRSIG <= '1';
DONE : out std_logic); if LAST = '0' then
end RWCNTLR; NEXT_STATE <= WRITING;
architecture RTL of RWCNTLR is else
NEXT_STATE <= WAITING;
type STATE_TYPE is (IDLE, READING, end if;
WRITING, WAITING);
when WAITING =>
signal CURRENT_STATE, NEXT_STATE: DONE <= '1';
STATE_TYPE;
NEXT_STATE <= IDLE;
begin end case;
comb : process(CURRENT_STATE, START, end process;
RW, LAST)
begin seq : process (CLOCK, RESETn)
DONE <= '0'; begin
RDSIG <= '0'; if (RESETn = '0') then
WRSIG <= '0'; CURRENT_STATE <= IDLE;
case CURRENT_STATE is elsif (CLOCK'event and CLOCK = '1') then
when IDLE => CURRENT_STATE <= NEXT_STATE;
if START = '0' then end if;
end process;
NEXT_STATE <= IDLE; end RTL;
elsif RW = '1' then
NEXT_STATE <= READING;
© FPGAcentral - INAOE 139 © FPGAcentral - INAOE 140

Incluyendo salida con Flip-flops Incluyendo salida con Flip-flops


seq : process (CLOCK, RESETn) case CURRENT_STATE is
begin when IDLE =>
if (RESETn = '0') then if START = '0' then
CURRENT_STATE <= IDLE; CURRENT_STATE <= IDLE;
DONE <= '0'; elsif RW = '1' then
RDSIG <= '0'; CURRENT_STATE <= READING;
WRSIG <= '0'; else
elsif (CLOCK'event and CLOCK = '1') then CURRENT_STATE <= WRITING;
CURRENT_STATE <= NEXT_STATE; end if;
DONE <= DONE_comb; when READING =>
RDSIG <= RDSIG_comb; RDSIG <= '1';
WRSIG <= WRSIG_comb; if LAST = '0' then
end if; CURRENT_STATE <= READING;
end process; else
end RTL; CURRENT_STATE <= WAITING;
end if;
architecture COMBINED of RWCNTLRF is when WRITING =>
type STATE_TYPE is (IDLE, READING, WRITING, WRSIG <= '1';
WAITING); if LAST = '0' then
signal CURRENT_STATE : STATE_TYPE; CURRENT_STATE <= WRITING;
begin else
seq : process (CLOCK, RESETn) CURRENT_STATE <= WAITING;
begin end if;
if (RESETn = '0') then when WAITING =>
CURRENT_STATE <= IDLE; DONE <= '1';
DONE <= '0'; CURRENT_STATE <= IDLE;
RDSIG <= '0'; end case;
WRSIG <= '0'; end if;
elsif (CLOCK'event and CLOCK = '1') then end process;
DONE <= '0'; end COMBINED;
RDSIG <= '0';
WRSIG <= '0';

© FPGAcentral - INAOE 141 © FPGAcentral - INAOE 142

VII. Gestión de diseño


♦ Planeación del diseño
♦ Diseño arquitectural y banco de
VII. Gestión de Diseño pruebas
♦ Partición del diseño y VHDL sintetizable
♦ Síntesis y optimización
♦ Implementación

© FPGAcentral - INAOE 144

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Planeación del diseño


Requisitos
♦ Diseño ascendente, descendente o
Especificaciones
ambos
Diseño arquitectural ♦ Diseño pensado en las pruebas
Diseño lógico ♦ Bancos de prueba validados
Fabricación previamente con modelos software de
Validación
la arquitectura
♦ Partición del diseño:
Gestión del proyecto
– Bloques funcionales
– Equipo de trabajo
Ejemplo de distribución temporal de las etapas de diseño de un circuito
integrado.
© FPGAcentral - INAOE 145 © FPGAcentral - INAOE 146

Diseño arquitectural y banco de


pruebas
♦ Proponer bancos de prueba a diversos Proceso A

niveles Componente
a
Verificar
Proceso B
♦ Validación de bloques jerárquicamente:
– Validación de módulos básicos Proceso C
– Validación intermedia
– Validación de la arquitectura completa

Banco de pruebas funcional


© FPGAcentral - INAOE 147 © FPGAcentral - INAOE 148

Reloj
Modelo
Análisis de
de
respuesta
referencia
independiente
del test

Aplicación Comparación de Generador Modelo


Ok
de resultados de a
estímulos (en cada ciclo) estímulos verificar

Análisis de
respuesta
dependiente
Modelo del test
a
verificar

Verificación “inteligente”
Verificación basada en comparaciones ciclo a ciclo
© FPGAcentral - INAOE 149 © FPGAcentral - INAOE 150

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Separación en submódulos Separación en submódulos


♦ Es preferible codificar en un mismo módulo la lógica
Propósito: de funciones interrelacionadas
Estructurar el diseño ♦ Si se va a dividir un módulo en varios sub-módulos, se
Aumentar la eficiencia de la síntesis separa en las partes donde hay registros
♦ Se separan módulos con registros con disparo positivo
No hay reglas precisas para la manera de dividir de los de disparo negativo
el diseño, dependen de la eficiencia de la ♦ Es preferible tener pocos niveles de jerarquía
herramienta de síntesis ♦ Circuitos reutilizables pueden codificarse en un mismo
500 a 5000 compuertas por módulo módulo
Hasta complejidades de 50,000 por diseñador
♦ La separación de módulos en el diseño de máscaras
Algunas herramientas dan mejores resultados sin particionar el
diseño en submódulos (Synopsys)
de un ASIC es una buena guía para crear los módulos
en VHDL
♦ Módulos de RAM yROM se generan con la
herramienta Silicon Compiler para un ASIC o con
LogiBlox para FPGA
© FPGAcentral - INAOE 151 © FPGAcentral - INAOE 152

Síntesis y optimización Implementación


♦ Apoyarse en herramientas de síntesis y ruteo ♦ La validación postsíntesis asegura un
del fabricante 90% el funcionamiento
♦ Optimizar de acuerdo a las limitaciones del
♦ La validación final se tiene que realizar
hardware utilizado
implementando sobre el FPGA
♦ Reestructurar la arquitectura con pipeline
para aumentar el rendimiento ♦ Pruebas con datos reales y tiempos
largos para validar al 100% la
arquitectura

© FPGAcentral - INAOE 153 © FPGAcentral - INAOE 154

Modelo VHDL
MatLab Documentación
MatLab (para simulación)
(para usuario)

Programa MatLab
Resultados
Modelo Funcional

Modelo temporal Topografía


(para análisis de Mux (para diseño
tiempos) físico)
Ficheros de Datos
Simulador
VHDL Mux
netlist Símbolo (para
esquematicos)
Resultados
Modelo ASIC
Modelo VHDL del
Resultados
ASIC
Patrón
Ejemplo de validación de los resultados de la simulación de un Diferentes vistas del mismo componente dentro de una biblioteca
circuito descrito en VHDL
© FPGAcentral - INAOE 155 © FPGAcentral - INAOE 156

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

ASIC.vhd TB.vhd
STD
V1.0 V1.0
IEEE std_logic-1164
DEC
MEM ASIC.vhd CPU.vhd PROG.cpu
CPU V1.2 V1.0 V1.0

Funciones aritméticas
ASIC.vhd PROG.cpu
Biblioteca de recursos
V1.3 V1.1
Biblioteca de diseño

CPU.vhd PROG.cpu
V1.1 V1.2
SIO MCU

ASIC.vhd PROG.cpu
PIA V1.4 V2.0

Biblioteca de componentes
Configuraciones y versiones en la gestión del diseño
Relación de jerarquía entre las bibliotecas generadas o usadas en un diseño
© FPGAcentral - INAOE 157 © FPGAcentral - INAOE 158

ASIC.vhd TB.vhd
V1.1 V1.1

ASIC.vhd CPU.vhd PROG.cpu


V1.2 V1.2 V1.2

ASIC.vhd
V1.3
CPU.vhd
V1.3
PROG.cpu
V1.3 Apéndice A
ASIC.vhd CPU.vhd PROG.cpu
V1.4 V1.4 V1.4
Referencias y sitios de interés
ASIC.vhd CPU.vhd PROG.cpu
V1.5 V1.5 V1.5

Ajuste ficticio de versiones para el mantenimiento de configuraciones

© FPGAcentral - INAOE 159

Referencias Sitios de interés


♦ K.C. Chang, "Digital Design and Modeling with VHDL and Synthesis", IEEE
Computer Society Press, 1997. ISBN 0-8186-7716-3
♦ Página FPGAcentral
http://www.computer.org/books/bp07716/index.html – http://ccc.inaoep.mx/fpgacentral
♦ L. Terés, Y. Torroja, S. Olcoz, E. Villar, "VHDL Lenguaje Estándar de Diseño
Electrónico", Mc Graw Hill, 1998. ISBN 84-481-1196-6. – Material complementario, cursos, foros, biblioteca.
http://www.cnm.es/IMB/LibroVHDL
♦ S. Yalamanchili. “VHDL Starter’s Guide,” Prentice Hall 1998. ISBN 0-13-519802-
X ♦ VHDL FAQ
♦ P.Ashenden,“The Designer’s Guide to VHDL,” Morgan Kaufmann 1996. ISBN 1-
55860-270-4 – Comp.lang.vhdl
♦ Dave Van den Bout, "The Practical Xilinx Designer Lab Book", Version 1.5. – www.faqs.org
Prentice Hall, 1999. ISBN 0-13-020586-9
♦ D. Patterson, J. Hennessy. "Computer Organization & Design: The
Hardware/Software Interface," 2nd Ed. Morgan Kaufmann, 1997. ISBN 1-55860-
428-6
♦ J. Hennessy, D. Patterson. "Computer Architecture: A Quantitative Approach,"
2nd Ed. Morgan Kaufmann, 1995.

© FPGAcentral - INAOE 161 © FPGAcentral - INAOE 162

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)
http://ccc.inaoep.mx/fpgacentral

Sitios de interés
♦ Fabricantes de FPGAs y CPLDs
– Xilinx www.xilinx.com
– Altera www.altera.com
– Actel www.actel.com
– Cypress www.cypress.com
– Triscend www.triscend.com

♦ Herramientas VHDL
– Active VHDL www.aldec.com
– Foundation www.xilinx.com
– Synopsis www.synopsis.com
– Sinplicity www.sinplicity.com

© FPGAcentral - INAOE 163

© Ciencias Computacionales - INAOE. Se


permite usar siempre y cuando se mencione el
origen (FPGAcentral)

Vous aimerez peut-être aussi