La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Circuitos Digitales II Elementos del VHDL Semana No.3 Semestre 2008-2 Prof. Gustavo Patiño Prof. Eugenio Duque

Presentaciones similares


Presentación del tema: "Circuitos Digitales II Elementos del VHDL Semana No.3 Semestre 2008-2 Prof. Gustavo Patiño Prof. Eugenio Duque"— Transcripción de la presentación:

1 Circuitos Digitales II Elementos del VHDL Semana No.3 Semestre Prof. Gustavo Patiño Prof. Eugenio Duque Departamento de Ingeniería Electrónica Facultad de Ingeniería 1

2 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Temario Señales Representación de Señales Representación lógica multi-valuada MLV-4 MLV-9 Tipos de datos Operadores Asignación concurrentes Asignación básica de señal Asignación de señal condicional When – Else Asignación de señal seleccionada With – Select – When Asignaciones secuenciales Asignación básica de señal Asignación de señal condicional If – Elsif – Else – End if Asignación de señal seleccionada Case – When – End case Ejemplos : Máquinas de Estados 2

3 Señales Representación lógica multi-valuada

4 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Señales Las señales representan alambres y conexiones físicas. Sólo pueden ser definidas (declaradas) dentro de arquitecturas. Están asociadas a un tipo de dato. VHDL permite conversión explicita entre tipos de datos. No permite conversión implícita. 4

5 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Representación de Señales La representación de números binarios es suficiente para lenguajes de programación de software. No obstante, los alambres físicos no se pueden modelar únicamente con una representación binaria. Se requieren valores adicionales para representar con mayor precisión el estado de un alambre. 5

6 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Representación lógica multi-valuada La representación MLV (Multi-valued Logic) suministra valores adicionales necesarios para representar la alta impedancia y valores desconocidos. Existen dos representaciones MLV definidas por la IEEE en su paquete : ieee.std_logic_1164: MLV – 4 MLV – 9 6

7 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia MLV – 4 El MLV – 4 agrega dos nuevos valores al modelos de estados de las señales: X y Z. Es posible asignar múltiples valores a un cierto alambre. MLV – 4 es raramente utilizado dado que no posee estados suficientes para modelar de manera más precisa el comportamiento de las señales. 7

8 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia MLV – 9 El MLV – 9 adiciona cinco nuevos valores al modelo del estado de las señales. Es posible asignar múltiples valores a un cierto alambre. Es posible resolver una señal cuando existen conflictos entre múltiples valores asignados a la señal. 8

9 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Mas sobre MLV – 9 MLV – 9 usa cuatro tipos estandarizados: Tipos no-resueltos: std_ulogic std_ulogic_vector( downto ) Tipos resueltos: std_logic Std_logic_vector( downto ) Los tipos resueltos usan funciones de resolución para determinar el valor sobre una señal cuando existen al mismo tiempo múltiples valores conflictivos en la señal. 9

10 Tipos de Datos Real, entero, binarios y enumerados

11 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Tipos de datos escalares VHDL soporta un rico conjunto de tipos de datos propios así como tipos de datos definidos por el usuario. Los tipos de datos propios o nativos funcionan bien para simulación, pero no para síntesis. Son apropiados para ser usados dentro de una arquitectura pero no deben ser usados para pines externos. 11

12 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Tipos de datos escalares (…cont) Sus valores están formados por una sola unidad indivisible. Ejemplos : Propios del VHDL Enteros Reales Binarios Definidos por el usuario Enumerados Físicos

13 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Tipos de datos escalares (…cont)

14 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Tipos de datos escalares (…cont) Los tipos enteros y reales son tipos predefinidos por el lenguaje. En el caso de los enteros, están codificados en 32 bits, y en algunas aplicaciones pueden estar limitados en su declaración a fin de evitar utilizar todos los 32 bits.

15 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Tipos de datos enumerados Son tipos de datos escalares definidos por el usuario, pueden definirse con caracteres o con nombres específicos elegidos a conveniencia.

16 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Subtipos Para los datos escalares, es posible definir un rango restringido de datos de un tipo determinado definido con anterioridad: Los subtipos pueden definirse con una declaración específica: O bien a la hora de definir el tipo de una determinada señal o puerto:

17 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Ejemplos de Subtipos

18 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Matrices (Array) Son tipos de datos compuestos, cada array es una colección de datos del mismo tipo. El rango se define cuando se declara el array. Se pueden declarar índices enteros cualesquiera, ascendentes con TO o descendentes con DOWNTO.

19 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Matrices (Array) (…cont) Los arrays también pueden ser de 2 ó más dimensiones.

20 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Matrices (Array) (…cont)

21 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Operadores Lógicos Logic operators Logic operators precedence and or nand nor xor not xnor not and or nand nor xor xnor Highest Lowest only in VHDL-93 21

22 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Prioridades que no son implícitas Se quiere: y = ab + cd Incorrecto y <= a and b or c and d ; equivalent to y <= ((a and b) or c) and d ; equivalent to y = (ab + c)d Correcto y <= (a and b) or (c and d) ; 22

23 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Operadores condicionales Relational operators Logic and relational operators precedence = /= >= not = /= >= and or nand nor xor xnor Highest Lowest 23

24 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Prioridad entre los operadores lógicos y condicionales comparar a = bc Incorrecto … when a = b and c else … Equivale a … when (a = b) and c else … Correcto … when a = (b and c) else … 24

25 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Tarea A - Arquitecture B - Buffer C - Component D - Downto E - Elsif F - For G - Generate H - Function I - If J - Procedure K - Case L - Loop M - Map (Port map) N - Not O - Others P - Process Q - Package R - Subtype S - Select (With Select) T - Type U - Use V - Variable W - When else X - Xor Y - Wait Z – Z (High Impedance) 25 Elabore, escriba, consulte, busque, copie o pastelee, un ejemplo completo en VHDL que de acuerdo a la primera letra de su nombre posea uno de las siguientes palabras claves del lenguaje. En cada una de las próximas tres clases, se escogerán al azar tres estudiantes diferentes a fin de explicar en el tablero su ejemplo en VHDL.

26 Instrucciones de Asignación concurrentes When – Else When – Else With – Select – When With – Select – When If – Elsif – Else – End if If – Elsif – Else – End if Case – When – End case Case – When – End case

27 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Instrucciones de Asignación concurrentes Sólo dentro de arquitecturas Tipos de asignación concurrentes : 1. Asignación básica de señal 2. Asignación de señal condicional When – Else 3. Asignación de señal seleccionada With – Select – When 27

28 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Ejemplos de Instrucciones de Asignación concurrente SIGNAL a, b, c : std_logic; SIGNAL avec, bvec, cvec : std_logic_vector(7 DOWNTO 0); -- Concurrent Signal Assignment Statements -- NOTE: Both a and avec are produced concurrently a <= b AND c; avec <= bvec OR cvec; -- Alternatively, signals may be assigned constants a <= 0; b <= 1; c <= Z; avec <= " "; -- Assigns 0x3A to avec bvec <= X"3A"; -- Assigns 0x3A to bvec cvec <= X"3" & X"A";-- Assigns 0x3A to cvec SIGNAL a, b, c : std_logic; SIGNAL avec, bvec, cvec : std_logic_vector(7 DOWNTO 0); -- Concurrent Signal Assignment Statements -- NOTE: Both a and avec are produced concurrently a <= b AND c; avec <= bvec OR cvec; -- Alternatively, signals may be assigned constants a <= 0; b <= 1; c <= Z; avec <= " "; -- Assigns 0x3A to avec bvec <= X"3A"; -- Assigns 0x3A to bvec cvec <= X"3" & X"A";-- Assigns 0x3A to cvec Representación HEX Representación binaria concatenación 28

29 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Instrucciones de asignación: Concatenación SIGNAL a: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL b: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL c, d, e, f: STD_LOGIC_VECTOR(7 DOWNTO 0); a <= 0000; b <= 1111; c <= a & b; -- c = d <= 0 & ; -- d <= e <= 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1; -- e <= f <= (0,0,0,0,1,1,1,1) ; -- e <=

30 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Instrucciones de asignación concurrente: Asignación seleccionada SIGNAL a, b, c, d :std_logic; SIGNAL avec :std_logic_vector(1 DOWNTO 0); SIGNAL bvec :std_logic_vector(2 DOWNTO 0); -- Conditional Assignment Statement -- NOTE: This implements a tree structure of logic gates a <= 0 WHEN avec = 00 ELSE b WHEN avec = 11 ELSE c WHEN d = 1 ELSE 1; -- Selected Signal Assignment Statement -- NOTE: The selection values must be constants bvec <= d & avec; WITH bvec SELECT a <= 0WHEN 000, b WHEN 011, c WHEN 1--, -- Some tools wont synthesize - properly 1 WHEN OTHERS; SIGNAL a, b, c, d :std_logic; SIGNAL avec :std_logic_vector(1 DOWNTO 0); SIGNAL bvec :std_logic_vector(2 DOWNTO 0); -- Conditional Assignment Statement -- NOTE: This implements a tree structure of logic gates a <= 0 WHEN avec = 00 ELSE b WHEN avec = 11 ELSE c WHEN d = 1 ELSE 1; -- Selected Signal Assignment Statement -- NOTE: The selection values must be constants bvec <= d & avec; WITH bvec SELECT a <= 0WHEN 000, b WHEN 011, c WHEN 1--, -- Some tools wont synthesize - properly 1 WHEN OTHERS; Don´t care 30

31 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Instrucciones de asignación concurrente: Asignación seleccionada (...cont) SIGNAL a :std_logic; SIGNAL avec, bvec :std_logic_vector(7 DOWNTO 0); -- Selected Signal Assignment Statement -- NOTE: Selected signal assignments also work -- with vectors WITH a SELECT avec <= WHEN 1, bvec WHEN OTHERS; SIGNAL a :std_logic; SIGNAL avec, bvec :std_logic_vector(7 DOWNTO 0); -- Selected Signal Assignment Statement -- NOTE: Selected signal assignments also work -- with vectors WITH a SELECT avec <= WHEN 1, bvec WHEN OTHERS; NOTA: La asignación seleccionada también funciona con vectores. 31

32 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Instrucciones de asignación concurrente: Asignación seleccionada (...cont) with choice_expression select target_signal <= expression1 when choices_1, expression2 when choices_2,... expressionN when choices_N; With –Select – When choices_1 choices_2 choices_N expression1 target_signal choice expression expression2 expressionN Los valores deben ser constantes 32

33 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia MLU Example (Unidad Lógica de Multiplexación) 33

34 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia MLU – Diagrama de Bloques 34

35 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia MLU – Declaración de la Entidad LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY mlu IS PORT( NEG_A : IN STD_LOGIC; NEG_B : IN STD_LOGIC; NEG_Y : IN STD_LOGIC; A : IN STD_LOGIC; B : IN STD_LOGIC; L1 : IN STD_LOGIC; L0 : IN STD_LOGIC; Y : OUTSTD_LOGIC ); END mlu; LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY mlu IS PORT( NEG_A : IN STD_LOGIC; NEG_B : IN STD_LOGIC; NEG_Y : IN STD_LOGIC; A : IN STD_LOGIC; B : IN STD_LOGIC; L1 : IN STD_LOGIC; L0 : IN STD_LOGIC; Y : OUTSTD_LOGIC ); END mlu; 35

36 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia MLU – Declaración de la Arquitectura ARCHITECTURE mlu_dataflow OF mlu IS SIGNAL A1 : STD_LOGIC; SIGNAL B1 : STD_LOGIC; SIGNAL Y1 : STD_LOGIC; SIGNAL MUX_0 : STD_LOGIC; SIGNAL MUX_1 : STD_LOGIC; SIGNAL MUX_2 : STD_LOGIC; SIGNAL MUX_3 : STD_LOGIC; SIGNAL L: STD_LOGIC_VECTOR(1 DOWNTO 0); ARCHITECTURE mlu_dataflow OF mlu IS SIGNAL A1 : STD_LOGIC; SIGNAL B1 : STD_LOGIC; SIGNAL Y1 : STD_LOGIC; SIGNAL MUX_0 : STD_LOGIC; SIGNAL MUX_1 : STD_LOGIC; SIGNAL MUX_2 : STD_LOGIC; SIGNAL MUX_3 : STD_LOGIC; SIGNAL L: STD_LOGIC_VECTOR(1 DOWNTO 0); 36

37 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia MLU – Cuerpo de la Arquitectura BEGIN A1<= NOT AWHEN (NEG_A='1') ELSE A; B1<= NOT BWHEN (NEG_B='1') ELSE B; Y <= NOT Y1WHEN (NEG_Y='1') ELSE Y1; MUX_0 <= A1 AND B1; MUX_1 <= A1 OR B1; MUX_2 <= A1 XOR B1; MUX_3 <= A1 XNOR B1; L <= L1 & L0; WITH (L) SELECT Y1 <=MUX_0 WHEN "00", MUX_1 WHEN "01", MUX_2 WHEN "10", MUX_3 WHEN OTHERS; END mlu_dataflow; BEGIN A1<= NOT AWHEN (NEG_A='1') ELSE A; B1<= NOT BWHEN (NEG_B='1') ELSE B; Y <= NOT Y1WHEN (NEG_Y='1') ELSE Y1; MUX_0 <= A1 AND B1; MUX_1 <= A1 OR B1; MUX_2 <= A1 XOR B1; MUX_3 <= A1 XNOR B1; L <= L1 & L0; WITH (L) SELECT Y1 <=MUX_0 WHEN "00", MUX_1 WHEN "01", MUX_2 WHEN "10", MUX_3 WHEN OTHERS; END mlu_dataflow; 37

38 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Controlador de Display 7-segmentos 38

39 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Controlador de Display 7-segmentos : Solución LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY seven_seg IS PORT( dataIn : IN std_logic_vector(3 DOWNTO 0); segments : OUT std_logic_vector(7 DOWNTO 0) ); END seven_seg; ARCHITECTURE synthesis1 OF seven_seg IS BEGIN WITH dataIn SELECT segments <= WHEN 0000, WHEN 0001, WHEN 0010, WHEN 0011, WHEN 0100, WHEN 0101, WHEN 0110, WHEN 0111, WHEN 1000, WHEN 1001, WHEN OTHERS; END synthesis1; 39

40 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Instrucciones de asignación concurrente: Asignación Condicional target_signal <= value1 when condition1 else value2 when condition2 else... valueN-1 when conditionN-1 else valueN; WHEN -ELSE.… Value N Value N-1 Condition N-1 Condition 2 Condition 1 Value 2 Value 1 Target Signal …

41 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Ejemplo buffer Tri-state LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY tri_state IS PORT ( ena: IN STD_LOGIC; input: IN STD_LOGIC_VECTOR(7 DOWNTO 0); output: OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END tri_state; 41

42 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Ejemplo buffer Tri-state (…cont) ARCHITECTURE tri_state_dataflow OF tri_state IS BEGIN output <= input WHEN (ena = 0) ELSE (OTHERS => Z); END tri_state_dataflow; 42

43 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Formato para múltiples k-opciones WHEN value WHEN value_1 to value_2 WHEN value_1 | value_2 |.... | value N 43

44 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Formato para múltiples k-opciones : Ejemplo WITH sel SELECT y <= a WHEN 000, b WHEN 011 to "110, c WHEN 001 | 111, d WHEN OTHERS; 44

45 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Instrucciones de Asignación dentro de Process Instrucciones secuenciales Tipos de asignación : 1. Asignación básica de señal 2. Asignación de señal condicional If – Elsif – Else – End if 3. Asignación de señal seleccionada Case – When – End case 45

46 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Instrucciones condicionales dentro de Process Las instrucciones condicionales y asignaciones seleccionadas difieren considerablemente en su gramática dentro y fuera de los Process. Fuera de un Process una asignación seleccionada es funcionalmente equivalente a una instrucción case dentro de un Process. Los procesos pueden ser utilizados para lógica combinacional, pero suelen ser más utilizados para encapsular lógica secuencial. 46

47 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Ejemplo : FF tipo D con Reset asíncrono activo en bajo El atributo Event es verdadero si un flanco ha sido detectado en la señal correspondiente. 47

48 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Instrucciones condicionales dentro de Process CASE – WHEN CASE variable/señal IS WHEN valor => enunciado ; … WHEN OTHERS => default ; END CASE; 48

49 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Ejemplo combinacional usando CASE/when em um process SIGNAL a, b, c, d : std_logic; PROCESS (a, b, d) -- a, b, and d are in the sensitivity list to indicate that -- the outputs of the process are sensitive to changes in them BEGIN -- CASE keyword is only valid in a process CASE d IS WHEN 0 => c <= a AND b; WHEN OTHERS => c <= 1; END CASE; END PROCESS; SIGNAL a, b, c, d : std_logic; PROCESS (a, b, d) -- a, b, and d are in the sensitivity list to indicate that -- the outputs of the process are sensitive to changes in them BEGIN -- CASE keyword is only valid in a process CASE d IS WHEN 0 => c <= a AND b; WHEN OTHERS => c <= 1; END CASE; END PROCESS; NOTA: La instrucción CASE es sólo válida dentro de un Process. 49

50 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Instrucciones condicionales dentro De Process FOR - LOOP FOR variable/señal IN a TO/DOWNTO b LOOP … END LOOP; 50

51 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Ejemplo: Sumador de Rizo ENTITY sum4b IS PORT ( SIGNAL a,b: IN std_logic_vector(3 DOWNTO 0); SIGNAL cin: IN std_logic; SIGNAL sum: OUT std_logic_vector(3 DOWNTO 0); SIGNAL cout: OUT std_logic ); END ENTITY sum4b; ENTITY sum4b IS PORT ( SIGNAL a,b: IN std_logic_vector(3 DOWNTO 0); SIGNAL cin: IN std_logic; SIGNAL sum: OUT std_logic_vector(3 DOWNTO 0); SIGNAL cout: OUT std_logic ); END ENTITY sum4b; 51

52 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Ejemplo: Sumador de Rizo (...cont) Retardo de propagación es α #bits 52

53 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Ejemplo: Sumador de Rizo (...cont) ARCHITECTURE rizo OF sum4b IS -- Buffer de acarreos internos SIGNAL c: std_logic_vector(4 DOWNTO 0); BEGIN comb: PROCESS(a,b,cin,c) IS BEGIN c(0) <= cin; -- copia acarreo de entrada -- define y enlaza sumadores de un bit FOR i IN sum'RANGE LOOP sum(i) <= a(i) XOR b(i) XOR c(i); c(i+1) <= (a(i) AND b(i)) OR (c(i) AND (a(i) OR b(i))); END LOOP; cout <= c(4); END PROCESS comb; END ARCHITECTURE rizo; ARCHITECTURE rizo OF sum4b IS -- Buffer de acarreos internos SIGNAL c: std_logic_vector(4 DOWNTO 0); BEGIN comb: PROCESS(a,b,cin,c) IS BEGIN c(0) <= cin; -- copia acarreo de entrada -- define y enlaza sumadores de un bit FOR i IN sum'RANGE LOOP sum(i) <= a(i) XOR b(i) XOR c(i); c(i+1) <= (a(i) AND b(i)) OR (c(i) AND (a(i) OR b(i))); END LOOP; cout <= c(4); END PROCESS comb; END ARCHITECTURE rizo; Range evalúa todo el rango de bits que compone al vector sum 53

54 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Circuitos secuenciales complejos Los circuitos que sean más complejos pueden ser construidos usando Máquinas de Estados Finitos (FSM: Finite State Machines). Las FSM son fácilmente especificadas usando instrucciones CASE/WHEN dentro de uno o varios Process. 54

55 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Modelo secuencial mono fase 55

56 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Máquina tipo Mealy 56

57 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Máquina tipo Moore 57

58 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Máquina tipo Medvedev 58

59 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Ejemplo : Contador loco Un contador síncrono de tres bits con una entrada de control de modo, m. Si m=0 la cuenta es ascendente en código binario. Si m=1, la cuenta es ascendente en código gray. 59

60 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Contador loco: Diagrama de estados 60

61 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Contador loco: Patrón de bits por estado 61

62 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Contador loco (...cont) Declaración del dispositivo ENTITY cntloco IS PORT( SIGNAL clk, reset, m: IN std_logic; SIGNAL dout: OUTstd_logic_vector(2 DOWNTO 0) ); END ENTITY cntloco; Declaración del dispositivo ENTITY cntloco IS PORT( SIGNAL clk, reset, m: IN std_logic; SIGNAL dout: OUTstd_logic_vector(2 DOWNTO 0) ); END ENTITY cntloco; 62

63 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Contador loco (...cont) ARCHITECTURE mealy OF cntloco IS SIGNAL edo_actual, edo_siguiente : std_logic_vector(2 DOWNTO 0); CONSTANT S0: std_logic_vector(2 DOWNTO 0) := 000; CONSTANT S1: std_logic_vector(2 DOWNTO 0) := 001; CONSTANT S2: std_logic_vector(2 DOWNTO 0) := 010; CONSTANT S3: std_logic_vector(2 DOWNTO 0) := 011; CONSTANT S4: std_logic_vector(2 DOWNTO 0) := 100; CONSTANT S5: std_logic_vector(2 DOWNTO 0) := 101; CONSTANT S6: std_logic_vector(2 DOWNTO 0) := 110; CONSTANT S7: std_logic_vector(2 DOWNTO 0) := 111; BEGIN-- Inicio de la arquitectura dout <= edo_actual; edo: PROCESS(clk, reset, edo_siguiente) IS BEGIN IF(reset = 0) THEN edo_actual <= S0; ELSIF((clkEVENT) AND (clk = 1)) THEN edo_actual <= edo_siguiente; END IF; END PROCESS edo;... 63

64 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Contador loco (...cont)... comb: PROCESS(m, edo_actual) IS BEGIN edo_siguiente <= edo_actual; IF(m = 0) THEN CASE edo_actual IS WHEN S0 => edo_siguiente <= S1; WHEN S1 => edo_siguiente <= S2; WHEN S2 => edo_siguiente <= S3; WHEN S3 => edo_siguiente <= S4; WHEN S4 => edo_siguiente <= S5; WHEN S5 => edo_siguiente <= S6; WHEN S6 => edo_siguiente <= S7; WHEN S7 => edo_siguiente <= S0; END CASE; ELSE CASE edo_actual IS WHEN S0 => edo_siguiente <= S1; WHEN S1 => edo_siguiente <= S3; WHEN S2 => edo_siguiente <= S6; WHEN S3 => edo_siguiente <= S2; WHEN S4 => edo_siguiente <= S0; WHEN S5 => edo_siguiente <= S4; WHEN S6 => edo_siguiente <= S7; WHEN S7 => edo_siguiente <= S5; END CASE; END IF; END PROCESS comb; END ARCHITECTURE mealy; 64

65 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Otro ejemplo: Control de Luces LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY vending IS PORT( reset : IN std_logic; clock : IN std_logic; buttons : IN std_logic_vector(1 DOWNTO 0); lights : OUT std_logic_vector(1 DOWNTO 0) ); END vending; 65

66 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Control de Luces (…cont) ARCHITECTURE synthesis1 OF vending IS TYPE statetype IS(Idle, Opt1, Opt2, Error); SIGNAL currentstate, nextstate : statetype; BEGIN fsm1: PROCESS( buttons, currentstate ) BEGIN CASE currentstate IS WHEN Idle => lights <= 00; CASE buttons IS WHEN 00 => nextstate <= Idle; WHEN 01 => nextstate <= Opt1; WHEN 10 => nextstate <= Opt2; WHEN OTHERS => nextstate <= Error; END CASE; WHEN Opt1 => lights <= 01; IF buttons /= 01 THEN nextstate <= Idle; END IF; …. ARCHITECTURE synthesis1 OF vending IS TYPE statetype IS(Idle, Opt1, Opt2, Error); SIGNAL currentstate, nextstate : statetype; BEGIN fsm1: PROCESS( buttons, currentstate ) BEGIN CASE currentstate IS WHEN Idle => lights <= 00; CASE buttons IS WHEN 00 => nextstate <= Idle; WHEN 01 => nextstate <= Opt1; WHEN 10 => nextstate <= Opt2; WHEN OTHERS => nextstate <= Error; END CASE; WHEN Opt1 => lights <= 01; IF buttons /= 01 THEN nextstate <= Idle; END IF; …. 66

67 Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Departamento de Ing. Electrónica Circuitos Digitales II Universidad de Antioquia Control de Luces (…cont) …. WHEN Opt2 => lights <= 10; IF buttons /= 10 THEN nextstate <= Idle; END IF; WHEN Error => lights <= 11; IF buttons = 00 THEN nextstate <= Idle; END IF; END CASE; END PROCESS; fsm2: PROCESS( reset, clock ) BEGIN IF (reset = 0) THEN currentstate <= Idle; ELSIF (clockEVENT) AND (clock = 1) THEN currentstate <= nextstate; END IF; END PROCESS; END synthesis1; …. WHEN Opt2 => lights <= 10; IF buttons /= 10 THEN nextstate <= Idle; END IF; WHEN Error => lights <= 11; IF buttons = 00 THEN nextstate <= Idle; END IF; END CASE; END PROCESS; fsm2: PROCESS( reset, clock ) BEGIN IF (reset = 0) THEN currentstate <= Idle; ELSIF (clockEVENT) AND (clock = 1) THEN currentstate <= nextstate; END IF; END PROCESS; END synthesis1; 67


Descargar ppt "Circuitos Digitales II Elementos del VHDL Semana No.3 Semestre 2008-2 Prof. Gustavo Patiño Prof. Eugenio Duque"

Presentaciones similares


Anuncios Google