Curso de doctorado
Diseño y modelado digital con VHDL y síntesis lógica Universidad de Zaragoza Dpto. Ing. Electrónica y Comunicaciones Area de Tecnología Electrónica
Luis Angel Barragán
José Ignacio Artigas
[email protected]
[email protected]
Diciembre 1.997
DESCRIPCION DEL DISEÑO TEMA 1: PROCESO DE DISEÑO DE SISTEMAS DIGITALES
t
Desde la especificación de un diseño hasta su fabricación, el diseño pasa a través de un conjunto de etapas: – Las distintas etapas utilizan
niveles de abstracción
t
Descripción del diseño – Representaciones de diseño – Niveles de abstracción
t
Proceso de diseño – Pasos del proceso de diseño
t
Herramientas CAD de diseño
t
Metodología típica de diseño
distintos
• Las etapas iniciales son más abstractas • A medida que se avanza en el diseño se aumenta el nivel de detalle de la implementación y de la tecnología
– Para cada nivel de abstracción, abstracción, el diseño puede ser descrito utilizando distintas representaciones de diseño. – En algunas tareas el diseñador cuenta con la ayuda de herramientas CAD DETALLE
Especificación del Diseño ABSTRACCION
DESCRIPCION DEL DISEÑO TEMA 1: PROCESO DE DISEÑO DE SISTEMAS DIGITALES
t
Desde la especificación de un diseño hasta su fabricación, el diseño pasa a través de un conjunto de etapas: – Las distintas etapas utilizan
niveles de abstracción
t
Descripción del diseño – Representaciones de diseño – Niveles de abstracción
t
Proceso de diseño – Pasos del proceso de diseño
t
Herramientas CAD de diseño
t
Metodología típica de diseño
distintos
• Las etapas iniciales son más abstractas • A medida que se avanza en el diseño se aumenta el nivel de detalle de la implementación y de la tecnología
– Para cada nivel de abstracción, abstracción, el diseño puede ser descrito utilizando distintas representaciones de diseño. – En algunas tareas el diseñador cuenta con la ayuda de herramientas CAD DETALLE
Especificación del Diseño ABSTRACCION
Representaciones de diseño t
t
Las distintas representaciones difieren en el tipo de información que se destaca
Estructural – El sistema se describe como un conjunto de componentes y sus conexiones – La funcionalidad no se da explícitamente
t
t
Comportamental – Especifica el comportamiento del sistema en función de los valores de entrada
t
Niveles de abstracción. Granularidad
Física – Especifica las dimensiones y situación de cada componente y las conexiones contenidas en la descripción estructural
t
Los distintos niveles de abstracción difieren en el tipo de objeto (grano) que utilizan como componentes básicos en la descripción del diseño
Nivel de transistor: transistores, resistencias, condensadores.
t
Nivel lógico: puertas lógicas y FFs.
t
Nivel de registro: unidades funcionales y de almacenamiento (sumadores, registros, contadores, pilas).
t
Nivel de procesador: procesador, memoria, controlador, interfaz, ASIC.
n ó i c c a r t s b A e d s e l e v i N . s v s e n o i c a t n e s e r p e R
A C I S I F
s s B M C C P M
L A R U T C U R T S E
a s i r r e o o r o d m d a e a s l e M o c r o , t r C n P I o S C A
L A T N E M A T R O P M O C
s s a o m m t a i r r g o o l r g P A
/ T N E S E L R E P V E I R N
s a d l e c o r c a M
s s e o d l u a d d ó i n M U
a l a t d l i e i g C d
s e l a s n e o r i c o s a n d l u a t i f P . n o d i C n U
s a t s r F e F u P
s s e e n r o o t i s x i s e n n o a r C T , R
s s a o i c r t n i s e r g e f e s r n e a r r t n T e
s a n a e F l o E o B M . c E
PROCESO DE DISEÑO t
– Existen diferentes alternativas ESPECIFICACION
s e l a i ) t c ( n I e , r ) e t f ( i d V . c E t
R O D A S E C O R P
O R T S I G E R
O C I G O L
El proceso de diseño evoluciona desde la especificación del circuito electrónico hasta su fabricación
O V I T I S O P S I D
Una Metodología de Diseño está constituida por: – Conjunto de tareas específicas realizadas en el proceso de diseño – Orden en el que dichas tareas han de ser ejecutadas – Herramientas CAD utilizadas en la realización de cada tarea
Metodología “top-down”
A C I S I F
Especificación
o ñ e s i D e d o s e c o r P
L A R U T C U R T S E
n ó i c a d i l a V
Síntesis
L A T N E M A T R O P M O C / T N E S E L R E P V E I R N
n ó i c a d i l a V
Diseño Físico
R O D A S E C O R P
O R T S I G E R
O C I G O L
O V I T I S O P S I D
t s e T
Fabricación
Biblioteca de componentes
Especificación del sistema t
Guiados por las especificaciones del diseño (velocidad, área, tamaño de la serie,...), el diseñador debe seleccionar: – Tipo de implementación – Fabricante – Herramientas de diseño (EDA)
C.I. C.I.estándar estándar
SSI/MSI
LSI/VLSI
Programable Programable
PLD
Microprocesador Microprocesador
FPGA
ASIC ASIC
Semi-custom
Gate Array
Full-custom
Standard Cell
m o t s u C l l u F a r u t c u r t s E
O / I
h t a p a t a D
s d a P
M A R
C D A
U n i v e r s i d a d d e Z a r a g o z a , I E C .
E s tr u c tu r a S t a n d a r d C e ll Pads
Cells
Feedthrough
C e l l L ib r a r y A C
B D
I/O FUNCTIONAL BLOCK L u i s A .
Vdd Vss
Routing channels
U n i v e r s i d a d d e Z a r a g o z a , I E C .
E s tr u c tu r a b á s ic a d e F P G A
Programmable Interconnect
L u i s A .
I/O Blocks (IOBs)
Configurable Logic Blocks (CLBs)
n ó i c a t n e m e l p m i e d s o p i t e r t n e n ó i c a r a p m o C
a j a B
a n u g n i N
a d a r e d o M
a n a i d e M
e d g n s i a t p u a o C R
l l e c d r a d n a t S
a a a d ñ a r e e u d q o e P M
a a n a a i t d l e A M
s a d o T
m o t s u c l l u F
a ñ e u q e P
A G P F
e d n a r G
y a r r A e t a G
Síntesis t
Síntesis: conversión de una descripción comportamental en una estructural, en la que cada bloque es un componente de la biblioteca elegida
Tareas de síntesis
Síntesis de la arquitectura
a e r A
a t l A
d a d i c o l e V
s a d o T
Síntesis Lógica r a a c s i a r p b a a C F
HERRAMIENTAS CAD t
Clasificación
Herramientas de Modelado t
– Modelado
Captura de esquemas: – Permite seleccionar componentes de menú e interconectarlos
• Captura de Esquemas
• Esquemáticos
• HDL
– Modela representaciones estructurales
– Síntesis • Síntesis de Alto Nivel (Comportamental) • Síntesis Lógica
t
– Permite la captura de representaciones estructurales
Generadores de Macroceldas
– Simulación
– Además, modela representaciones comportamentales
• Funcional • A nivel de transistor
– Ubicación e interconexionado (P&R) • Reglas de diseño (DRC) • Extracción del circuito (LVS)
– Test • Generación de vectores de test • Cobertura de fallos
HDLs. Características:
t
Esquemáticos y HDLs deben ser utilizados de forma conjunta – La interconexión entre componentes se captura mejor gráficamente – La funcionalidad de un controlador se captura mejor con HDL, utilizando instrucciones if-then-else
Herramientas de Modelado t
Herramientas de Síntesis
Ambito de utilización de HDLs:
t
– Eficiente – Poco eficiente COMPORT. PROCESADOR
ESTRUCT.
FISICA
t
REGISTRO
t
– Transformar expresiones booleanas en puertas
CIF, EDIF
DISPOSITIVO
Permite: – Transformar descripciones de MEF en puertas y biestables
Diag. Bloques
LOGICO
La síntesis lógica es el proceso de convertir una descripción HDL en un netlist de puertas de una tecnología dada
– Minimizar número de puertas, retardos de propagación, área y/o consumo
EDIF
HDLs más utilizados:
VHDL
Verilog
IEEE estándar
Cadence
Público
Público
ADA
C, Pascal
t
Ventajas: – Reduce el ciclo de diseño
Origen Dominio Parecido a
– Permite modelar un diseño en HDL de forma independiente de la tecnología y posteriormente sintetizarlo para distintas tecnologías
Herramientas de síntesis lógica
METODOLOGIA TÍPICA DE DISEÑO Especificaciones
Compañía
Nombre del Producto
Nivel de Síntesis
Tipo de Circuitos
Max-Plus-4 (AHDL, VHDL)
RTL, MEF
CPLD
Cadence
Synergy (VHDL, Verilog)
RTL, MEF Test
ASIC FPGA
Cypress
Warp II, III (VHDL)
RTL, MEF
PLD FPGA
Mentor Graphics
Autologic (VHDL)
RTL, MEF Test, Datapath
ASIC FPGA
Synopsys
Design Compiler (VHDL, Verilog)
RTL, MEF Test
ASIC FPGA
ViewSynthesis (VHDL, Verilog)
RTL, MEF Test
ASIC FPGA
Altera
Viewlogic
Castellano
Diseño de la arquitectura
Especificación RTL
Descripción HDL
Diseño Lógico Especificación a nivel de celdas prediseñadas
Netlist de puertas
Diseño Físico
Layout Manual
Automatizado
Metodología típica de diseño Especificación Funcional del Diseño Diagrama de Bloques
l a r o p m e T s i s i l á n A
Codificación VHDL
Simulación Funcional del VHDL
Síntesis Lógica
Síntesis del test / ATPG
Simulación a nivel de Puertas
Netlist de Puertas
s i s e t n í s e r P t s e t e e d t a r n e u i t c r i e f b u o s n C I
INTRODUCCION TEMA 2: LENGUAJE VHDL
t
Breve historia
t
Características de VHDL
t
Introducción
t
Codificación orientada al hardware
t
Conceptos básicos
t
Objetivos del tema
t
Organización del diseño
t
Descripción de la arquitectura
t
Modelo de tiempos
t
Descripción de circuitos digitales
t
Simulación
Breve historia t
¿Qué significa VHDL?
Características de VHDL (1) t
– VHDL = VHSIC Hardware
Description Language – VHSIC = Very High Speed Integrated Circuits t
Inicialmente, documentación de diseños y creación de modelos de simulación de hardware para el DoD (1981).
Permite diseños modulares y jerárquicos. Soporta distintas metodologías de diseño: – Arriba-abajo – Abajo-arriba – Mixto
t
Soporta varias técnicas de modelado digital: – Descripción algorítmica – Ecuaciones booleanas
t
Estándar IEEE ⇒ Portabilidad – 1987, se aprobó el lenguaje estándar IEEE 1076-1987
– Máquinas de Estados Finitos (MEFs) t
– 1992, cada 5 años se revisa el proceso de estandarización, IEEE 1076-1992 t
Permite descripción de hardware digital: – Puertas lógicas – Sistemas complejos (SPARC)
Soporta temporización: – Síncrona – Asíncrona
t
Es un lenguaje concurrente, aunque permite definir dominios en los que las acciones se suceden en orden secuencial
Características de VHDL (2)
Codificación orientada al hardware
t
Soporta tipos abstractos de datos.
t
Codificar pensando en puertas y FFs, no en variables y funciones!!
t
Permite simular el diseño y generar formas de onda
t
Diseñar circuitos síncronos
– Entornos de test (test benchs). t
Soporta distintos niveles de descripción:
– Un único reloj y flanco (si es posible). t
Codificar en HDL no nos preserva de problemas hardware: glitches, violación de restricciones temporales tsu, th.
t
Evitar:
– Comportamental – RTL – Lógico t
– Bucles combinacionales.
A partir de un modelo en HDL se puede sintetizar hardware a nivel de puertas con herramientas especiales de síntesis
– Buffers triestado. – Latches (usar sólo FFs). – Set, Reset asíncronos. – Relojes condicionales ( Gated-clock ).
– Independencia de la tecnología.
t
Comentar el código fuente ⇒ Reutilización↑
Objetivos del tema
CONCEPTOS BASICOS
Enmarcar los lenguajes de descripción de hardware dentro del proceso de síntesis lógica
t
Objetos
t
Tipos
t
Presentar una introducción a VHDL
t
Operadores
t
Reforzar la sintaxis y semántica de VHDL con la presentación de ejemplos
t
• Conocer la sintaxis de VHDL, no implica necesariamente saber diseñar hardware con él t
Introducir mediante ejemplos la influencia del estilo de codificación en el hardware sintetizado
Objetos t
Los objetos en VHDL contienen valores.
t
Clases de objetos: – Constant. Se les asigna un valor inicial que no puede ser modificado.
Tipos t
Todos los objetos en VHDL son de algún tipo. Es ilegal conectar señales que no son del mismo tipo
t
Un tipo de datos se caracteriza por un conjunto de valores que puede tener y un conjunto de operaciones .
– Variable. Contiene un valor que puede ser modificado. – Signal . Contiene una lista de valores que incluye el valor actual y un conjunto de posibles valores futuros.
– El tipo de cada objeto es estático t
– File. Modelan ficheros en el entorno del host . Se utilizan en test-benchs. t
Estos objetos se crean mediante su declaración: –
t
boolean, bit, bit_vector, character, string, integer, real, time, positive, natural. t
El lenguaje permite crear nuevos tipos y definir operaciones con esos tipos a través de funciones
t
Tipos de datos predefinidos:
variable R: natural := 0;
Declaraciones implícitas: – Puertos de una entidad – Indices de bucles
Los tipos predefinidos en el lenguaje están declarados en el package STANDARD :
- Scalar
- Composite
- Access
- File
Tipos escalares t
Composite t
Existe una relación de orden entre los valores de los objetos de este tipo
Tipo matriz: – Una o más dimensiones
INTEGER constant MUX_ADDRESS: integer := 5; -- Rango desde -(2**31) hasta (2**31-1) -- Se puede especificar un rango menor type INDEX is integer range 0 to 15; constant MUX_ADDRESS: INDEX := 5; type natural is integer range 0 to integer'high; FLOATING POINT
– Elementos del mismo tipo – Acceso indexado 0
1
0 1 2 3
variable F0 : real := 62.3E-2; -- Se puede especificar un rango type ANALOG_IN is real range 0.0 to 5.0; t
type ADR_WORD is array (0 to 63) of BIT; type DATA_WORD is array (7 downto 0) of BIT; type ROM is array (0 to 125) of DATA_WORD ; -- ∃ arrays predefinidos: BIT_VECTOR variable OP_CODE: BIT_VECTOR (1 to 5); OP_CODE := "01001"; OP_CODE := ('0','1','0','0','1'); OP_CODE := (2=>'1', 5=>'1', others=>'0');
– Uno o más campos – Campos de diferente tipo
-- Conjunto de valores definidos por el usuario -- Hace más legible el código, se utiliza en la -- definición de máquinas de estado type MICRO_OP is (LOAD, STORE, ADD, SUB);
– Acceso por nombre Campo1
-- Representan medidas de magnitudes físicas -- Existe un tipo TIME cuya unidad es fs constant TH : time := 10 ns;
3
Tipo Registro:
ENUMERATION
FISICOS
2
Campo2 Campo3 Campo4
type OPCODE is (LD, ST, ADD, SUB); type ADR is array (0 to 63) of BIT; type INSTRUCTION is record OPCODE_FIELD : OPCODE; OPERAND1 : ADR; OPERAND2 : ADR; end record;
Tipos de datos t
Un SUBTIPO es un tipo con una restricción. – Se especifica el tipo base y el rango de restricciones – Se comprueba cada asignación para garantizar que el valor entra dentro del rango del subtipo
type MATRIZ is array(integer range<>, integer range <>) of integer; subtype IMAGEN is MATRIZ (0 to 255, 0 to 255); subtype POSITIVE is INTEGER range 1 to INTEGER´HIGH t
ALIAS. Define nombres alternativos para partes de un objeto ya existente signal SCON : bit_vector (7 downto 0); alias RI : bit is SCON (0) variable DATA_WORD : BIT_VECTOR (15 downto 0); alias DATA_BUS : BIT_VECTOR (7 downto 0) is DATA_WORD (15 downto 8);
Operadores t
Se definen sobre los tipos de datos predefinidos, aunque se pueden sobrecargar.
package std_logic_arith package std_logic_unsigned package std_logic_signed
ARITMÉTICOS
+ * / mod rem ** abs RELACIÓN = SIGN O
+
DESPL.
LOGICOS
sll srl sla sra rol ror
AND OR NAND NOR XOR NOT
/=
<
-
CONCATENACIÓN
&
>
<=
>=
ORGANIZACIÓN DEL DISEÑO t
Entidad:
Entidad t
– Declaración de la entidad. – Descripción de la arquitectura.
t
– Declaración de la configuración. t
t
Entidad = Abstracción Hardware de un Sistema Digital Las entidades pueden ser jerárquicas. – Una entidad E1 puede, a su vez, estar constituida por otras entidades
Empaquetamientos y librerías.
– Una entidad E2 se puede utilizar como componente de otra entidad E1
Entorno de trabajo con Synopsys. t
Una entidad consta de: – Declaración de la Entidad – Descripción de la Arquitectura – Declaración de la Configuración
E2 E1
Declaración de la entidad t
Modo de un puerto
Especifica el nombre de la entidad y el interfaz con su entorno (los puertos)
t
– IN, sólo pueden ser leídos
– Los puertos son señales; su declaración es implícita. t
– OUT, sólo se les puede asignar valor – INOUT, BUFFER. se les puede leer y asignar un valor desde dentro de la entidad.
No especifica la estructura de la entidad. Visión de “caja negra” (Encapsulado). Design Entity
A
M
B
N
C
P
D
Q
Entity Declaration
Architecture Body
IN
Config. Declaration
-- Declara el nombre de la entidad, -- los puertos de entrada y salida, los -- modos y los tipos de dichos puertos ENTITY E1 IS PORT (A, B, C, D : in BIT; M, N, P, Q : out BIT ); END E1;
Nombres
El Modo define la dirección del flujo de datos visto desde la entidad. Pueden ser:
Modos
Tipos
OUT
INOUT
t
Lectura de un INOUT, lee el valor del flujo de datos entrante
t
Lectura de un BUFFER, como solo tiene una fuente, lee el valor asignado
BUFFER R/W
Descripción de la arquitectura t
Contiene la descripción interna de la entidad. Estilos de modelado:
Declaración de configuración t
Realiza la correspondencia entre: – Entidad/Arquitectura
– Estructural: Conexión de componentes. – Comportamental: • Algoritmo secuencial (Alto Nivel Abstracción) • Ecuaciones booleanas (Bajo Nivel Abstracción) t
– Entidad/Componente t
Una vez que la configuración se ha compilado, VHDL puede simular el modelo global Entity E1
Una entidad puede tener varias arquitecturas, que representan diferentes implementaciones de la misma.
component E2 ... end component
ARCHITECTURE mi_arq OF E1 IS
Design Entity Entity Declaration
-- Declaración de items que serán -- utilizados dentro del cuerpo de -- la arquitectura -- Los nombres de los puertos y -- genéricos no requieren ser -- declarados
...
I_1: E2
E1_A1
E1_A2
Entity E2
BEGIN Architecture Body
Config. Declaration
-- Instrucciones Concurrentes -- El orden textual no importa -- ya que se ejecutan en paralelo END mi_arq;
-- Descripción de entidad E1 en -- fichero E1.vhd configuration CFG_E1 of E1 is for E1_A2 for I_1: E2 use configuration WORK.CFG_E2_A1 ; end for; end for; end CFG_E1;
E2_A1
E2_A2
-- Descripción de E2 entity en -- fichero E2.vhd configuration CFG_E2_A1 of E2 is for E2_A1 end for; end CFG_E2_A1
Entidad de diseño vs. placa de circuito impreso t
Declaración de Entidad
Empaquetamientos y librerías (1) t
– Pueden contener declaraciones y definiciones de objetos a usar en diferentes diseños.
– Definir zócalos t
Arquitectura
– Constan de: • Declaración: Componentes, constantes,
– Soldar zócalos en la placa y Rutear pistas
tipos, funciones y procedimientos.
– En un mismo zócalo se pueden insertar distintos C.I. compatibles funcionalmente y pin a pin según: velocidad, precio, consumo,... t
• Cuerpo: Cuerpos de las funciones y procedimientos declarados. package EX_PACK is --Declarations end;
Configuración – Insertar en cada zócalo un integrado
Empaquetamientos:
t
package body EX_PACK is --Body Declarations end;
Librerías: – Los diseños, una vez compilados, se almacenan en Librerías. – Una librería es un directorio. Los diseños compilados son ficheros.
Empaquetamientos y librerías (2) t
Entorno de trabajo con Synopsys odf.sym
Existen librerías predefinidas: – STD: Contiene los empaquetamientos • STANDARD, define los tipos, subtipos y funciones básicas del lenguaje.
CLK RST
Símbolo
DATA_RDY
• TEXTIO contiene declaraciones de tipos, subtipos y programas para operaciones ASCII.
ppp.sch
– WORK: librería de trabajo • Aquí se almacenan las entidades de diseño del usuario
OUT_DATA(15:0)
IN_DATA(15:0)
Esquemático
– IEEE: Contiene empaquetamientos:
odf
odf
I_1
I_2
ctl
• STD_LOGIC_1164
I_3
• STD_LOGIC_ARITH t
odf.vhd
Estas declaraciones pueden ser importadas y utilizadas por otros diseños utilizando la clausula USE. • Ejemplo: Suponiendo que EX_PACK se ha compilado en la librería DESIGN_LIB: library DESIGN_LIB; use DESIGN_LIB.EX_PACK.ALL;
library IEEE; use IEEE.std_logic_1164.all
Entity Declaration
VHDL
Architecture Body
Config. Declaration
DESCRIPCION DE LA ARQUITECTURA
Arbol de directorios /
t
Introducción
t
Estilos de modelado
t
Sentencia PROCESS
t
Sentencias secuenciales
VLSI1 home synopsys sd4
– Sentencias de asignación
packages
– Sentencia IF – Sentencia CASE
usuario
– Sentencia LOOP
IEEE WORK src
std_logic_1164.vhd std_logic_arith.vhd ...
t
Sentencia COMPONENT
t
Ejemplo
lib xxx.vhd xxx.sym xxx.sch
xxx.syn xxx.sim xxx.mra
Introducción t
Estilos de modelado (1)
La descripción de una arquitectura se compone de un conjunto de sentencias concurrentes que se ejecutan de forma asíncrona entre sí y se comunican mediante señales
t
El orden textual de las mismas no importa
t
La sentencia fundamental es el proceso que define los límites de un dominio secuencial
Código vs. estilo de modelado
t
ARCHITECTURE name OF entity IS
-- Declaración de items que serán utilizados -- dentro del cuerpo de la arquitectura BEGIN Sentencias Concurrentes PROCESS Conjunto de procesos ejecutandose asíncronamente COMPONENT instantation
t
El resto de sentencias concurrentes son formas particulares de procesos Architecture
Statement A
Statement B
Signal Assignment Process Component Block
Secuencial Concurrente
Estructural
END name; t
En la descripción de una arquitectura dada se pueden mezclar los dos estilos de modelado
t
VHDL tiene un dominio secuencial en el que opera un funcionamiento puramente algorítmico y un dominio concurrente en el que evolucionan los procesos a ritmo de eventos discretos
Statement C
Procedure Generate Assert
Comportamental
Estilos de modelado (2) t
Nombre y pines de la entidad
RS_Latch Q
RESET
t
Descripción comportamental Ecuaciones Booleanas
–
Dominio Concurrente.
–
N_RESET
Q T E S _ N
0
1
0 1
1
0
Q
1
Descripción comportamental Algoritmo secuencial.
—
SET RESET 0 0 1 1
t
entity RS_Latch is Port (N_SET : In BIT; N_RESET: In BIT; Q : Out BIT; N_Q : Out BIT); end RS_Latch;
Q
SET
Estilos de modelado (3)
0 1 0 1
Q
Q
1 1 0 Q
1 0 1 Q
architecture SEQUENTIAL of RS_Latch is begin process (N_SET, N_RESET) begin if (N_SET='1' and N_RESET='0') then Q <= '0' after 2 ns; N_Q <= '1' after 2 ns; elsif (N_SET='0' and N_RESET='1') then Q <= '1' after 2 ns; N_Q <= '0' after 2 ns; elsif (N_SET='0' and N_RESET='0') then Q <= '1' after 2 ns; N_Q <= '1' after 2 ns; end if; end process; end SEQUENTIAL;
t
architecture DATAFLOW of RS_Latch is signal Qtmp, N_Qtmp: BIT; begin -- Q y N_Q son de modo OUT, no pueden ser leídos -- no pueden aparecer en el lado derecho -- de una sentencia de asign ación -- Solución definir señales tempo rales Q <= Qtmp; N_Q <=N_Qtmp; Qtmp <= (not(N_SET)) or (Qtmp and N_RESET) after 2 ns; N_Qtmp <= (not(N_RESET)) or (N_Qtmp and N_SET) after 2 ns; end DATAFLOW;
Descripción estructural SET
RESET
U1
Q
U2
Q
architecture STRUCTURE of RS_Latch is component NAND2 port ( A, B : in BIT; C : out BIT); end component; begin U1: NAND2 PORT MAP(N_SET, N_Q, Q); U2: NAND2 PORT MAP(N_RESET, Q, N_Q); end STRUCTURE;
Sentencia PROCESS (1)
Sentencia PROCESS (2)
t
Un proceso es una sentencia concurrente
t
En el interior de un proceso las sentencias se ejecutan en el orden secuencial marcado por las sentencias de control de flujo de programa típicas de un lenguaje imperativo. La ejecución se hace en tiempo cero. Dominio Concurrente
t
– Lista de sensibilidades – Sentencias WAIT t
– Utilizar lista de sensibilidades y sentencias wait en el mismo proceso
Dominio secuencial end process; t
process (sensitivity list); -- Declarations (var.) begin -- Sequential stmts end process;
Un proceso puede estar activo o en suspenso. El proceso se ejecuta hasta que se suspende.
Ejecución temporal de un proceso con lista de sensibilidades process (A, B); begin Stmt_1; Stmt_N; end process;
Proceso Activo
Es un error: – No utilizar ninguno de los dos mecanismos en un proceso. El proceso permanece en un bucle infinito
process (sensitivity list);
t
Mecanismos para suspender un proceso:
Suspenso
Activo Eventos en AoB Suspenso
Sentencia PROCESS (3) t
Sentencia PROCESS (4)
La sentencia WAIT, suspende el proceso: – Hasta que se cumple una condición, Ej: wait until A=B; – Hasta que se produce un evento en señales, Ej: wait on A, B; – Durante un intervalo de tiempo, Ej: wait for 10 ns;
t
t
Presencia de lista de sensibilidades en un proceso wait on lista de sensibilidades Ejecución temporal de un proceso con sentencia WAIT: process begin Stmt_1; wait on A, B; Stmt_I; Stmt_N; end process;
Suspenso Eventos en AoB Activo
t
Generación de una señal de reloj -- Mal Comportamental -- Si no hay ni lista de sensibilidades ni sentencias wait -- El proceso siempre está activo y permanece en un bucle infinito CLOCK: process begin if CLK = '1' then CLK <= '0' after 10 ns; else CLK <= '1' after 15 ns; end if; end process; -- Comportamental1: Lista de sensibilidades -- El proceso se suspende al ejecutar la última instrucción -- Se reactiva cuando hay un evento en la señal CLK y -- comienza la ejecución a partir de la primera sentencia CLOCK: process (CLK) begin if CLK = '1' then CLK <= '0' after 10 ns; else CLK <= '1' after 15 ns; end if; end process; -- Comportamental2: Sentencia wait CLOCK: process begin if CLK = '1' then CLK <= '0' after 10 ns; else CLK <= '1' after 15 ns; end if; wait on CLK; end process;
Sentencias secuenciales t
Sentencias de asignación t
Para consultas sobre la sintaxis:
– Nombre_sig <= expresion;
– Utilizar ayuda on-line iview &
– Las señales a ambos lados del operador de asignación deben ser del mismo tipo
Sentencias de Flujo Control IF CASE RETURN
LOOP NEXT EXIT
Asignación de señal:
Sincronización entre procesos
– Si hay varias asignaciones a la misma señal dentro de un mismo proceso: prevalece el valor de la última
WAIT
– Pueden aparecer en sentencias secuenciales y concurrentes Tipos de Sentencias Secuenciales
t
Asignación de variable: – Nombre_var := expresion;
Subprogramas PROCEDURE FUNCTION
Asignación de Señales Asignación de Variables Assertion
– Los objetos a ambos lados del operador de asignación deben ser del mismo tipo – Mantienen su valor a lo largo del ciclo de simulación – Sólo puede aparecer en el interior de un proceso (dominio secuencial)
Sentencia IF t
Sentencia CASE
Sentencia IF:
t
Sentencia CASE
– Cada una de las condiciones debe ser booleana
– Se escoge una y sólo una de las alternativas
– Si una condición es evaluada como verdadera, el resto de las expresiones no son evaluadas
– Cuando no se cubren todas las alternativas es necesario la inclusión como última alternativa de :
PROCESS BEGIN if S1='0' and S0='0' then Z <= IN0 after 5 ns; elsif S1='0' and S0='1' then Z <= IN1 after 5 ns; elsif S1='1' and S0='0' then Z <= IN2 after 5 ns; else Z <= IN3 after 5 ns; end if; wait on IN0,IN1,IN2,IN3, S1,S0; END PROCESS
IN0 IN1
MUX IN2 IN3 S0 S1
Z
• when others PROCESS (IN0, IN1,IN2,IN3,S1,S0) subtype two_bits is BIT_VECTOR(1 downto 0); BEGIN case two_bits'(S1&S0) is when "00" => IN0 Z <= IN0 after 5ns; when "01" => IN1 Z <= IN1 after 5ns; Z MUX when "10" => IN2 Z <= IN2 after 5ns; IN3 when others => Z <= IN3 after 5ns; S0 S1 end case; END PROCESS;
Sentencia LOOP (1) t
Sentencia LOOP: – La forma con while primero evalua la condición y si ésta es verdadera se ejecuta el contenido del bucle. – La forma con for especifica un número de iteraciones. La declaración de la variable de iteración es implícita. No se le puede asignar valores dentro del bucle y no existe fuera de él.
t
Dentro de un bucle se pueden utilizar las sentencias: NEXT y EXIT. L1: L2:
while A < 10 loop for I in 0 to 10; -- Sentencias next L2 when I = A; -- exit L2 when I = A; -- Sentencias end loop L2; -- Sentencias end L1;
Sentencia LOOP (2) ---------- COMPARADOR DE 4 BITS ---------entity COMP4 is PORT(A, B: in BIT_VECTOR(3 downto 0); AEQB, AGTB, ALTB: out BIT); end COMP4; architecture LOOP_BEH of COMP4 is begin process(A,B) variable var_EQ : bit := '0'; variable var_LT : bit := '0'; variable var_GT : bit := '0'; begin L1: for I in 3 downto 0 loop if(A(I)=B(I)) then var_EQ := '1'; else var_EQ := '0'; if (A(I) = '1') then var_GT := ' 1'; else var_LT := '1'; end if; exit L1; end if; end loop L1; AEQB <= var_EQ; AGTB <= var_GT; ALTB <= var_LT; end process; end LOOP_BEH;
Sentencia COMPONENT t
Se utiliza para modelar una entidad como un conjunto de componentes conectados por señales –
Sentencia concurrente: el orden textual no importa
–
Un componente se puede instanciar un número arbitrario de veces. Cada instancia debe tener una etiqueta única
architecture STRUCT_A of GATING is -- Declaración de componentes component AND2 port (X, Y: in BIT; Z : out BIT); end component; component NAND2 port(A, B:in BIT; MR C:out BIT); RDY Q end component; S1 D A component DFF QN S2 port(D, CLK:in BIT; CLK Q, NQ:out BIT); CTL CK end component; DIN signal S1, S2 : BIT; begin -- Instanciación de componentes. Asocia -- Asocia las señales de la entidad con los -- puertos de los componentes I_1: DFF port map (A, CK, S1, S2); I_2: AND2 port map(S2, DIN, CTL); I_3: NAND2 port map (C=>RDY, A=>S1, B=>MR); end STRUCT_A;
Ejemplo (1) clock CLK I_1
3bit_counter CLK
COUNT
RST reset RST I_2
I_3
entity reset is PORT(RST: out bit); end reset; reset RST
architecture rst_beh of reset is begin -- Forma de onda NO repetitiva RST <= '0', '1' after 100 ns; end rst_beh;
entity clock is PORT(CLK: out bit); end clock;
clock CLK
architecture clk_beh of clock is constant TCLK: time := 20 ns; begin -- Forma de onda repetitiva process begin CLK <= '0', '1' after TCLK/2; wait for TCLK; end process; end clk_beh;
Ejemplo (2)
MODELO DE TIEMPOS
entity 3bit_counter is PORT(CLK,RST: in bit; COUNT: out integer range 0 to 7); end 3bit_counter; architecture behavioral of 3bit_counter is signal NEXT_COUNT: integer range 0 to 7; signal COUNT_tmp : integer range 0 to 7; begin
t
Ciclo de simulación
t
Tiempo de simulación es 2_D
t
Señales vs. variables
t
Asignación concurrente de señales
COUNT <= COUNT_tmp; process begin wait until CLK='1'; COUNT_tmp <= NEXT_COUNT; end process;
t
t 3bit_counter
CLK process(COUNT_tmp, RST) RST begin if (COUNT_tmp = 7) then NEXT_COUNT <= 0; else NEXT_COUNT <= COUNT_tmp + 1; end if; if(RST = 0) then NEXT_COUNT <= 0; end if; end process; end behavioral;
COUNT
Driver Múltiples drivers
Ciclo de simulación t
Tiempo de simulación es 2_D
La simulación – Comienza con las asignaciones de señal y todos los procesos suspendidos
t
– No se corresponde con ningún retraso real. El tiempo físico de simulación no avanza.
– Los procesos reaccionan ante eventos en ciertas señales
– Permite ordenar eventos que ocurren en el mismo tiempo de simulación ⇒ La ordenación es causal
– Finaliza cuando no hay procesos activos ni asignaciones de señal que hacer en dicho tiempo T Current Simulation Time
T
-- Sea un conjunto de asignaciones -- concurrentes de señales cuyos -- valores iniciales son '0'
Next Simulation Time 3∆
t
Retraso delta
1st Half
2nd Half
UPDATE SIGNALS
AWAKE PROCESS
*
E
2∆
*
D
1∆
*
C
Durante el ciclo de simulación el tiempo físico no avanza Existe al menos un retraso delta ∆ desde que se asigna un nuevo valor a una señal hasta que ésta adquiere dicho valor
*
*
*
B
20 ns
B <= '1' after 20ns; D <= C; C <= B; E <= D; F <= E after 20ns; *
F
40 ns
X, señal X es actualizada
-- Una asignación concurrente se -- ejecuta siempre que ocurre un -- evento en una señal que aparece -- en su lado derecho
Señales vs. variables (1) t
t
Aunque ambas sintetizan en los mismos elementos: cables o FFs, su semántica es totalmente distinta.
CONDICIONES INICIALES A=0, B=1, C=2, X=3
La asignación de un nuevo valor a una variable es instantanea. – Visibilidad local. La declaración y asignación de variables sólo puede aparecer en el interior de un proceso (dominio secuencial) • No se recomienda el uso de variables globales (VHDL'93)
t
Señales vs. Variables (2)
La asignación de un nuevo valor a una señal no es instantánea, existe al menos un retraso ∆ . – Z <= A0 and A1 [after 6ns];
PROCESS -- A, B, C, X son variables -- Declaración y asignación -- dentro del proceso BEGIN -- wait until the trailing -- edge of the clock wait until Clock = '1'; -- variable assignments A:= B+C; -- 1+2 X:= A+C; -- 3+2 A:= X+C; -- 5+2 END PROCESS;
PROCESS
-- A, B, C, X son señales -- Las señales se han de-- clarado fuera del proceso BEGIN
-- wait until the trailing -- edge of the clock wait until Clock = '1';
-- signal assignments A<= B+C; -- 1+2 X<= A+C; -- 0+2 A<= X+C; -- 3+2 END PROCESS;
– Son globales. No se pueden declarar en el interior de un proceso – Pueden aparecer en sentencias secuenciales y concurrentes
A=7, X=5
A=5, X=2
Asignación concurrente de señales (1) t
Asignación concurrente de señales (2)
Las sentencias de asignación de señales se ejecutan en respuesta a eventos en alguna de las señales que aparecen en el miembro derecho de la asignación
t
Una asignación concurrente se ejecuta siempre que ocurre un evento en una señal que aparece en su lado derecho
– La señal no adquiere su nuevo valor de forma instantanea, existe al menos un retraso ∆ .
t
Existe una sentencia PROCESS equivalente
architecture A1 of INV is signal B, C : bit; begin -- El orden textual A -- no importa Z <= NOT C; B <= NOT A; C <= NOT B; end A1;
B
C
Z
Out <= In2 - In1 after 8 ns;
t
Asignaciones secuenciales vs. concurrentes process(B) begin -- Secuencial A<= B; Z <= A; end process;
-- En T= 20 ns, ocurre evento en A
3∆
*
2∆ 1∆ *
* *
Z C B
* 20 ns
process (In1, In2) begin Ou t <= In2 - In1 afte r 8ns; end process;
-- Concurrente A<= B; Z <= A; B
A B
B
A
C
A
Z
Z
Z 20ns
20ns + 3 ⋅ ∆
Multiples drivers
Driver t
Driver : lista de pares (valor, tiempo) ordenados temporalmente (T, ∆) asociados
t
Cada sentencia de asignación concurrente asocia un driver a la señal modificada
t
Una señal con más de un driver debe de tener una función de resolución, en caso contrario es un error.
a una señal t
El driver de una señal representa la evolución temporal futura de la misma
t
La sentencia de asignación de señal crea en el driver de la señal asignada un nuevo par (valor, tiempo) – El valor es el resultado de evaluar la expresión de la sentencia – El tiempo es igual a la suma del tiempo actual de simulación (en el que se ejecuta la sentencia) más el retardo declarado a la derecha de la palabra reservada AFTER. Z
('0', 5ns) ('1' ,10ns + 3∆)
'U'
'0' 5
'1' 10
ns
A B
C
t
1 0 0
?
Z
0 1
DR1:
('0' , 10ns)
DR2:
('1' , 5ns)
architecture A1 of TWO_DR is begin Z <= A and B after 10 ns; Z <= not C after 5 ns; end;
Función de Resolución
Z
Analogía entre función de resolución en VHDL y los C.I. con salidas en colector abierto: si existe un driver t.q. su valor = '0', entonces la salida es '0'.
DESCRIPCION DE CIRCUITOS DIGITALES t
Introducción
t
Circuitos combinacionales
t
Circuitos secuenciales:
Introducción t
En este apartado se dan plantillas o patrones que modelan distintos tipos de circuitos digitales.
t
Se indican algunos de los posibles problemas que nos pueden aparecer:
– Latches
– Diferencias Simulación vs. Síntesis.
– Flip-Flops t
Máquinas de Estados Finitos (MEFs)
t
VHDL es muy flexible, y no todas sus construcciones sirven para describir circuitos. – Nos centraremos en el subconjunto de VHDL sintetizable para Synopsys.
Circuitos combinacionales t
Procesos => Cir. combinacionales
Sentencias de Asignación concurrentes => Lógica Combinacional
t
library IEEE; use IEEE.std_logic_1164.all; entity COMBI is port( A, B, C: in std_logic; D: out std_logic); end COMBI; architecture BEHAVIORAL of COMBI is begin D <= (A and B) or C; end BEHAVIORAL; configuration CFG_COMBI of COMBI is for BEHAVIORAL A end for; end CFG_COMBI; B
C
t
Procesos => Lógica Combinacional process (A, B, C) begin D <= (A and B) or C; end process;
t
D
Si una señal es leída en el interior de un proceso y no aparece en la lista de sensibilidad se producen diferencias entre síntesis y simulación process (A, B) begin D <= (A and B) or C; end process;
process (A, B, C) begin D <= (A and B) or C; end process;
Modelo VHDL original
Código interpretado por la herramienta de síntesis
No sintetiza asignaciones a señales con la claúsula AFTER C <= A and B after 10 ns;
Sentencia IF => Circuitos combinacionales (1) t
Tipo booleano
Sentencia IF => Circuitos combinacionales (2) t
Las señales y variables (locales) mantienen su valor hasta que se les asigna uno nuevo.
t
Para asegurar que se sintetiza un circuito combinacional, se debe asignar un valor a la señal D_OUT independientemente de si la condición de la sentencia IF es cierta o falsa
– Cierto => ‘1’ – Falso => ‘0’ t
La señal COND es leída dentro del proceso y debe aparecer en la lista de sensibilidad process(A, B, COND) begin -- Asignar valor a D_OUT -- en todas las condiciones if (COND) then D_OUT <= B; else D_OUT <= A; end if; end process;
B COND
A
D_OUT
process(A, B, COND) begin -- Asignar valor a D_OUT -- en todas las condiciones if (COND) then D_OUT <= B; else D_OUT <= A; end if; process(A, B, COND) end process; begin -- Dar a D_OUT -- un valor por defecto D_OUT <= A; if (COND) then D_OUT <= B; end if; end process;
Sentencia CASE => Circuitos combinacionales t
Las sentencias CASE no siempre se sintetizan en multiplexores
t
Para asegurar que se sintetiza un circuito combinacional, se debe asignar un valor a la señal Z para todo valor de SEL. PROCESS (A,B,C,D,SEL) BEGIN case SEL is when "00" => Z <= A; when "01" => Z <= B; when "10" => Z <= C; when others => Z <= D; end case; END PROCESS;
A
Latch t
process (Enable,Data) begin if (Enable='1') then Value <= Data; end if; end process;
process (Enable, Data) begin Value <= '0'; if (Enable='1') then Value <= Data; end if; end process;
t
B
MUX C D SEL
Z
Sentencia IF ⇒ Latch
Data
Value
Enable
Data Enable
Value
Si se desea evitar que la herramienta de síntesis infiera latches, se debe asignar valores a las señales y variables para todas las condiciones de una sentencia IF o CASE
Circuitos secuenciales t
Se sintetiza un circuito secuencial: – –
t
Flip-Flop t
Instanciación de Flip Flops (o componentes con FFs) en una descripción estructural
process (CLK) begin if (CLK'EVENT and CLK='1') then if (Reset = '1') then Q <= '0'; else Q <= Data; end if; end if; end process;
Procesos activados por flanco de reloj en una descripción comportamental
Patrones básicos (descrip. comportamental)
process begin -- Flanco Ascendente wait until CLK='1'; ... end process; process (CLK) begin if CLK'EVENT and CLK='1' then ... end if; end process; process (CLK, RST) begin if RST= '1' then ... elsif CLK'EVENT and CLK='1' then ... end if; end process;
Flip Flop con RESET síncrono
t
Flip Flop con RESET y PRESET asíncronos process (CLK, RST, PRT) begin if (Reset = '1') then Q <= '0'; elsif (PRT = '1') then Q <= '1'; elsif (CLK'EVENT and CLK='1') then Q <= Data; end if; end process;
Máquinas de Estados síncronas t
Una MEF es una sex-tupla:
MEFs Tipos:
t
– Vector de estados S={Sj}
– MOORE, correspondencia entre estado y vector de salida biunívoca Función de salida S→ O
– Vector de entrada I={Ij} – Vector de salida O={Oj} – Función de transición I × S → S – Función de salida I × S→ O
I
Función de Transición
Next state
Registros S
Función de Salida
O
– Estado inicial o de reset R Current state
t
t
Se utilizan para describir y simular subsistemas de control
– MEALY, el vector de salida depende del estado y del vector de entrada Función de salida: I × S→ O
Niveles de descripción: – Algorítmico – Tablas de Transición de estados – Ecuaciones booleanas y registros
t
Descripción algorítmica. Requisitos: – Claridad – Sintetizable
I
Función de Transición
Next state
Registros S
Current state
Función de Salida
O
Descripción en 2 procesos de MEF síncronas t
Descripción en 2 procesos de MEF síncronas t
Descripción en 2 procesos: – Proceso secuencial, actualiza el estado – Proceso combinacional, deriva el siguiente estado y actualiza las salidas – Para evitar "glitches", registrar salidas ENTITY fsm ARCHITECTURE Beh2 OF fsm
Combinacional: PROCESS( Current_state, All_inputs) S T U P N I
CASE Para cada estado: Transición de estados; Generación de salidas; END PROCESS; e t a t s t_ n e r r u C
Secuencial: PROCESS BEGIN -- Un unico CLK wait until CLK ='1'; Current_state <= Next_state; END PROCESS;
N e x t _ s t a t e
O U T P U T S
Estructura General:
ARCHITECTURE beh2 OF fsm IS type STATE_TYPE is (S0,S1,S2); signal current_state, next_state: STATE_TYPE; BEGIN combi: PROCESS(current_state, all_inputs, RST) BEGIN signals <= default assignments; CASE current_state is WHEN S0 => 0/0 IF input = '0' THEN output <= '0'; S0 next_state <= S0; ELSE output <= '1'; 1/1 next_state <= S2; END IF; unconditional signal generation; S2 WHEN S1 => ................. WHEN OTHERS => -- Fail safe behavior -- illegal state recovery END CASE; -- Power on reset initialization IF reset_conditions THEN transition to reset state R and reset signals; END IF; END PROCESS combi; Seq: PROCESS BEGIN -- All FFs driven by the same clock wait until CLK='1'; current_state <= next_state; END PROCESS seq; END beh2;
SIMULACION t
Entornos de test
t
Generación de estímulos
Entornos de test t
Un entorno de test ( test bench) es otra entidad de diseño que se utiliza para verificar la corrección funcional de nuestro diseño. – Se pueden utilizar construcciones VHDL no sintetizables.
– Vectores de test – Ficheros t
Partes de un entorno de test: – Entidad a testear (EUT). Se instancia como un componente – Generador de Estímulos. Estos se aplican a los puertos de entrada de la EUT. – Monitor de los resultados: Fichero de datos o Waveform Viewer . • Comparar resultados obtenidos con valores esperados. TEST BENCH
Generador de Estímulos Monitor de Resultados
CLK RST, IN_DATA
OUT_DATA
EUT: Engloba todo el hardware que va a ser
sintetizado
Generación de estímulos t
Los estímulos pueden:
Vectores de test almacenados en tabla (1) t
– ser generados mediante código VHDL no sintetizable
– Los estímulos pueden ser vectores de entrada almacenados en una tabla
– ser vectores de datos almacenados en:
– Los resultados esperados se pueden almacenar junto con el correspondiente vector de entrada para su comparación con el resultado obtenido
• vector o tabla • fichero ASCII t
Utilización:
Generación de estímulos: – Patrones NO Repetitivos – Patrones Repetitivos --No repetitivo RST <= '1', '0' after 20 ns;
--Repetitivo process begin CLK <= '0'; wait for 10 ns; CLK <= '1'; wait for 10 ns; end process; --Repetitivo process begin CLK <= '1', '0' after 20 ns; wait for 50 ns; end process;
t
Ejemplo: – Declaración
type test_vector is record input1, input2, output: std_logic; end record; type test_vector_table is array(natural range <>) of test_vector; constant input_vectors: test_vector_table := ( (input1 => '0', input2 => '0', output => '0'), ... (input1 => '1', input2 => '1', output => '1') );
Vectores de test almacenados en tabla (2) – Aplicación de estímulos a las entradas de EUT y comprobación de las salidas
Ficheros (1) t
– Los estímulos pueden ser vectores de entrada almacenados en un fichero ASCII
-- Instanciación de EUT U1:eut port map(CLK=>actual_clk,I1=>actual_input1, I2=>actual_input2, O=>actual_output); -- Aplicación de los estímulos process begin for i in input_vectors'range loop -- Aplicar vector de test -- en el flanco de bajada del reloj actual_clk <= '0'; actual_input1 <= input_vectors(i).input1; actual_input2 <= input_vectors(i).input2; wait for 10 ns; actual_clk <= '1'; wait for 10 ns; -- Comprobar resultados de simulación assert(actual_output=input_vectors(i).output) report "Resultado incorrecto"; end loop; assert FALSE -- Parar la simulación report "Fin"; end process;
Utilización:
– Los resultados se pueden escribir en un fichero para posterior comprobación t
Construcciones:
Package TEXTIO -- Definiciones de tipos type STRING is array (POSITIVE range <>) of CHARACTER type LINE is access STRING;-- Pointer to a STRING value type TEXT is file of STRING; type SIDE is (RIGHT, LEFT);-- Justify output data type WIDTH is NATURAL;-- Specify widths of output fields -- Funciones y Procedimientos predefinidos function ENDFILE (F: TEXT) return BOOLEAN; procedure READLINE(F: in TEXT, L: out LINE); procedure READ(L:inout LINE; VALUE:out
; GOOD: out BOOLEAN); procedure WRITELINE(F: out TEXT; L: in LINE); procedure WRITE(L:inout LINE; VALUE:out ; JUSTIFIED: in SIDE; FIELD: in WIDTH); cualquiera de los definidos en el package STANDARD
Ficheros (2) t
Ejemplo:
-- Instanciación de EUT U1:eut port map(CLK=>actual_clk,I1=>actual_input1, I2=>actual_input2, O=>actual_output); -- Aplicación de los estímulos READ FILE: process file INPUT_FILE: text is in "./eut_test.vec"; variable MY_LINE: line; variable IN1, IN2, OUT: std_logic; BEGIN WHILE (NOT (endfile (INPUT_FILE))) LOOP readline(INPUT_FILE, MY_LINE); read (MY_LINE, IN1); read (MY_LINE, IN2); read (MY_LINE, OUT); -- Aplicar valores leidos actual_clk actual_clk <= '0'; actual_input1 <= IN1; actual_input2 <= IN2; wait for 10 ns; actual_clk actual_clk <= '1'; wait for 10 ns; assert (actual_output = OUT) report "Resultado incorrecto"; END LOOP; assert FALSE -- Parar la simulación report "Fin"; END PROCESS;
Metodología “top-down” TEMA 3: SINTESIS LOGICA t
Introducción
t
Codificación VHDL orientada a síntesis
t
Síntesis lógica con Synopsys – Ento Entorn rnoo de de Syno Synops psys ys – Empe Empeza zarr con con Desi Design gn Ana Analyz lyzer er – Descripc Descripción ión del entorno entorno del diseño diseño – Restric Restriccio ciones nes en el proceso proceso de sínt síntesis esis – Optimi imizaci zacióón – Anál Anális isis is del del dis diseñ eñoo
Especificación n ó i c a d i l a V
Síntesis n ó i c a d i l a V
Diseño Físico
t s e T
Fabricación
Biblioteca de componentes
Síntesis t
Introducción
Síntesis : conversión de una descripción
comportamental en una estructural, en la que cada bloque es un componente de la biblioteca elegida
Tareas de síntesis
t
t
Síntesis de la arquitectura t
Síntesis Lógica
Descripción VHDL de un sistema. Requisitos: – Captu Captura rarr la funcio funciona nalid lidad ad – Cumpli Cumplirr especi especifica ficacio ciones nes de diseño diseño – Ser Ser SINT SINTET ETIZ IZAB ABLE LE SINTESIS: proceso de transformar una descripción VHDL comportamental/RTL en un netlist de puertas y biestables de una tecnología dada La descripción funcional VHDL es independiente de la tecnología. Sin embargo: EL CIRCUITO SINTETIZADO SINTETIZADO DEPENDE FUERTEMENTE DEL ESTILO DE CODIFICACION
Introducción t
Introducción
Síntesis: – Estilo de diseño => Celdas estándar – Herramienta de síntesis => Synopsys – Librería de celdas => ES2
HDL Comportamental /RTL
Librería de Celdas
entity combi is port(A,B,C: in std_logic; D: out std_logic); end combi; architecture behavioral of combi is begin D <= (A and B) or C; end behavioral
Netlist de puertas optimizado e independiente de la tecnología
A
Objetivos de Diseño
B C
HERRAMIENTA DE SÍNTESIS
D
Netlist para una tecnología: - CMOS, nº metales, 1µ - Fabricante
A B C
D
Netlist A B C
D
Buffers adicionales para satisfacer necesidades de corriente
Codificación VHDL orientada a síntesis TEMA 3: SINTESIS LOGICA t
Introducción
t
Codificación VHDL orientada a síntesis
t
Síntesis lógica con Synopsys – Entorno de Synopsys – Empezar con Design Analyzer – Descripción del entorno del diseño – Restricciones en el proceso de síntesis – Optimización – Análisis del diseño
t
La síntesis lógica es muy dependiente del estilo de código utilizado. – Pensar en téminos de circuito. • Recordar que VHDL es principalmente un lenguaje de descripción de hardware.
– Estilo recomendado: • Sentencias de asignación de señal concurrentes. • Procesos simples. • Uso de componentes para el particionado. t
Vamos a considerar los siguientes temas: – Tipos VHDL. – Señales frente a variables. – Estructuras condicionales. – Operadores aritméticos. – Compartir recursos. – Particionado del sistema.
Tipos VHDL (1) t
Tipos soportados para síntesis: STD_LOGIC Tiene 9 valores: 'U' ¡ Sin inicializar; no tiene significado en síntesis. 'X' ¡ Desconocido (fuerte); conflicto, ¡¡ERROR!!. '0' ¡ Cero (fuerte); equivalente a Vss. '1' ¡ Uno (fuerte); equivalente a Vcc o Vdd. 'Z' ¡ Alta impedancia; se infiere un triestado. 'W' ¡ Desconocido (débil). 'L' ¡ Cero (débil); resistencias pull-down. 'H' ¡ Uno (débil); resistencias pull-up. '-' ¡ Don't care; Se sintetiza en 0 ó 1. Permite vectores: std_logic_vector (7 downto 0) std_logic_vector ( 0 to 7) INTEGER Si no se acota el rango, se sintetizan 32 bits. integer range 0 to 7 ¡ Se sintetizan 3 bits. TIPOS ENUMERADOS Por defecto se codifican en representación binaria type STATE_TYPE is (S0, S1, S2, S3, S4); S0 ¡ "000", S1 ¡ "001", ..., S4 ¡ "100", 3 bits. En la codificación de MEF, incorporar mecanismos para salir de estados no deseados, por ejemplo "101".
Tipos VHDL (2) t
t
El package std_logic_1164 de la librería IEEE contiene: – Los tipos std_logic y std_logic_vector – Funciones lógicas y de conversión de tipos. Es recomendable usar el tipo Std_logic – Sus 9 valores son muy apropiados para describir el comportamiento del hardware. – En simulación se inicializa a 'U', lo que ayuda a no olvidar el RESET. ¡Ojo!, no inicializar las señales cuando se declaran: signal out1: std_logic:= '0'; --mala idea
La herramienta de síntesis ignora las inicializaciones, puesto que no tienen sentido circuital.
– En particular, usar Std_logic para la declaración de todos los puertos de entidades. • Evita la necesidad de funciones de conversión en la jerarquía.
Tipos VHDL (3) t
Minimizar el uso de puertos declarados como BUFFER. – El modo buffer se usa cuando se desea leer internamente una señal de salida. – El inconveniente es que el modo buffer se propaga por la jerarquía. – Solución: declarar el puerto como OUT y añadir una señal interna.
entity BUF is port (A: In std_logic; CLK: In std_logic; B: Out std_logic); end BUF; architecture BEHAVIORAL of BUF is signal B_tmp: std_logic; -- señal interna begin B <= B_tmp; -- asignación concurrente -- En el código, ya sólo se usa la señal -- interna b_tmp. process begin wait until CLK = '1'; B_tmp <= A and B_tmp; end process; end BEHAVIORAL;
Señales frente a variables (1) t
t
t
Las variables se actualizan en el instante – se simulan más rápido, pero – pueden enmascarar aleas. Las señales esperan un delta de tiempo antes de tomar un nuevo valor – simulación más lenta, pero – su comportamiento se acerca más al hardware que las variables. Es recomendable usar señales para la descripción de hardware. Las variables se pueden sintetizar de forma ineficiente. – Ejemplo pág. siguiente: circuito modelado con variables y con señales. • VHDL Compiler genera un registro para todas las señales y algunas variables asignadas en un proceso con wait o 'event.
– El modelo con variables es ineficiente para síntesis pues utiliza un registro adicional.
Señales frente a variables (2)
Estructuras condicionales (1) La estructura de la lógica sintetizada se infiere directamente de la estructura del código VHDL de partida.
VARIABLE_ARCH: process variable SUM: std_logic; begin wait until CLK = '1'; if RST = '0' then SUM := '0'; else SUM := SUM + '1'; end if; O1 <= SUM; end process;
'0' D Q
'1'
+
t
0
O1
D Q
1
t
RST SIGNAL_ARCH: process begin wait until CLK = '1'; if RST = '0' then SUM <= '0'; else SUM <= SUM + '1'; end if; end process;
t
O1
O1 <= SUM;
'0' D Q
'1'
+
0 1
RST
Sentencia if, else – Genera lógica más estructurada => – suele ocupar menos área Sentencia case – Genera lógica más paralela => – suele ser más rápida Recomendaciones: – Usar case para decodificaciones complejas. – Usar if para caminos críticos. • Genera lógica en que cada condición tiene mayor prioridad que la siguiente. Pasar el camino crítico por la primera condición. • En cualquier caso, no usar sentencias if muy anidadas.
Estructuras condicionales (2) t
Operadores aritméticos (1)
Ejemplo de estilo de codificación y eficiencia del hardware sintetizado.
t
process (SEL,A,B,C,D) begin if SEL = "00" then DO <= A; elsif SEL = "01" then DO <= B; elsif SEL = "10" then DO <= C; else process (SEL,A,B,C,D) DO <= D; begin end if; case SEL is end process; when "00" => DO <= A; when "01" => DO <= B; when "10" => DO <= C; when "11" => DO <= D; D 0 end case; end process; C 1
0
B
1 0
A SEL[0] SEL[1]
1
DO
A
0
B
1
SEL[0] C
0
D
1
SEL[1]
0 1
DO
t
El package std_logic_1164 no incluye funciones aritméticas y de comparación Para realizar estas funciones, es necesario incluir el package std_logic_arith. – Contiene funciones de conversión para pasar de std_logic_vector a signed o unsigned: • Codificación binaria sin signo UNSIGNED("1011") -- representa 11
• Codificación en complemento a 2 SIGNED("1011") -- representa -5
– Suministra funciones aritméticas, de comparación y conversión para los tipos signed, unsigned e integer. – Además se puede incluir el package • std_logic_unsigned: por defecto interpreta los std_logic_vector como sin signo. • std_logic_signed: por defecto interpreta los std_logic_vector como complem. a 2.
Operadores aritméticos (2) t
Dos posibilidades de codificación:
library IEEE use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; entity ARITH is Port ( A: In std_logic_vector (0 to 15); B: In std_logic_vector (0 to 15); O: Out std_logic_vector (0 to 15)); end ARITH; architecture BEHAVIORAL of ARITH is begin O <= UNSIGNED (A) + UNSIGNED (B); end BEHAVIORAL;
library IEEE use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity ARITH is Port ( A: In std_logic_vector (0 to 15); B: In std_logic_vector (0 to 15); O: Out std_logic_vector (0 to 15)); end ARITH; architecture BEHAVIORAL of ARITH is begin O <= A + B; end BEHAVIORAL;
Compartir recursos t
t
Un recurso es un circuito presintetizado que se puede seleccionar para implementar un operador VHDL "complejo", como * La síntesis puede +,compartir los operadores de la misma línea > , < , >= , <= Los recursos se pueden compartir sólo si están en el mismo proceso y en distintas ramas de sentencias if o case. if CTL = '0' then Z <= A + B; else Z <= C + D; end if;
A B C D CTL
+ 0 1
+
A
0
C
1
B
0
D CTL
1
+
Z
Z
Particionado del sistema t
El particionado debe tener en cuenta – La funcionalidad y la estructura del diseño. – El proceso de síntesis lógica posterior. La estructura de la lógica sintetizada se infiere directamente de la estructura del código VHDL de partida.
t
Particionado del sistema: resultados de la síntesis lógica t
• recomendable modificar la jerarquía para que esté contenido en un único bloque. t
Un particionado adecuado consigue – Alcanzar los mejores resultados de la síntesis lógica.
– Acelerar el proceso de síntesis. – Simplificar las restricciones de optimización. t
Aunque el particionado se define en SGE al principio del diseño, se puede modificar en DC mediante las órdenes group y ungroup.
Describir toda la lógica combinacional relacionada en un sólo bloque. – DC no puede optimizar entre bloques. – En particular, para el camino crítico
t
Describir los recursos que se pueden compartir en el mismo bloque. – Es la única forma para que DC los pueda compartir. Separar en bloques distintos las partes a optimizar con diferentes objetivos o estrategias. – Area frente a velocidad. – Lógica aleatoria frente a estructurada. – ...
Particionado del sistema: acelerar el proceso de síntesis t
Eliminar lógica entre bloques. – El diseño sólo debe contener puertas en los últimos bloques de la jerarquía. NO
Particionado del sistema: simplificar las restricciones t
Registrar todas las salidas.
t
Utilizar un único reloj en cada bloque.
t
Separar los FF que se disparan con distintos flancos. – Test Compiler genera las cadenas de registros para los de un tipo de flanco. • De los otros se olvida.
t
t
Número de puertas. – Limitar entre 250 y 5000 puertas los últimos bloques de la jerarquía. • Depende de la CPU y de la memoria disponible en la máquina.
Aislar las máquinas de estados – si se desean optimizar con su compilador específico.
ENTORNO DE SYNOPSYS: Flujo de diseño VHDL Comportamental
TEMA 3: SINTESIS LOGICA
Síntesis Lógica Descripción Booleana
t
Introducción
t
Codificación VHDL orientada a síntesis
t
Síntesis lógica con Synopsys
– – – – – –
Entorno de Synopsys Empezar con Design Analyzer Descripción del entorno del diseño Restricciones en el proceso de síntesis Optimización Análisis del diseño
Librería de Celdas
Descripción Booleana Optimizada Mapeado Tecnológico
Objetivos de Diseño
Area, velocidad
NO
Netlist
Vectores de test
Cobertura de Fallos Simulación lógica
NO NO
DISEÑO FISICO
Entorno de Synopsys: Herramientas de síntesis Design Analyzer
Entorno de Synopsys: Interfaz con Design Compiler t
SGE
Captura del diseño
VHDL Compiler Síntesis
Design Compiler Family
Optimización del circuito FPGA Compiler
Design Compiler
(CMOS)
Test Compiler
Vectores de test
VHDL Synthetic Library Compiler
Esquemas Tablas de estados Objetivos Librería tecnológica
Library Compiler
Modos de interaccionar con DC: – design_analyzer invoca el interfaz gráfico de Synopsys. – dc_shell invoca el interfaz de línea de comandos. Interfaz gráfico con menús
Design Analyzer
Design Compiler dc_shell
Línea de comandos
EMPEZAR CON DESIGN ANALYZER t
Configuración inicial
t
Librerías tecnológicas
t
Generadores de macroceldas
Configuración inicial t
Cuando DC arranca, lee el archivo .synopsys_dc.setup
t
– Se pueden leer hasta tres archivos: • .synopsys_dc.setup del sistema. • .synopsys_dc.setup del directorio home. • .synopsys_dc.setup del direct. de trabajo.
Iniciar un diseño – analyze y elaborate – read
– Se leen en el orden listado y prevalece el último leído. t
t
Permite personalizar el entorno de trabajo. Contiene información sobre: – Lista de directorios en los que DC debe buscar los archivos • search_path
= {. /usr/my_dir/design}
– Librerías tecnológicas a utilizar: = "___.db" • symbol_library = "___.sdb" • link_library = { } • target_library