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