vhdl

24
Capítulo.2 – Sumador y Buffer con VHDL

Upload: erik-romero

Post on 20-Oct-2015

23 views

Category:

Documents


1 download

TRANSCRIPT

  • Captulo.2 Sumador y Buffer con VHDL

  • Cap.2 Sumador y Buffer con VHDL

    Declaracin Entidad

    Declaracin Entidad

    Programacin de Estructuras Bsicas

    Diseo (Programacin) de una Estructura Bsica CombinatoriaDiseo (Programacin) de una Estructura Bsica Combinatoria

    Sintaxis:

    ARCHITECTURE nombre_arquitectura OF nombre_entidad IS

    {Declarativas de Bloque} Se analizarn posteriormente

    BEGIN

    {Enunciados Concurrentes}

    END [nombre_arquitectura]

    Sintaxis:

    ARCHITECTURE nombre_arquitectura OF nombre_entidad IS

    {Declarativas de Bloque} Se analizarn posteriormente

    BEGIN

    {Enunciados Concurrentes}

    END [nombre_arquitectura]

    Declaracin Arquitectura

    Declaracin Arquitectura

    Enunciado Concurrente.

    Unidad de Cmputo/Clculo que realiza lo siguiente:

    Lectura de Seales.

    Realiza clculos basados en los valores de las Seales.

    Asigna los valores calculados a Seales especficas.

    Enunciado Concurrente.

    Unidad de Cmputo/Clculo que realiza lo siguiente:

    Lectura de Seales.

    Realiza clculos basados en los valores de las Seales.

    Asigna los valores calculados a Seales especficas.

    Biblioteca (s)Biblioteca (s)

  • Cap.2 Sumador y Buffer con VHDL Programacin de Estructuras Bsicas

    SEALES Y VARIABLESSEALES Y VARIABLES

    SEALES:

    Se declaran igual que las constantes y variables. La diferencia es que pueden ser normal, register y bus. Si no se especifica nada en la declaracin el compilador entender que es del tipo normal. Se puede decir que la seal tiene dos partes una donde se escribe y otra donde se lee. Las seales pueden ser declaradas slo en las arquitecturas, paquetes (PACKAGE) o en bloques concurrentes (BLOCK).

    Utilizadas en ejecuciones concurrentes.

    SEALES:

    Se declaran igual que las constantes y variables. La diferencia es que pueden ser normal, register y bus. Si no se especifica nada en la declaracin el compilador entender que es del tipo normal. Se puede decir que la seal tiene dos partes una donde se escribe y otra donde se lee. Las seales pueden ser declaradas slo en las arquitecturas, paquetes (PACKAGE) o en bloques concurrentes (BLOCK).

    Utilizadas en ejecuciones concurrentes.

    VARIABLES:

    Es similar al concepto de variable en otros lenguajes. Su valor puede ser alterado en cualquier instante y se le puede asignar un valor inicial. Las variables slo se declaran en los procesos o subprogramas.

    Utilizadas en ejecuciones en serie.

    VARIABLES:

    Es similar al concepto de variable en otros lenguajes. Su valor puede ser alterado en cualquier instante y se le puede asignar un valor inicial. Las variables slo se declaran en los procesos o subprogramas.

    Utilizadas en ejecuciones en serie.

  • Cap.2 Sumador y Buffer con VHDL Programacin de Estructuras Bsicas

    SEALES Y VARIABLESSEALES Y VARIABLES

    --Uso incorrecto de las seales

    ARCHITECTURE ejem1 OF entidad IS

    SIGNAL a, b, c, x, y : INTEGER;

    BEGIN

    P1: PROCESS (a,b,c)

    BEGIN

    c

  • Cap.2 Sumador y Buffer con VHDL Otras Estructuras Bsicas

    entrada

    habilitar (enable)

    salida

    Buffer-Salida de 3-EstadosBuffer-Salida de 3-Estados

    library ieee;

    use ieee.std_logic_1164.all;

    entity tri_est is

    port (enable, entrada: in std_logic;

    salida: out std_logic);

    end tri_est;

    architecture arq_buffer of tri_est is

    begin

    process (enable, entrada)

    begin

    if (enable = 0) then

    salida

  • Cap.2 Sumador y Buffer con VHDL Otras Estructuras Bsicas

    Sumadores: Medio SumadorSumadores: Medio Sumador

    Medio

    SumadorB

    A SUMA

    Cout

    1011

    0101

    0110

    0000

    CoutSumaBA

    ABCout

    BASuma

    =

    =

    library ieee;

    use ieee.std_logic_1164.all;

    entity m_sum is

    port (A,B: in std_logic;

    SUMA, Cout: out std_logic);

    end m_sum;

    architecture am_sum of m_sum is

    begin

    SUMA

  • Cap.2 Sumador y Buffer con VHDL

    Cin

    A

    B

    Cout

    SUMA

    Sumador CompletoMedio Sumador

    Medio Sumador

    Cin

    A

    BCout

    SUMA

    Sumador Completo

    Medio

    Sumador

    Medio

    Sumador

    Sumadores: Sumador CompletoSumadores: Sumador Completo

    Otras Estructuras Bsicas

    Sumador Completo

    B

    A SUMA

    CoutCin

    11111

    10011

    10101

    01001

    10110

    01010

    01100

    00000

    CoutSumaCinBA

    B)Cin(AABACinBCinABCout

    CinBAABCinCin BACin BACin B ASuma

    +=++==+++=

  • Cap.2 Sumador y Buffer con VHDL Otras Estructuras Bsicas

    Sumadores: Sumador CompletoSumadores: Sumador Completo

    library ieee;

    use ieee.std_logic_1164.all;

    entity sum is

    port (A, B, Cin: in std_logic;

    Suma, Cout: out std_logic);

    end sum;

    architecture a_sum of sum is

    begin

    Suma

  • Cap.2 Sumador y Buffer con VHDL Otras Estructuras Bsicas

    Sumadores: Sumador Paralelo 4-BitsSumadores: Sumador Paralelo 4-Bits

    library ieee;

    use ieee.std_logic_1164.all;

    entity suma is

    port (A, B: in std_logic_vector (3 downto 0);

    S: out std_logic_vector (3 downto 0);

    Cin : in std_logic;

    Cout: out std_logic);

    end suma;

    architecture arqsuma of suma is

    signal C: std_logic_vector (3 downto 0);

    begin

    C(0)

  • Cap.2 Sumador y Buffer con VHDL FOR-GENERATE

    Sumadores: Sumador Paralelo 4-BitsSumadores: Sumador Paralelo 4-BitsLIBRARY IEEE;

    USE IEEE.STD_LOGIC_1164.ALL;

    ENTITY suma IS

    PORT( A, B : IN STD_LOGIC_VECTOR ( 3 DOWNTO 0 );

    S : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 );

    Cout : OUT STD_LOGIC;

    Cin : IN STD_LOGIC );

    END suma;

    ARCHITECTURE arq_suma OF suma IS

    SIGNAL C : STD_LOGIC_VECTOR( 4 DOWNTO 0 );

    BEGIN

    C(0)

  • Cap.2 Sumador y Buffer con VHDL FOR-LOOP

    Sumadores: Sumador Paralelo 4-BitsSumadores: Sumador Paralelo 4-BitsLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;

    ENTITY suma ISPORT( A, B : IN STD_LOGIC_VECTOR ( 3 DOWNTO 0 );

    S : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 );

    Cout : OUT STD_LOGIC;

    Cin : IN STD_LOGIC );END suma;

    ARCHITECTURE arq_suma OF suma IS

    BEGINPAU : PROCESS( A, B, Cin )VARIABLE C : BIT_VECTOR(4 DOWNTO 0);BEGINC(0) := Cin;FOR I IN 0 TO 3 LOOP

    S(I)

  • Cap.2 Sumador y Buffer con VHDL FOR-GENERATE y GENERIC

    Sumadores: Sumador Paralelo 4-BitsSumadores: Sumador Paralelo 4-BitsENTITY sumador IS

    GENERIC( N : INTEGER := 4 );

    PORT( SAL: OUT STD_LOGIC_VECTOR( N-1 DOWNTO 0 );

    A : IN STD_LOGIC_VECTOR( N-1 DOWNTO 0 );

    B : IN STD_LOGIC_VECTOR( N-1 DOWNTO 0 );

    C4 : OUT STD_LOGIC;

    C0 : IN STD_LOGIC );

    END sumador;

    ARCHITECTURE arq_suma OF sumador IS

    SIGNAL C : STD_LOGIC_VECTOR( N DOWNTO 0 );

    SIGNAL S : STD_LOGIC_VECTOR( N-1 DOWNTO 0 );

    ATTRIBUTE SYNTHESIS_OFF OF C : SIGNAL IS TRUE;

    BEGIN

    C(0)

  • Cap.2 Sumador y Buffer con VHDL Otra Estructura

    Sumadores: Sumador Paralelo 4-BitsSumadores: Sumador Paralelo 4-Bits

    library ieee;

    use ieee.std_logic_1164.all;

    use ieee.std_logic_arith.all;

    use ieee.std_logic_unsigned.all;

    entity sum4b_arit is

    port (A, B: in std_logic_vector (3 downto 0);

    Suma: out std_logic_vector (3 downto 0));

    end sum4b_arit;

    architecture arqsum of sum4b_arit is

    begin

    Suma

  • Cap.2 Sumador y Buffer con VHDL Programacin de Estructuras Bsicas

    ACARREO EN CASCADA Y ACARREO ANTICIPADOACARREO EN CASCADA Y ACARREO ANTICIPADO

    Sumador con acarreo en cascada:

    El principal problema es que el retardo del circuito depende de la propagacin del acarreo a lo largo de todo el sumador.

    El nmero de compuertas lgicas por sumador completo es constante.

    Sumador con acarreo anticipado:

    El principal problema es que aumenta el nmero de compuertas lgicas necesarias para su implementacin.

    El retardo, del acarreo de salida, de cada sumador completo es constante.

    Sumador con acarreo en cascada:

    El principal problema es que el retardo del circuito depende de la propagacin del acarreo a lo largo de todo el sumador.

    El nmero de compuertas lgicas por sumador completo es constante.

    Sumador con acarreo anticipado:

    El principal problema es que aumenta el nmero de compuertas lgicas necesarias para su implementacin.

    El retardo, del acarreo de salida, de cada sumador completo es constante.

  • Cap.2 Sumador y Buffer con VHDL Programacin de Estructuras Bsicas

    ACARREO EN CASCADA Y ACARREO ANTICIPADOACARREO EN CASCADA Y ACARREO ANTICIPADO

    A0B0

    S0

    C1

    A1B1

    S1

    C2

    A2B2

    S2

    C3

    A3B3

    S3

    Cout

    Cin

    Ai

    BiCi+1

    Si

    Ci

  • Cap.2 Sumador y Buffer con VHDL Programacin de Estructuras Bsicas

    ACARREO EN CASCADA Y ACARREO ANTICIPADOACARREO EN CASCADA Y ACARREO ANTICIPADO

    Ci

    Pi

    Gi

    Ai

    BiCi+1

    Si

    Pi = AiBiGi = AiBi

    Si = PiCiCi+1 = Gi + PiCi

    Co = Cin

    S0 = P0 C0 = A0B0C0C1 = G0+P0C0 = A0B0+C0(A0B0)C2 = G1+P1C1 = A1B1+P1G0+P1P0C0

    C3 = G2+P2C2 = A2B2+P2G1+P2P1G0+P2P1P0C0

    C4= G3+P3C3 = A3B3+P3G2+P3P2G1+P3P2P1G0+P3P2P1P0C0

    Desarrollando las funciones para un circuito de 4 bits, tenemos:

  • Cap.2 Sumador y Buffer con VHDL Programacin de Estructuras Bsicas

    ACARREO EN CASCADA Y ACARREO ANTICIPADOACARREO EN CASCADA Y ACARREO ANTICIPADO

    C0

    P0

    G0

    A0

    B0

    C1

    S0

  • Cap.2 Sumador y Buffer con VHDL FOR-LOOP

    Sumadores: Sumador Paralelo 4-BitsSumadores: Sumador Paralelo 4-BitsLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY suma ISPORT( A, B : IN STD_LOGIC_VECTOR ( 3 DOWNTO 0 );

    S : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 );

    Cout : OUT STD_LOGIC;

    Cin : IN STD_LOGIC );END suma;ARCHITECTURE arq_suma OF suma ISBEGINPSUM : PROCESS( A, B, Cin )VARIABLE C : STD_LOGIC_VECTOR (4 DOWNTO 0);VARIABLE P, G : STD_LOGIC_VECTOR ( 3 DOWNTO 0 );BEGINC(0) := Cin;FOR I IN 0 TO 3 LOOP

    P(I) := A(I) XOR B(I);G(I) := A(I) AND B(I);S(I)

  • Cap.2 Sumador y Buffer con VHDL FOR-LOOP

    ALU: Salidas con buffer tercer estadoALU: Salidas con buffer tercer estado

    LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;

    ENTITY ALU ISPORT ( A, B : IN STD_LOGIC_VECTOR (3 DOWNTO 0);

    E : IN STD_LOGIC;ALUOP : IN STD_LOGIC_VECTOR (3 DOWNTO 0);BANDERAS : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);DATOS : OUT STD_LOGIC_VECTOR (3 DOWNTO 0)

    );END ALU;

    ARCHITECTURE AALU OF ALU ISSIGNAL RESULTADO : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN

    --BITS DE FLAGS--FLAGS(3) FLAGS(2) FLAGS(1) FLAGS(0) --OV C N Z

    --BITS DE ALUOP--ALUOP(3) ALUOP(2) ALUOP(1) ALUOP(0) --AINVERT BINVERT OP(1) OP(0)

    Ejemplo N 10 ALU con salidas a BUFFER

  • Cap.2 Sumador y Buffer con VHDL FOR-LOOP

    ALU: Salidas con buffer tercer estadoALU: Salidas con buffer tercer estado

    PALU : PROCESS ( A, B, ALUOP )VARIABLE P, G : STD_LOGIC_VECTOR( 3 DOWNTO 0 );VARIABLE CARRY : STD_LOGIC_VECTOR( 4 DOWNTO 0 );VARIABLE MUXA, MUXB : STD_LOGIC_VECTOR( 3 DOWNTO 0 );BEGINCARRY := (OTHERS=>'0');CARRY(0) := ALUOP(2);

    FOR I IN 0 TO 3 LOOPMUXA(I) := A(I) XOR ALUOP(3);MUXB(I) := B(I) XOR ALUOP(2);CASE ALUOP(1 DOWNTO 0) ISWHEN "00" =>

    RESULTADO(I)

    RESULTADO(I)

    RESULTADO(I)

    P(I) := MUXA(I) XOR MUXB(I);G(I) := MUXA(I) AND MUXB(I);RESULTADO(I)

  • Cap.2 Sumador y Buffer con VHDL FOR-LOOP

    ALU: Salidas con buffer tercer estadoALU: Salidas con buffer tercer estado

    BANDERAS(1)

  • Cap.2 Sumador y Buffer con VHDL FOR-LOOP

    ALU: Salidas con buffer tercer estadoALU: Salidas con buffer tercer estado

    LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;

    ENTITY acumulador ISPORT ( CLK : IN STD_LOGIC;

    CLR : IN STD_LOGIC;L : IN STD_LOGIC;E : IN STD_LOGIC;D : INOUT STD_LOGIC_VECTOR (7 DOWNTO 0);BA : INOUT STD_LOGIC_VECTOR (7 DOWNTO 0));

    END acumulador;

    ARCHITECTURE arq_acc OF acumulador ISBEGIN

    Ejemplo N 11 ACUMULADOR

  • Cap.2 Sumador y Buffer con VHDL FOR-LOOP

    ALU: Salidas con buffer tercer estadoALU: Salidas con buffer tercer estado

    PREG : PROCESS (CLK, CLR)BEGIN

    IF (CLR='1') THENBA

  • Cap.2 Sumador y Buffer con VHDL Otra Estructura

    Sumadores: Sumador Paralelo 4-BitsSumadores: Sumador Paralelo 4-Bits

    library ieee;

    use ieee.std_logic_1164.all;

    use ieee.std_logic_arith.all;

    use ieee.std_logic_unsigned.all;

    entity sum4b_arit is

    port (A, B: in std_logic_vector (3 downto 0);

    Suma: out std_logic_vector (3 downto 0));

    end sum4b_arit;

    architecture arqsum of sum4b_arit is

    begin

    Suma