vhdl
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