INTRODUCCION TEMA 2: LENGUAJE VHDL ❏ Breve historia ❏ Características de VHDL ❏ Introducción ❏ Codificación orientada al hardware ❏ Conceptos básicos ❏ Objetivos del tema ❏ Organización del diseño ❏ Descripción de la arquitectura ❏ Modelo de tiempos ❏ Descripción de circuitos digitales ❏ Simulación Universidad de Zaragoza, IEC. Luis A. Barragán y José I. Artigas Lenguaje VHDL - 1 Breve historia Características de VHDL (1) ❏ ¿Qué significa VHDL? – VHDL = VHSIC Hardware Description Language – VHSIC = Very High Speed Integrated Circuits ❏ Inicialmente, documentación de diseños y creación de modelos de simulación de hardware para el DoD (1981). ❏ ❏ Estándar IEEE ⇒ Portabilidad – 1987, se aprobó el lenguaje estándar IEEE 1076-1987 – 1992, cada 5 años se revisa el proceso de estandarización, IEEE 1076-1992 Permite descripción de hardware digital: – Puertas lógicas – Sistemas complejos (SPARC) Universidad de Zaragoza, IEC. ❏ Permite diseños modulares y jerárquicos. Soporta distintas metodologías de diseño: – Arriba-abajo – Abajo-arriba – Mixto ❏ Soporta varias técnicas de modelado digital: – Descripción algorítmica – Ecuaciones booleanas – Máquinas de Estados Finitos (MEFs) ❏ Soporta temporización: – Síncrona – Asíncrona ❏ Es un lenguaje concurrente, aunque permite definir dominios en los que las acciones se suceden en orden secuencial Luis A. Barragán y José I. Artigas Lenguaje VHDL - 2 Codificación orientada al hardware Características de VHDL (2) ❏ Soporta tipos abstractos de datos. ❏ Codificar pensando en puertas y FFs, no en variables y funciones!! ❏ Permite simular el diseño y generar formas de onda – Entornos de test (test benchs). ❏ Diseñar circuitos síncronos – Un único reloj y flanco (si es posible). ❏ Codificar en HDL no nos preserva de problemas hardware: glitches, violación de restricciones temporales tsu, th. ❏ Evitar: – Bucles combinacionales. – Buffers triestado. – Latches (usar sólo FFs). – Set, Reset asíncronos. – Relojes condicionales (Gated-clock). ❏ ❏ Soporta distintos niveles de descripción: – Comportamental – RTL – Lógico A partir de un modelo en HDL se puede sintetizar hardware a nivel de puertas con herramientas especiales de síntesis – Independencia de la tecnología. ❏ Universidad de Zaragoza, IEC. Luis A. Barragán y José I. Artigas Comentar el código fuente ⇒ Reutilización↑ Lenguaje VHDL - 3 Objetivos del tema CONCEPTOS BASICOS Enmarcar los lenguajes de descripción de hardware dentro del proceso de síntesis lógica ❏ Objetos ❏ Tipos ❏ Presentar una introducción a VHDL ❏ Operadores ❏ Reforzar la sintaxis y semántica de VHDL con la presentación de ejemplos ❏ • Conocer la sintaxis de VHDL, no implica necesariamente saber diseñar hardware con él ❏ Introducir mediante ejemplos la influencia del estilo de codificación en el hardware sintetizado Universidad de Zaragoza, IEC. Luis A. Barragán y José I. Artigas Lenguaje VHDL - 4 Objetos ❏ Los objetos en VHDL contienen valores. ❏ Clases de objetos: – Constant. Se les asigna un valor inicial que no puede ser modificado. – 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. – File. Modelan ficheros en el entorno del host. Se utilizan en test-benchs. ❏ Estos objetos se crean mediante su declaración: Tipos ❏ Todos los objetos en VHDL son de algún tipo. Es ilegal conectar señales que no son del mismo tipo ❏ Un tipo de datos se caracteriza por un conjunto de valores que puede tener y un conjunto de operaciones. – El tipo de cada objeto es estático ❏ Los tipos predefinidos en el lenguaje están declarados en el package STANDARD: boolean, bit, bit_vector, character, string, integer, real, time, positive, natural. ❏ El lenguaje permite crear nuevos tipos y definir operaciones con esos tipos a través de funciones ❏ Tipos de datos predefinidos: - Scalar - Composite - Access - File – variable R: natural := 0; ❏ Declaraciones implícitas: – Puertos de una entidad – Indices de bucles Universidad de Zaragoza, IEC. Luis A. Barragán y José I. Artigas Lenguaje VHDL - 5 Tipos escalares ❏ Composite ❏ Existe una relación de orden entre los valores de los objetos de este tipo 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 variable F0 : real := 62.3E-2; -- Se puede especificar un rango type ANALOG_IN is real range 0.0 to 5.0; 0 Tipo matriz: – Una o más dimensiones – Elementos del mismo tipo – Acceso indexado 1 0 1 2 3 ❏ ENUMERATION -- 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); Universidad de Zaragoza, IEC. Campo2 Campo3 Campo4 Luis A. Barragán y José I. Artigas 3 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'); Tipo Registro: – Uno o más campos – Campos de diferente tipo – Acceso por nombre Campo1 FISICOS -- Representan medidas de magnitudes físicas -- Existe un tipo TIME cuya unidad es fs constant TH : time := 10 ns; 2 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; Lenguaje VHDL - 6 Tipos de datos ❏ Operadores 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 ❏ 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); 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. sll srl sla sra rol ror = /= Luis A. Barragán y José I. Artigas > <= >= - CONCATENACIÓN Universidad de Zaragoza, IEC. < LOGICOS AND OR NAND NOR XOR NOT & Lenguaje VHDL - 7 ORGANIZACIÓN DEL DISEÑO ❏ Entidad: – Declaración de la entidad. – Descripción de la arquitectura. – Declaración de la configuración. ❏ Empaquetamientos y librerías. ❏ Entorno de trabajo con Synopsys. Entidad ❏ 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 – Una entidad E2 se puede utilizar como componente de otra entidad E1 ❏ Una entidad consta de: – Declaración de la Entidad – Descripción de la Arquitectura – Declaración de la Configuración E2 E1 Universidad de Zaragoza, IEC. Luis A. Barragán y José I. Artigas Lenguaje VHDL - 8 Declaración de la entidad Modo de un puerto ❏ Especifica el nombre de la entidad y el interfaz con su entorno (los puertos) – Los puertos son señales; su declaración es implícita. ❏ 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 Universidad de Zaragoza, IEC. El Modo define la dirección del flujo de datos visto desde la entidad. Pueden ser: – IN, sólo pueden ser leídos – OUT, sólo se les puede asignar valor – INOUT, BUFFER. se les puede leer y asignar un valor desde dentro de la entidad. Modos OUT INOUT ❏ Lectura de un INOUT, lee el valor del flujo de datos entrante ❏ Lectura de un BUFFER, como solo tiene una fuente, lee el valor asignado BUFFER R/W Tipos Luis A. Barragán y José I. Artigas Lenguaje VHDL - 9 Descripción de la arquitectura ❏ Declaración de configuración Contiene la descripción interna de la entidad. Estilos de modelado: – Estructural: Conexión de componentes. – Comportamental: • Algoritmo secuencial (Alto Nivel Abstracción) • Ecuaciones booleanas (Bajo Nivel Abstracción) ❏ ❏ Realiza la correspondencia entre: – Entidad/Arquitectura – Entidad/Componente ❏ 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 -- 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 Design Entity Entity Declaration ... 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; Universidad de Zaragoza, IEC. -- 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 Luis A. Barragán y José I. Artigas 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 Lenguaje VHDL - 10 Entidad de diseño vs. placa de circuito impreso ❏ Declaración de Entidad – Definir zócalos ❏ Arquitectura – Soldar zócalos en la placa y Rutear pistas – En un mismo zócalo se pueden insertar distintos C.I. compatibles funcionalmente y pin a pin según: velocidad, precio, consumo,... ❏ Configuración – Insertar en cada zócalo un integrado Universidad de Zaragoza, IEC. Empaquetamientos y librerías (1) ❏ Empaquetamientos: – Pueden contener declaraciones y definiciones de objetos a usar en diferentes diseños. – Constan de: • Declaración: Componentes, constantes, tipos, funciones y procedimientos. • Cuerpo: Cuerpos de las funciones y procedimientos declarados. package EX_PACK is z z --Declarations z end; ❏ Luis A. Barragán y José I. Artigas package body EX_PACK is z z --Body Declarations z 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. Lenguaje VHDL - 11 Empaquetamientos y librerías (2) ❏ Entorno de trabajo con Synopsys odf.sym Existen librerías predefinidas: – STD: Contiene los empaquetamientos CLK RST • STANDARD, define los tipos, subtipos y funciones básicas del lenguaje. • TEXTIO contiene declaraciones de tipos, subtipos y programas para operaciones ASCII. Símbolo ppp.sch – WORK: librería de trabajo • Aquí se almacenan las entidades de diseño del usuario Esquemático – IEEE: Contiene empaquetamientos: odf I_1 I_2 I_3 odf.vhd Estas declaraciones pueden ser importadas y utilizadas por otros diseños utilizando la clausula USE. library IEEE; use IEEE.std_logic_1164.all Entity Declaration • Ejemplo: Suponiendo que EX_PACK se ha compilado en la librería DESIGN_LIB: library DESIGN_LIB; use DESIGN_LIB.EX_PACK.ALL; Universidad de Zaragoza, IEC. odf ctl • STD_LOGIC_1164 • STD_LOGIC_ARITH ❏ OUT_DATA(15:0) IN_DATA(15:0) DATA_RDY VHDL Architecture Body Config. Declaration Luis A. Barragán y José I. Artigas Lenguaje VHDL - 12 DESCRIPCION DE LA ARQUITECTURA Arbol de directorios / ❏ Introducción ❏ Estilos de modelado ❏ Sentencia PROCESS ❏ Sentencias secuenciales – Sentencias de asignación – Sentencia IF – Sentencia CASE – Sentencia LOOP ❏ Sentencia COMPONENT ❏ Ejemplo VLSI1 home synopsys sd4 packages usuario IEEE WORK src lib std_logic_1164.vhd std_logic_arith.vhd ... Universidad de Zaragoza, IEC. xxx.vhd xxx.sym xxx.sch xxx.syn xxx.sim xxx.mra Luis A. Barragán y José I. Artigas Lenguaje VHDL - 13 Introducción ❏ 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 ❏ El orden textual de las mismas no importa ❏ La sentencia fundamental es el proceso que define los límites de un dominio secuencial ❏ El resto de sentencias concurrentes son formas particulares de procesos Architecture Statement A Statement B Signal Assignment Process Component Block Universidad de Zaragoza, IEC. Statement C Código vs. estilo de modelado ❏ ARCHITECTURE name OF entity IS -- Declaración de items que serán utilizados -- dentro del cuerpo de la arquitectura BEGIN Sentencias Concurrentes PROCESS Comportamental Secuencial Conjunto de procesos ejecutandose asíncronamente Concurrente COMPONENT instantation Estructural END name; ❏ En la descripción de una arquitectura dada se pueden mezclar los dos estilos de modelado ❏ 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 Procedure Generate Assert Luis A. Barragán y José I. Artigas Lenguaje VHDL - 14 Estilos de modelado (2) Nombre y pines de la entidad RS_Latch Q RESET ❏ Ecuaciones Booleanas Dominio Concurrente. Q N_RESET 0 0 1 1 1 1 0 Q Descripción comportamental Algoritmo secuencial. — SET RESET 0 0 1 1 Descripción comportamental – – 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 ❏ N_SET ❏ Estilos de modelado (3) 0 1 0 1 Q Q 1 1 0 Q 1 0 1 Q Universidad de Zaragoza, IEC. 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; ❏ Luis A. Barragán y José I. Artigas 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 asignación -- Solución definir señales temporales 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; Lenguaje VHDL - 15 Sentencia PROCESS (1) Sentencia PROCESS (2) ❏ Un proceso es una sentencia concurrente ❏ ❏ 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 Mecanismos para suspender un proceso: – Lista de sensibilidades – Sentencias WAIT ❏ Es un error: – No utilizar ninguno de los dos mecanismos en un proceso. El proceso permanece en un bucle infinito – Utilizar lista de sensibilidades y sentencias wait en el mismo proceso ❏ Ejecución temporal de un proceso con lista de sensibilidades process (sensitivity list); Dominio secuencial end process; 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. Universidad de Zaragoza, IEC. process (A, B); begin Stmt_1; z Stmt_N; end process; Proceso Activo Activo Eventos en AoB Suspenso Suspenso Luis A. Barragán y José I. Artigas Lenguaje VHDL - 16 Sentencia PROCESS (3) ❏ 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; ❏ 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; z wait on A, B; Stmt_I; z Stmt_N; end process; Universidad de Zaragoza, IEC. ❏ 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; Suspenso -- 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; Eventos en AoB Activo Luis A. Barragán y José I. Artigas Lenguaje VHDL - 17 Sentencias secuenciales ❏ Sentencias de asignación Para consultas sobre la sintaxis: – Utilizar ayuda on-line iview & ❏ Asignación de señal: – Nombre_sig <= expresion; – Las señales a ambos lados del operador de asignación deben ser del mismo tipo – Si hay varias asignaciones a la misma señal dentro de un mismo proceso: prevalece el valor de la última – Pueden aparecer en sentencias secuenciales y concurrentes ❏ Asignación de variable: – Nombre_var := expresion; – 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) Sentencias de Flujo Control IF CASE RETURN LOOP NEXT EXIT Sincronización entre procesos WAIT Tipos de Sentencias Secuenciales Subprogramas PROCEDURE FUNCTION Universidad de Zaragoza, IEC. Asignación de Señales Asignación de Variables Assertion Luis A. Barragán y José I. Artigas Lenguaje VHDL - 18 Sentencia IF ❏ Sentencia CASE Sentencia IF: – Cada una de las condiciones debe ser booleana – Si una condición es evaluada como verdadera, el resto de las expresiones no son evaluadas ❏ • when others 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 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; IN0 IN1 MUX Sentencia CASE – Se escoge una y sólo una de las alternativas – Cuando no se cubren todas las alternativas es necesario la inclusión como última alternativa de : Z IN2 IN3 S0 S1 Universidad de Zaragoza, IEC. Luis A. Barragán y José I. Artigas Lenguaje VHDL - 19 Sentencia LOOP (1) ❏ ❏ Sentencia LOOP (2) 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. 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; Universidad de Zaragoza, IEC. ---------- 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; Luis A. Barragán y José I. Artigas Lenguaje VHDL - 20 Sentencia COMPONENT ❏ Ejemplo (1) Se utiliza para modelar una entidad como un conjunto de componentes conectados por señales clock CLK I_1 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 – COUNT RST reset RST I_2 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; Universidad de Zaragoza, IEC. 3bit_counter CLK Luis A. Barragán y José I. Artigas 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; Lenguaje VHDL - 21 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 ❏ Ciclo de simulación ❏ Tiempo de simulación es 2_D ❏ Señales vs. variables ❏ Asignación concurrente de señales ❏ Driver ❏ Múltiples drivers COUNT <= COUNT_tmp; process begin wait until CLK='1'; COUNT_tmp <= NEXT_COUNT; end process; 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; Universidad de Zaragoza, IEC. COUNT Luis A. Barragán y José I. Artigas Lenguaje VHDL - 22 Ciclo de simulación ❏ Tiempo de simulación es 2_D La simulación – Comienza con las asignaciones de señal y todos los procesos suspendidos – Los procesos reaccionan ante eventos en ciertas señales – Finaliza cuando no hay procesos activos ni asignaciones de señal que hacer en dicho tiempo T Current T Simulation Time ❏ ❏ ∆ 2nd Half AWAKE PROCESS Existe al menos un retraso delta ∆ desde que se asigna un nuevo valor a una señal hasta que ésta adquiere dicho valor * E 2∆ *D 1∆ *C Durante el ciclo de simulación el tiempo físico no avanza Universidad de Zaragoza, IEC. -- Sea un conjunto de asignaciones -- concurrentes de señales cuyos -- valores iniciales son '0' Next Simulation Time 3∆ 1st Half UPDATE SIGNALS Retraso delta – No se corresponde con ningún retraso real. El tiempo físico de simulación no avanza. – Permite ordenar eventos que ocurren en el mismo tiempo de simulación ⇒ La ordenación es causal * B * 20 ns B <= '1' after 20ns; D <= C; C <= B; E <= D; F <= E after 20ns; F * 40 ns -- Una asignación concurrente se -- ejecuta siempre que ocurre un -- evento en una señal que aparece -- en su lado derecho * X, señal X es actualizada Luis A. Barragán y José I. Artigas Lenguaje VHDL - 23 Señales vs. variables (1) ❏ ❏ Aunque ambas sintetizan en los mismos elementos: cables o FFs, su semántica es totalmente distinta. 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) ❏ 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]; – Son globales. No se pueden declarar en el interior de un proceso – Pueden aparecer en sentencias secuenciales y concurrentes Universidad de Zaragoza, IEC. CONDICIONES INICIALES A=0, B=1, C=2, X=3 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; A=7, X=5 Luis A. Barragán y José I. Artigas 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; A=5, X=2 Lenguaje VHDL - 24 Asignación concurrente de señales (1) ❏ 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 – La señal no adquiere su nuevo valor de forma instantanea, existe al menos un retraso ∆ . 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 ❏ Una asignación concurrente se ejecuta siempre que ocurre un evento en una señal que aparece en su lado derecho ❏ Existe una sentencia PROCESS equivalente Out <= In2 - In1 after 8 ns; Z ❏ Asignaciones secuenciales vs. concurrentes process(B) begin -- Secuencial A<= B; Z <= A; end process; -- En T= 20 ns, ocurre evento en A * Z 2∆ * C 1∆ * B 3∆ * * ns 20 Universidad de Zaragoza, IEC. process (In1, In2) begin Ou t <= In2 - In1 after 8ns; end process; -- Concurrente A<= B; Z <= A; B A B B A C A Z Z Z 20ns 20ns + 3 ⋅ ∆ Luis A. Barragán y José I. Artigas Lenguaje VHDL - 25 Multiples drivers Driver ❏ Driver: lista de pares (valor, tiempo) ordenados temporalmente (T, ∆) asociados a una señal ❏ El driver de una señal representa la evolución temporal futura de la misma ❏ 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 ❏ Cada sentencia de asignación concurrente asocia un driver a la señal modificada ❏ Una señal con más de un driver debe de tener una función de resolución, en caso contrario es un error. ('0', 5ns) ('1' ,10ns + 3∆) 'U' '0' 5 Universidad de Zaragoza, IEC. A 1 B 0 C 0 ? 1 DR1: DR2: ❏ Z 0 ('0' , 10ns) ('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'. '1' 10 ns Luis A. Barragán y José I. Artigas Lenguaje VHDL - 26 DESCRIPCION DE CIRCUITOS DIGITALES ❏ Introducción ❏ Circuitos combinacionales ❏ Circuitos secuenciales: – Latches – Flip-Flops ❏ Máquinas de Estados Finitos (MEFs) Universidad de Zaragoza, IEC. Introducción ❏ En este apartado se dan plantillas o patrones que modelan distintos tipos de circuitos digitales. ❏ Se indican algunos de los posibles problemas que nos pueden aparecer: – Diferencias Simulación vs. Síntesis. ❏ VHDL es muy flexible, y no todas sus construcciones sirven para describir circuitos. – Nos centraremos en el subconjunto de VHDL sintetizable para Synopsys. Luis A. Barragán y José I. Artigas Lenguaje VHDL - 27 Circuitos combinacionales ❏ Procesos => Cir. combinacionales Sentencias de Asignación concurrentes => Lógica Combinacional ❏ 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 ❏ 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; ❏ Procesos => Lógica Combinacional process (A, B, C) begin D <= (A and B) or C; end process; Universidad de Zaragoza, IEC. Luis A. Barragán y José I. Artigas Lenguaje VHDL - 28 Sentencia IF => Circuitos combinacionales (1) ❏ ❏ Sentencia IF => Circuitos combinacionales (2) Tipo booleano – Cierto => ‘1’ – Falso => ‘0’ ❏ Las señales y variables (locales) mantienen su valor hasta que se les asigna uno nuevo. ❏ 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 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; 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; B COND D_OUT A Universidad de Zaragoza, IEC. Luis A. Barragán y José I. Artigas Lenguaje VHDL - 29 Sentencia CASE => Circuitos combinacionales ❏ Las sentencias CASE no siempre se sintetizan en multiplexores ❏ Para asegurar que se sintetiza un circuito combinacional, se debe asignar un valor a la señal Z para todo valor de SEL. Latch ❏ process (Enable,Data) begin if (Enable='1') then Value <= Data; end if; end process; 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; process (Enable, Data) begin Value <= '0'; if (Enable='1') then Value <= Data; end if; end process; ❏ A B MUX Sentencia IF ⇒ Latch Z C D 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 SEL Universidad de Zaragoza, IEC. Luis A. Barragán y José I. Artigas Lenguaje VHDL - 30 Circuitos secuenciales ❏ Flip-Flop Se sintetiza un circuito secuencial: ❏ Instanciación de Flip Flops (o componentes con FFs) en una descripción estructural – Procesos activados por flanco de reloj en una descripción comportamental – ❏ 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; 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; Universidad de Zaragoza, IEC. Flip Flop con RESET síncrono Luis A. Barragán y José I. Artigas 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; Lenguaje VHDL - 31 Máquinas de Estados síncronas ❏ Una MEF es una sex-tupla: – Vector de estados S={Sj} – 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 – Estado inicial o de reset R MEFs Tipos: – MOORE, correspondencia entre estado y vector de salida biunívoca Función de salida S→ O ❏ I Función de Transición Next state Registros S Función de Salida O Current state ❏ ❏ ❏ 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 I Descripción algorítmica. Requisitos: – Claridad – Sintetizable Universidad de Zaragoza, IEC. Función de Transición Next state Registros S Función de Salida O Current state Luis A. Barragán y José I. Artigas Lenguaje VHDL - 32 Descripción en 2 procesos de MEF síncronas ❏ Descripción en 2 procesos de MEF síncronas ❏ 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 INPUTS CASE Para cada estado: Transición de estados; Generación de salidas; OUTPUTS Combinacional: PROCESS( Current_state, All_inputs) Secuencial: PROCESS BEGIN -- Un unico CLK wait until CLK ='1'; Next_state Current_state END PROCESS; Current_state <= Next_state; Seq: PROCESS BEGIN -- All FFs driven by the same clock wait until CLK='1'; current_state <= next_state; END PROCESS seq; END beh2; END PROCESS; Universidad de Zaragoza, IEC. 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; Luis A. Barragán y José I. Artigas Lenguaje VHDL - 33 SIMULACION ❏ Entornos de test ❏ Generación de estímulos – Vectores de test – Ficheros Entornos de test ❏ 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. ❏ 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 Universidad de Zaragoza, IEC. Luis A. Barragán y José I. Artigas CLK RST, IN_DATA OUT_DATA EUT: Engloba todo el hardware que va a ser sintetizado Lenguaje VHDL - 34 Vectores de test almacenados en tabla (1) Generación de estímulos ❏ Los estímulos pueden: – ser generados mediante código VHDL no sintetizable – ser vectores de datos almacenados en: ❏ Utilización: – Los estímulos pueden ser vectores de entrada almacenados en una tabla – Los resultados esperados se pueden almacenar junto con el correspondiente vector de entrada para su comparación con el resultado obtenido ❏ Ejemplo: – Declaración • vector o tabla • fichero ASCII ❏ 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; Universidad de Zaragoza, IEC. 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') ); Luis A. Barragán y José I. Artigas Lenguaje VHDL - 35 Vectores de test almacenados en tabla (2) Ficheros (1) – Aplicación de estímulos a las entradas de EUT y comprobación de las salidas ❏ Utilización: – Los estímulos pueden ser vectores de entrada almacenados en un fichero ASCII – Los resultados se pueden escribir en un fichero para posterior comprobación ❏ Construcciones: -- 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; Universidad de Zaragoza, IEC. 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 <tipo>; GOOD: out BOOLEAN); procedure WRITELINE(F: out TEXT; L: in LINE); procedure WRITE(L:inout LINE; VALUE:out <tipo>; JUSTIFIED: in SIDE; FIELD: in WIDTH); <tipo> cualquiera de los definidos en el package STANDARD Luis A. Barragán y José I. Artigas Lenguaje VHDL - 36 Ficheros (2) ❏ 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 <= '0'; actual_input1 <= IN1; actual_input2 <= IN2; wait for 10 ns; 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; Universidad de Zaragoza, IEC. Luis A. Barragán y José I. Artigas Lenguaje VHDL - 37