Académique Documents
Professionnel Documents
Culture Documents
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
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
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
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
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
© FPGAcentral - INAOE 20
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
FastCONNECT
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
States 2 or 4
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
G2 Func.
F'
G' D Q
• Reconfigurable múltiples veces
Gen. H'
G1
EC
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
K
I/O Blocks
producciones relativamente pequeñas CLB CLB (IOBs)
Programmable Switch
Matrix
Interconnect
CLB CLB
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
Direct
Switch Switch
Matrix Matrix Interconnect
(Green)
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 40
Descripción Funcional
Nivel funcional 2. Flujo de diseño y compilación VHDL
Síntesis de VHDL
comportamiento Description
Desc. Física
3. Herramienta Active HDL
Especificación Topográfica (layout)
Funcional
BIT VHDL
EDIF SDF
JDEC Verilog
© FPGAcentral - INAOE 50
♦ 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
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
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}
– 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
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
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
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.
♦ 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;
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
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
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
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
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
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;
ENABLE
CLOCK
Máquina de Mealy
Máquina de Moore
© FPGAcentral - INAOE 135 © FPGAcentral - INAOE 136
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
Reloj
Modelo
Análisis de
de
respuesta
referencia
independiente
del test
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
Modelo VHDL
MatLab Documentación
MatLab (para simulación)
(para usuario)
Programa MatLab
Resultados
Modelo Funcional
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
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
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