Tema 3: Descripción de la funcionalidad 3.1 Introducción/Repaso 3.2 Concepto de concurrencia 3.3 Procesos 3 4 Diseño de circuitos combinacionales 3.4 3.4.1. Sentencias concurrentes 4.4.2. Descripción mediante procesos Tema 3: Descripción de la funcionalidad 3.1 Introducción/Repaso p 3.2 Concepto de concurrencia 3.3 Procesos 3 4 Diseño de circuitos combinacionales 3.4 3.4.1. Sentencias concurrentes 4.4.2. Descripción mediante procesos Introducción -- Multiplexor de dos entradas entityy mux21 is port ( e1, e2: IN std_logic; sel: IN std_logic; o1: OUT std_logic); std logic); end mux21; arquitecture A of mux21 is b i begin process(e1,e2, sel) begin if (sel=‘0’) ( l ‘0’) then th o1 <= E1; else o1<= 1< e2; 2 endif; end process; end d A; A Introducción. Formas de describir una ARCHITECTURE Dos formas distintas : 1. Órdenes concurrentes: órdenes en parelelo. parelelo Ejecución de 2 Utili 2. Utilizando d process: Dentro D t d de un process las órdenes se ejecutan de forma secuencial. secuencial Es posible E ibl combinar bi ambas b en una misma ARCHITECTURE Tema 3: Descripción de la funcionalidad 3.1 Introducción 3.2 Concepto de concurrencia 3.3 Procesos 3 4 Diseño de circuitos combinacionales 3.4 3.4.1. Sentencias concurrentes 4.4.2. Descripción mediante procesos Concepto de concurrencia ARCHITECTURE Sentencias concurrentes: Órdenes independientes que se ejecutan en paralelo. A<=C and D or G; F <= < A when E='0' E 0 else 'H'; H ; PROCESS: Conjunto de órdenes que se ejecutan de forma secuencial. process(e1,e2, sel) begin if (sel='0') then o1 <= E1; else o1<= e2; endif; end process; INSTANCIAS A COMPONENTES: COMPONENTES Cada C d componente será un bloque que funcionará en paralelo cont1: contador GENERIC MAP (N=>7) PORT MAP ( …………….) Por naturaleza,, todos los elementos de un circuito funcionan de forma concurrente concurrente. Todas las sentencias fuera de un process se ejecutan d forma de f paralela. l l El orden de las sentencias no es importante. p Un componente se entiende como otra sentencia concurrente concurrente. Un process se comporta externamente como una sentencia concurrente. Tema 3: Descripción de la funcionalidad 3.1 Introducción 3.2 Concepto de concurrencia 3.3 Procesos 3 4 Diseño de circuitos combinacionales 3.4 3.4.1. Sentencias concurrentes 4.4.2. Descripción mediante procesos Proceso El bloque q process p como unidad básica de ejecución. j nombre:process(e1,e2, nombre:process(e1 e2 sel) Li de Lista d sensibilidad ibilid d variable ……………… Declaración variables begin if (sel=’0’) then Comportamiento p o1<= 1< e1; 1 else o1<= 1 e2; 2 Todos los bloques process son sensibles a sus endif; entradas como las puertas lógicas a los suyos. Todos los bloques process se ejecutan en end d process; paralelo como las puertas lógicas de un circuito. Proceso. Lista de sensibilidad El p proceso oceso se ejecu ejecuta ae en su totalidad o a dad cua cuando do ca cambia ba algunas señal de la lista de sensibilidad proc1: process (a,b,c) begin x <= a and b and c; end process; proc2: process (a,b) begin x <= a and b and c; end process; Desde el punto de vista de simulación, ambos procesos son muy diferentes. El proc2 2 no es sintetizable i t ti bl (faltará (f lt á un latch l t h para c que es sensible a ambos flancos de a y b), por tanto: – El programa de síntesis añadirá la señal c a la lista de sensibilidad para poder asociar un circuito al código. – El programa de síntesis produce un mensaje de error. Proceso. Lista de sensibilidad CONCLUSIÓN: En CONCLUSIÓN E un código ódi VHDL para síntesis de un proceso combinacional, en la lista de sensibilidad deben incluirse todas las señales que afecten a la evaluación del proceso. • • Un proceso sin lista de sensibilidad se estaría ejecutando siempre, por tanto el simulador nunca avanzaría. Si una señal de la lista de sensibilidad cambia el proceso es evaluado sucesivamente hasta que todas las señales sensibles se estabilicen. Proceso. Asignación g de señales Todas la expresiones de un proceso se resuelven con el valor actual de las señales. Las asignaciones se hacen efectivas cuando se termine la evaluación del proceso. Todas las señales serán actualizadas con el último valor asignado dentro del proceso. El proceso vuelve a evaluarse si se ha modificado alguna l señal ñ l de d su lista li t sensible. ibl Todos los procesos cuya lista sensible ha sido alterada y todas las órdenes concurrentes se ejecutan hasta que se alcanza un estado de equilibrio (no hay más cambios). Proceso. Asignación g de señales ((ejemplo j p 1)) Diferentes e e es opc opciones o es pa para a implementar pe e a e el mux2 u process(e1,e2, sel) begin if (sel=’0’) then o1<= e1; else l o1<= e2; endif; end process; process(e1,e2, sel) begin o1<= e1; process(e1,e2, sel) begin if (sel=’1’) then if (sel=’1’) then o1<= e2; endif; o1<= e1; end process; o1<= e2; endif; end process; – INCORRECTO – O1 siempre i valdrá ld á e11 Procesos. Declaración de variable U a variable Una a ab e só sólo o tiene e e se sentido do de dentro o de u un proceso (por eso se declara dentro del proceso). No trascienden fuera del proceso. Las variable se actualizan en el momento en que se hace la asignación dentro del proceso, al contrario que las l señales, ñ l que lo l hacen h una vez ha h terminado t i d el proceso. Señales representan cables del diseño, diseño variables representan la salida de “sub-circuitos”, utilizado en los calculos de un proceso. Se suelen usar para cálculos aritméticos. Se recomienda que sólo se utilicen cuando sean realmente útiles. Procesos. Declaración de variable asig: PROCESS(b,c) VARIABLE a: std_logic; BEGIN a:= b and c; d<= a xor b; END PROCESS asig; Procesos. Diferencia entre variables y señales ( j (Ejercicio) ) Ej: j PROCESS ( (control,senal , _a) ) VARIABLE var_a: integer; BEGIN Var_a:=4; Senal_a<=4; Senal r1< var a; Senal_r1<=var_a; Senal_r2<=senal_a; IF ( (control = ’0’) ) THEN Senal_a <= 3; ELSE Senal_a <= 2; END IF; END PROCESS Ej_variable_v_señal; Ej variable v señal; Tema 3: Descripción de la funcionalidad 3.1 Introducción 3.2 Concepto de concurrencia 3.3 Procesos 3.4 Diseño de circuitos combinacionales 3.4.1. Sentencias concurrentes 4.4.2. Descripción mediante procesos Tema 3: Descripción de la funcionalidad 3.1 Introducción 3.2 Concepto de concurrencia 3.3 Procesos 3 4 Diseño de circuitos combinacionales 3.4 3.4.1. Sentencias concurrentes 4.4.2. Descripción mediante procesos Sentencias concurrentes. Asignación g simple p señal_destino <= señal_origen; Deben ser del mismo tipo (integer, std_logic, etc) señal destino puede ser: señal_destino – Señal – Puerto: OUT, INOUT (y BUFFER) señal_origen puede ser: – Señal – Puerto: IN, INOUT ( y BUFFER) PUEDEN USARSE DENTRO O FUERA DE UN PROCESS Sentencias concurrentes. Ecuaciones lógicas g Operador Ejemplo NOT a <= NOT b; AND, NAND a <= b AND c; OR,NOR,XOR a <= b OR c AND d; PUEDEN USARSE DENTRO O FUERA DE UN PROCESS Sentencias concurrentes. Ejemplo j p library IEEE; use IEEE.std_logic_1164.all; entity mux21 is port ( e1, e2: IN std_logic; sel: IN std_logic; _ o1: OUT std_logic); end mux21; arquitecture A of mux21 is begin o1 <= e1 and not not(sel) (sel) or e2 and sel; end A; Sentencias concurrentes. WHEN …. ELSE …. Señal Destino <= Expresión1 WHEN Condición ELSE Expresión2; Señal Destino <= Expresión1 WHEN Condición1 ELSE Expresión2 WHEN Condición2 ELSE Expresión3 WHEN Condición3 ELSE – .............. ExpresiónN WHEN CondiciónN ELSE Expresión; NO PUEDEN USARSE DENTRO DE UN PROCESS Sentencias concurrentes. WHEN …. ELSE …. library IEEE; use IEEE.std_logic_1164.all; entity mux21 is port ( e1, e2: IN std_logic; sel: IN std_logic; _ o1: OUT std_logic); end mux21; arquitecture A of mux21 is begin o1 <= e1 when sel=’0’ else e2; end A; Sentencias concurrentes. WITH … SELECT ... WITH expresión_selección SELECT Señal Destino <= Expresión1 WHEN Valor_Selección1, Valor Selección1 Expresión2 WHEN Valor_Selección2, –... ExpresiónN WHEN OTHERS; WITH sel SELECT o1 <= e1 WHEN ‘0’, e2 WHEN OTHERS; NO PUEDEN USARSE DENTRO DE UN PROCESS Tema 3: Descripción de la funcionalidad 3.1 Introducción 3.2 Concepto de concurrencia 3.3 Procesos 3 4 Diseño de circuitos combinacionales 3.4 3.4.1. Sentencias concurrentes 4.4.2. Descripción mediante procesos IF THEN ELSIF ELSE IF condición 1 THEN Consecuencia 1; ELSIF condición 2 THEN Consecuencia 2; ELSIF ... THEN ... ELSE Consecuencia; END IF; NO PUEDEN USARSE FUERA DE UN PROCESS IF THEN ELSIF ELSE arquitecture A of mux21 is begin g process(e1,e2, sel) begin if (sel (sel=‘0’) 0 ) then o1 <= e1; else o1<= e2; o1< endif; end process; end A; CASE WHEN CASE objeto IS WHEN caso1 => Código1; g ; WHEN caso2 => Código2; WHEN caso3 => Código34; WHEN OTHERS => > Código; END CASE; NO PUEDEN USARSE FUERA DE UN PROCESS CASE WHEN arquitecture A of mux21 is begin g process(e1,e2, sel) begin case sel is when ’0’ => o1<=e1; when others => > o1<=e2; end case; end process; end A; – WHEN OTHERS es obligatorio si no están cubiertos todos los casos Generación de LATCHES Ej. j Multiplexor p 3x1 ¿Qué Q é ocurre sii una sentencia condicional se deja incompleta? Se genera un LATCH Sentencias condicionales incompletas. No se define la condición (selector=”11”) ( ) Programación if (selector=”00”) then salida<=entrada_0; elsif (selector=”01”) then salida<=entrada_1; _ elsif (selector=”10”) then salida<=entrada_2;; endif; Circuito secuencial Sentencias condicionales incompletas. Circuito con un latch Ocupa más área No realiza la función lógica: – ¡¡Es E sensible ibl a pulsos l !! Sentencias condicionales incompletas. Código g correcto Descripción if (selector=“00”) then salida<=entrada_0; elsif (selector=“01”) (selector “01”) then salida<=entrada_1; elsif l if (selector=“10”) ( l t “10”) then th salida<=entrada_2; else l salida<=entrada_2; end d if; if Circuito combinacional bi i l Circuitos combinacionales y secuenciales. Conclusiones Los circuitos combinacionales deben estar completamente especificados. p q que: Se ggenera una celda de memoria siempre – No se especifica el valor de la salida para todos los posibles valores de las entradas Un latch es un circuito muy sensible a pulsos y timing: – Sólo debe ser utilizado en casos concretos.