1 / 67

Circuitos Digitales II

Departamento de Ingeniería Electrónica Facultad de Ingeniería. Circuitos Digitales II. Elementos del VHDL Semana No.3 Semestre 2008-2 Prof. Gustavo Patiño gpatino@udea.edu.co Prof. Eugenio Duque eaduque@udea.edu.co. Temario. Señales Representación de Señales

kerryn
Télécharger la présentation

Circuitos Digitales II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Departamento de Ingeniería Electrónica Facultad de Ingeniería Circuitos Digitales II Elementos del VHDL Semana No.3 Semestre 2008-2 Prof. Gustavo Patiño gpatino@udea.edu.co Prof. Eugenio Duque eaduque@udea.edu.co

  2. 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 – Endif • Asignación de señal seleccionada • Case – When – End case • Ejemplos : Máquinas de Estados

  3. 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. Tipos de Datos Real, entero, binarios y enumerados

  11. Tipos de datos escalares • VHDL soporta un rico conjunto de tipos de datos propiosasí 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 rangorestringido 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 not and or nand nor xorxnor Lowest

  22. Prioridades que no son implícitas Se quiere: y = ab + cd Incorrecto y <= a and b or c and d ; equivalentto y <= ((a and b) or c) and d ; equivalentto y = (ab + c)d Correcto y <= (a and b) or (c and d) ;

  23. Operadores condicionales • Relational operators • Logic and relational operators precedence = /= < <= > >= Highest not = /= < <= > >= and or nand nor xorxnor 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 …

  25. 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. • 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 (WithSelect) • T - Type • U - Use • V - Variable • W - Whenelse • X - Xor • Y - Wait • Z – ‘Z’ (HighImpedance)

  26. Instrucciones de Asignación concurrentes When – Else With – Select – When If – Elsif – Else – Endif 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 <= "00111010"; -- 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 SIGNALa: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNALb: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNALc, d, e, f: STD_LOGIC_VECTOR(7 DOWNTO 0); a <= ”0000”; b <= ”1111”; c <= a&b; -- c = ”00001111” d <= ‘0’ & ”0001111”; -- d <= ”00001111” e <= ‘0’ & ‘0’ & ‘0’ & ‘0’ & ‘1’ & ‘1’ & ‘1’ & ‘1’; -- e <= ”00001111” f <= (‘0’,‘0’,‘0’,‘0’,‘1’,‘1’,‘1’,‘1’) ;-- e<= ”00001111”

  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’ WHENOTHERS; Don´t care

  31. Instrucciones de asignación concurrente: Asignación seleccionada(...cont) SIGNAL a :std_logic; SIGNALavec, bvec :std_logic_vector(7 DOWNTO 0); -- SelectedSignalAssignmentStatement -- NOTE: Selectedsignalassignmentsalsowork -- withvectors WITH a SELECT avec <= “01010101” WHEN ’1’, bvecWHENOTHERS; NOTA: La asignación seleccionada también funciona con vectores.

  32. Instrucciones de asignación concurrente: Asignación seleccionada(...cont) withchoice_expressionselect target_signal<=expression1whenchoices_1, expression2whenchoices_2, . . . expressionNwhenchoices_N; With –Select –When Los valores deben ser constantes choices_1 expression1 expression2 choices_2 • target_signal choices_N expressionN • choice expression

  33. 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; ENTITYmluIS 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 ); ENDmlu;

  36. MLU – Declaración de la Arquitectura ARCHITECTUREmlu_dataflowOFmluIS 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; ENDmlu_dataflow;

  38. Controlador de Display 7-segmentos

  39. Controlador de Display 7-segmentos : Solución LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITYseven_segIS PORT( dataIn : IN std_logic_vector(3 DOWNTO 0); segments : OUT std_logic_vector(7 DOWNTO 0) ); ENDseven_seg; ARCHITECTURE synthesis1 OFseven_segIS BEGIN WITHdataInSELECT segments <= “10000001”WHEN“0000”, -- 0 “11001111” WHEN “0001”, -- 1 “10010010” WHEN “0010”, -- 2 “10000110” WHEN “0011”, -- 3 “11001100” WHEN “0100”, -- 4 “10100100” WHEN “0101”, -- 5 “10100000” WHEN “0110”, -- 6 “10001111” WHEN “0111”, -- 7 “10000000” WHEN “1000”, -- 8 “10000100” WHEN “1001”, -- 9 “11111111” WHENOTHERS; END synthesis1;

  40. Value N • … • Value N-1 • Target Signal • Value 2 • Value 1 • Condition N-1 • Condition 2 • Condition 1 Instrucciones de asignación concurrente: Asignación Condicional • WHEN -ELSE target_signal <= value1whencondition1else value2whencondition2else . . . valueN-1whenconditionN-1else valueN; • 0 • 1 • .… • 0 • 1 • 0 • 1

  41. Ejemplo buffer Tri-state LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITYtri_stateIS PORT ( ena : IN STD_LOGIC; input : IN STD_LOGIC_VECTOR(7 DOWNTO 0); output : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); ENDtri_state;

  42. Ejemplo buffer Tri-state(…cont) ARCHITECTUREtri_state_dataflowOFtri_stateIS BEGIN output <= input WHEN (ena = ‘0’) ELSE (OTHERS => ‘Z’); ENDtri_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 WHENOTHERS;

  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; ENTITYdffeIS PORT( rst, clk, ena, d : INstd_logic; q : OUTstd_logic ); ENDdffe; ARCHITECTURE synthesis1 OFdffeIS BEGIN PROCESS (rst, clk) BEGIN IF (rst = ‘0’) THEN q <= ‘0’; ELSIF (clk’EVENT) AND (clk = ‘1’) THEN IF (ena = ‘1’) THEN q <= d; END IF; 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 CASEvariable/señalIS WHENvalor => enunciado ; … WHEN OTHERS => default ; END CASE;

  49. Ejemplo combinacional usando CASE/whenemumprocess SIGNAL a, b, c, d : std_logic; PROCESS (a, b, d) -- a, b, and d are in thesensitivitylisttoindicatethat -- the outputs of theprocess are sensitivetochanges in them BEGIN -- CASE keywordisonlyvalid in a process CASE d IS WHEN‘0’ => c <= a ANDb; WHENOTHERS=> 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 FORvariable/señalINaTO/DOWNTObLOOP … END LOOP;

More Related