0% encontró este documento útil (0 votos)
110 vistas34 páginas

Especificación VHDL de Circuitos Combinacionales

Este documento resume conceptos clave sobre circuitos combinacionales en VHDL como concurrencia, procesos concurrentes, y especificación de circuitos aritméticos como sumadores. Explica que los procesos en VHDL se ejecutan de forma concurrente, modelando el comportamiento paralelo de los componentes de un circuito. También presenta ejemplos de sumadores implementados mediante procesos concurrentes y arreglos de sumadores para realizar operaciones como multiplicaciones.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
110 vistas34 páginas

Especificación VHDL de Circuitos Combinacionales

Este documento resume conceptos clave sobre circuitos combinacionales en VHDL como concurrencia, procesos concurrentes, y especificación de circuitos aritméticos como sumadores. Explica que los procesos en VHDL se ejecutan de forma concurrente, modelando el comportamiento paralelo de los componentes de un circuito. También presenta ejemplos de sumadores implementados mediante procesos concurrentes y arreglos de sumadores para realizar operaciones como multiplicaciones.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Especificación VHDL

de
circuitos combinacionales

Miguel Melgarejo

Facultad de Ingeniería
Universidad Distrital Francisco José de Caldas
Bogotá DC, Colombia
Contenido

•  Resumen lección anterior


•  Concurrencia
•  Circuitos aritméticos
•  Procesos y secuencialidad
•  Procesos concurrentes
•  Procesos y vectores de prueba
Resumen lección anterior
Niveles de descripción
•  Comportamental
Describe el comportamiento del sistema.

•  Funcional
Describe las funciones que representan al sistema

•  Estructural
Describe el sistema en términos de los componentes que
lo conforman y sus interconexiones.
Implementación de funciones booleanas
Library ieee;
Use ieee.std_logic_1164.all
I1
Entity mux2to1 is I2 f
port ( I1,I2,s : in std_logic; s
f : out std_logic);
End mux2to1;

I1
Architecture funcional of mux2to1 is AND
S NOT x3
Signal x1,x2,x3 : std_logic; x1
OR f
Begin
x1 <= not s; I2 AND x2
x2 <= s and I2;
x3 <= x1 and I1; •  Cada sentencia representa un circuito.
f <= x2 or x3 ; •  Todos los circuitos operan paralelamente,
End Behavioral; Es decir al mismo tiempo
Especificación VHDL del
multiplexor bàsico
Library ieee; I1 I2
Use ieee.std_logic_1164.all

Entity mux2to1 is
port ( I1,I2,s : in std_logic; S
f : out std_logic);
End mux2to1;
f

Architecture behavioral of mux2to1 is


Begin S f
with s Select
0 I1
f <= I1 when ‘0’,
I2 when others; 1 I2
End Behavioral;
Reutilización de componentes
•  Un componente se puede utilizar cuantas
veces sea necesario.

•  Todo componente que se vaya a reutilizar


debe ser declarado en una biblioteca de
componentes (lonchera).

•  Hay una única biblioteca componentes por


proyecto.
Concurrencia!!!
Concurrencia
•  La concurrencia es una propiedad de los HDL que
refleja la operación en paralelo de los elementos de un
circuito.

Architecture behavioral of mux2to1 is I1


Signal x1,x2,x3 : std_logic; AND
S NOT
Begin
OR f
x1 <= not s;
x2 <= s and I2; AND
I2
x3 <= x1 and I1;
f <= x2 or x3 ;
End Behavioral;

• Las sentencias ubicadas en una misma arquitectura se ejecutan en


paralelo ( de manera concurrente).
• El orden de las sentencias no tiene importancia.
Concurrencia
•  Dos o más procesos en una arquitectura
son concurrentes.

•  Dos o más procesos pueden leer la misma


señal (super nodo)
A

Cada proceso modela un componente del circuito


Concurrencia

DOS O MAS PROCESOS NO PUEDEN


ESCRIBIR LA MISMA SEÑAL !!!

C1 C2

A
1 0 ?
Circuitos aritméticos
Especificación de circuitos aritméticos

•  El modulo básico en las operaciones


aritméticas es el sumador.

•  La descripción VHDL del sumador es de


naturaleza funcional.

•  La especificación de la suma cambia de


acuerdo con el formato de representación.
Celda de suma
Operando 1 Operando 2 Carry in Suma Carry out
(lleva entrante) (lleva saliente)

0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

Celda básica de suma


Representación funcional
Sumadores con acarreo en cascada
Sumador para números en
representación binario natural

b3 b2 b1 b0 a3 a2 a1 a0
0 0

cout cin
+ 0

d4 d3 d2 d1 d0
Especificación VHDL
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all; b3 b2 b1 b0 a3 a2 a1 a0
use ieee.std_logic_unsigned.all;
0 0
Entity sumadorns is
port ( a,b : in std_logic_vector(3 downto 0);
d : out std_logic_vector( 4 downto 0));
end sumadorns;
cou cin
architecture BHV of sumadorns is t + 0
begin
d <= '0'&a + b;
end BHV;

d4 d3 d2 d1 d0
Sumador para números en representación
binario complemento a dos

b3 b2 b1 b0 a3 a2 a1 a0

cout cin
+ 0

d4 d3 d2 d1 d0
Especificación VHDL
b3 b2 b1 b0 a3 a2 a1 a0
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_signed.all;

Entity sumadorns is
port ( a,b : in std_logic_vector(3 downto 0);
cou cin
d : out std_logic_vector( 4 downto 0)); t +
end sumadorns;

architecture BHV of sumadorns is


begin
d <= a(3)&a + b;
end BHV; d4 d3 d2 d1 d0
Arreglos de sumadores
Dado el producto de un numero (X) por una constante (k) :

Y=k*X

Puede reescribirse de la siguiente forma:

N −1
Y = ∑ kn 2n * X =
n =0

k N −1 2 N −1 X + k N − 2 2 N − 2 X + ... + k1 21 X + k0 20 X

•  Kn habilita la mutiplicación
•  Lasa multiplicaciones por potencias de dos , se construyen como
desplazamientos combinacionales.
* Lo demás es sumar.
Ejemplo
Construir un circuito combinacional que calcule la siguiente
función :
Y = 19*X ( X es un numero signado de 4bits)

•  K=19=24+21+20
•  W=K*X=19*X=24*X+21*X+20*X

Combinacionalmente: 24 * X = X&”0000” (8 bits)


21 * X = X&”0 (5 bits)
1 *X=X (4 bits)
Ejemplo
Diagrama circuital
0
0
0
0
x0
x1
x
x2 3 W8..0
0 + W8
x0
x1 x0
x x1
x Y9..0
x2 3 +
x2 3
Especificación VHDL
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_signed.all; sum1
entity arreglosum is
port ( x : in std_logic_vector(3 downto 0);
y : out std_logic_vector( 9 downto 0 )); sum2
end arreglosum;

architecture bhv of arreglosum is


signal P1 : std_logic_vector( 7 downto 0); +
signal P2 : std_logic_vector( 4 downto 0);
signal P3 : std_logic_vector( 3 downto 0);
signal Sum1 : std_logic_vector (8 downto 0);
signal sum2 : std_logic_vector ( 9 downto 0);
Y
begin +
P1 <= x&"0000"; --productos por potencias de
dos
P2 <= x&"0";
P3 <= x;

sum1 <= P1(7)&P1+P2; -- arreglo de sumadores


sum2 <= sum1(8)&sum1 + P3;
y <= sum2;
end bhv;
Procesos y secuencialidad
Procesos: sentencias If-Then

Architecture BHV of mux2to1 is


begin
process ( i , s)
begin
if s= ‘0’ then S f
f <= i(0);
elsif s=‘1’ then
f <=i(1);
0 i(0)
else
f <=‘0’; 1 i(1)
end if;
end process;
End BHV;
Procesos: sentencias when - case

Architecture BHV of mux2to1 is


begin
process ( i, s)
S f
begin
case s is 0 I0
when ‘0’ =>
f <= i(0) ; 1 I1
when ‘1’ =>
f <= i(1) ;
when others =>
f <= ‘0’;
end process;
End BHV;
Procesos combinacionales:
consideraciones importantes
ARCHITECTURE .....BEGIN
PROCESS (a,b,c,d,sel )
BEGIN
CASE sel IS
a WHEN “00” =>
b MUX y y<=a;
c WHEN “01” =>
d
4-1 y<=b;
WHEN “10” =>
y<=c;
2 WHEN “11” =>
y<=d;
sel
WHEN OTHERS =>
y<=‘X’;
END CASE;
END PROCESS;
END ....
Procesos combinacionales:
consideraciones importantes
c1 c0 x y z
ARCHITECTURE .....BEGIN 00 a NOT b b
PROCESS ( a, b,c) 01 NOT a a OR b 1
BEGIN 10 NOT a b ?
x<=NOT a 11 NOT a b ?
CASE c IS
WHEN “00” =>
x <= a; a c
y <= NOT b; M
U x
z <= b; NOT a X
WHEN “01” =>
y <= a OR b; c
z <= 1; NOT b M
WHEN OTHERS => a OR b U
y
y<= b; b X
END CASE; c c1
END PROCESS;
END ....
b M Latch z
1 U
X
Procesos concurrentes
Procesos concurrentes
Architecture bhv of cir is
Signal Q1,Q2: std_logic_vector ( 3 downto 0);
Signal set : std_logic;
Begin

PX:Process ( set,a,b) PZ:process (sel, Q1,Q2)


Begin Begin a b
If set = ‘1’ then If sel =‘1’ then
Q1 <= a; C <= Q1;
Else Else set
Q1 <= b; C <= Q2; <
End if; End if;
End process; End process;
Q1 Q2
PW: Process ( set,a,b) sel
Begin PV: Process (a,b)
If set = ‘0’ then Begin
Q2 <= a; If a < b then
Else Set <= ‘1’ ; c
Q2 <= b; else
End if; Set <= ‘0’;
End process; End if; Unidad Max-Min
End process;

end bhv;
Procesos concurrentes
Architecture bhv of cir is
Signal Q1,Q2: std_logic_vector ( 3 downto 0);
Signal set : std_logic;
Begin

PZ:process (sel, Q1,Q2) a b


Begin
If sel =‘1’ then
C <= Q1;
Else set
PX:Process ( set,a,b) C <= Q2; <
Begin End if;
If set = ‘1’ then End process;
Q1 <= a; Q1 Q2
Q2 <= b;
sel
Else PV: Process (a,b)
Q1 <= b; Begin
Q2 <= a; If a < b then
End if; Set <= ‘1’ ; c
End process; else
Set <= ‘0’;
End if;
End process;
Unidad Max-Min

end bhv;
Procesos y vectores de prueba
(TEST BENCH)
TEST BENCH
PROCESS
BEGIN
a <= ‘0’;
b <= ‘0’;
WAIT FOR 100ns;
a <= ‘1’; a
WAIT FOR 100ns;
a <= ‘0’;
b
b <= ‘1’;
WAIT FOR 100ns;
a <= ‘1’; 100 ns 200 ns 300 ns
WAIT;
END PROCESS
Referencias

Esta lección está basada en las obras de


referencia:

•  Brown S., Fundamentos de Lógica digital


con diseño VHDL, McGraw Gil, 2006
•  Actel Co, Actel HDL coding style guide,
2000

También podría gustarte