La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Circuitos Digitales II

Presentaciones similares


Presentación del tema: "Circuitos Digitales II"— Transcripción de la presentación:

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

2 Temario Señales Tipos de datos Operadores Asignación concurrentes
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 If – Elsif – Else – End if Case – When – End case Ejemplos : Máquinas de Estados

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

4 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.

5 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.

6 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

7 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.

8 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.

9 Mas sobre MLV – 9 MLV – 9 usa cuatro tipos estandarizados:
Tipos no-resueltos: std_ulogic std_ulogic_vector(<max> downto <min>) Tipos resueltos: std_logic Std_logic_vector(<max> downto <min>) 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.

10 Real, entero, binarios y enumerados
Tipos de Datos Real, entero, binarios y enumerados

11 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.

12 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 Tipos de datos escalares (…cont)

14 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 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 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 Ejemplos de Subtipos

18 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 Matrices (Array) (…cont)
Los arrays también pueden ser de 2 ó más dimensiones.

20 Matrices (Array) (…cont)

21 Operadores Lógicos Logic operators Logic operators precedence
and or nand nor xor not xnor only in VHDL-93 Highest No order precedents not and or nand nor xor xnor Lowest

22 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 ; y = (ab + c)d Correcto y <= (a and b) or (c and d) ; No order precedents

23 Operadores condicionales
Relational operators Logic and relational operators precedence = /= < <= > >= Highest not = /= < <= > >= and or nand nor xor xnor No order precedents Lowest

24 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 … No order precedents

25 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) Tarea 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 With – Select – When If – Elsif – Else – End if Case – When – End case

27 Instrucciones de Asignación concurrentes
Sólo dentro de arquitecturas Tipos de 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

28 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 Representación binaria Representación HEX concatenación

29 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 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 <= ’0’ WHEN “000”, b WHEN “011”, c WHEN “1--”, -- Some tools won’t synthesize ‘-’ properly ’1’ WHEN OTHERS; Don´t care

31 Instrucciones de asignación concurrente: Asignación seleccionada(
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; NOTA: La asignación seleccionada también funciona con vectores.

32 Los valores deben ser constantes
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

33 (Unidad Lógica de Multiplexación)
MLU Example (Unidad Lógica de Multiplexación)

34 MLU – Diagrama de Bloques

35 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 : OUT STD_LOGIC ); END mlu;

36 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);

37 MLU – Cuerpo de la Arquitectura
BEGIN A1<= NOT A WHEN (NEG_A='1') ELSE A; B1<= NOT B WHEN (NEG_B='1') ELSE B; Y <= NOT Y1 WHEN (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;

38 Controlador de Display 7-segmentos

39 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”, -- 0 “ ” WHEN “0001”, -- 1 “ ” WHEN “0010”, -- 2 “ ” WHEN “0011”, -- 3 “ ” WHEN “0100”, -- 4 “ ” WHEN “0101”, -- 5 “ ” WHEN “0110”, -- 6 “ ” WHEN “0111”, -- 7 “ ” WHEN “1000”, -- 8 “ ” WHEN “1001”, -- 9 “ ” WHEN OTHERS; END synthesis1;

40 Instrucciones de asignación concurrente: Asignación Condicional
WHEN -ELSE target_signal <= value1 when condition1 else value2 when condition2 else . . . valueN-1 when conditionN-1 else valueN; Value N Value N-1 Condition N-1 Condition 2 Condition 1 Value 2 Value 1 Target Signal 1 .… 1 1

41 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;

42 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;

43 Formato para múltiples k-opciones
WHEN value WHEN value_1 to value_2 WHEN value_1 | value_2 | .... | value N

44 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;

45 Instrucciones de Asignación dentro de Process
Instrucciones secuenciales Tipos de asignación : 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

46 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.

47 Ejemplo : FF tipo D con Reset asíncrono activo en bajo
LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY dffe IS PORT( rst, clk, ena, d : IN std_logic; q : OUT std_logic ); END dffe; ARCHITECTURE synthesis1 OF dffe IS BEGIN PROCESS (rst, clk) IF (rst = ‘0’) THEN q <= ‘0’; ELSIF (clk’EVENT) AND (clk = ‘1’) THEN IF (ena = ‘1’) THEN q <= d; END IF; END PROCESS; END synthesis1; El atributo Event es verdadero si un flanco ha sido detectado en la señal correspondiente.

48 Instrucciones condicionales dentro de Process
CASE – WHEN CASE variable/señal IS WHEN valor => enunciado ; WHEN OTHERS => default ; END CASE;

49 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; NOTA: La instrucción CASE es sólo válida dentro de un Process.

50 Instrucciones condicionales dentro De Process
FOR - LOOP FOR variable/señal IN a TO/DOWNTO b LOOP END LOOP;

51 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;

52 Ejemplo: Sumador de Rizo (...cont)
Retardo de propagación es α #bits

53 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 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

54 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.

55 Modelo secuencial mono fase

56 Máquina tipo Mealy

57 Máquina tipo Moore

58 Máquina tipo Medvedev

59 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.

60 Contador loco: Diagrama de estados

61 Contador loco: Patrón de bits por estado

62 Contador loco (...cont) Declaración del dispositivo ENTITY cntloco IS PORT( SIGNAL clk, reset, m : IN std_logic; SIGNAL dout : OUT std_logic_vector(2 DOWNTO 0) ); END ENTITY cntloco;

63 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((clk’EVENT) AND (clk = ‘1’)) THEN edo_actual <= edo_siguiente; END IF; END PROCESS edo; . . .

64 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 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 IF; END PROCESS comb; END ARCHITECTURE mealy;

65 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;

66 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 ) 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 END IF; ….

67 Control de Luces (…cont)
…. WHEN Opt2 => lights <= “10”; IF buttons /= “10” THEN nextstate <= Idle; END IF; WHEN Error => lights <= “11”; IF buttons = “00” THEN END CASE; END PROCESS; fsm2: PROCESS( reset, clock ) BEGIN IF (reset = ‘0’) THEN currentstate <= Idle; ELSIF (clock’EVENT) AND (clock = ‘1’) THEN currentstate <= nextstate; END synthesis1;


Descargar ppt "Circuitos Digitales II"

Presentaciones similares


Anuncios Google