You are on page 1of 38

1

Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 1/76


Tema:
Metodologas de Diseo Electrnico
Universidad Politcnica de Cartagena
Departamento de Electrnica, Tecnologa de Computadoras y Proyectos
Titulacin: Ingeniero de Telecomunicacin
Asignatura: Arquitectura y Tecnologa de Computadores
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 2/76
Motivacin del tema
Conocimientos previos:
lgebra booleana, simplificacin de funciones lgicas
Circuitos combinacionales y secuenciales bsicos
Diagramas de esquemas
Conocimientos desarrollados:
Caractersticas de las herramientas de diseo electrnico
Justificacin del uso de HLDs para diseo de circuitos VLSI
Introduccin al diseo con VHDL
2
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 3/76
Objetivos
Analizar las metodologas de diseo electrnico
Comprender los niveles de abstraccin al describir un
sistema electrnico, ubicando en ellos el lenguaje VHDL
Comprender el sistema de modelado del hardware que
implementa el VHDL, mediante procesos concurrentes
Analizar la sintaxis bsica del lenguaje, que capacite al
alumno para la definicin de circuitos sencillos
Describir, sintetizar y simular los componentes de un
sistema a nivel RTL, combinacionales y secuenciales
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 4/76
Desarrollo de contenidos
Metodologas de Diseo Electrnico
3
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 5/76
Sumario
Introduccin
Niveles de abstraccin/descripcin de circuitos
Metodologas de Diseo Electrnico
Conceptos bsicos de VHDL
Resumen
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 6/76
Introduccin
Nuevas
tecnologas de
fabricacin
de C.I.
Computadoras y
software ms
potentes
Nuevas
herramientas:
- EDA
- Metodologas Crculo productivo del
Diseo Electrnico
4
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 7/76
Sumario
Introduccin
Niveles de abstraccin/descripcin de circuitos
Metodologas de Diseo Electrnico
Conceptos bsicos de VHDL
Resumen
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 8/76
Niveles de abstraccin/descripcin de circuitos
Niveles:
sistema
chip
transferencia de registros
puertas lgicas
circuito elctrico
fsico
5
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 9/76
Niveles de abstraccin/descripcin de circuitos
Niveles:
sistema
chip
transferencia de registros
puertas lgicas
circuito elctrico
fsico
acceso remoto
modem
conexin
local
perifrico
servidor
almacenamiento
cliente
estacin
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 10/76
Niveles de abstraccin/descripcin de circuitos
Niveles:
sistema
chip
transferencia de registros
puertas lgicas
circuito elctrico
fsico
PROCESADOR MEMORIA UART
6
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 11/76
Niveles de abstraccin/descripcin de circuitos
Niveles:
sistema
chip
transferencia de registros
puertas lgicas
circuito elctrico
fsico
Generado con Xilinx Foundation 3.1i
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 12/76
Niveles de abstraccin/descripcin de circuitos
Niveles:
sistema
chip
transferencia de registros
puertas lgicas
circuito elctrico
fsico
Generado con Xilinx Foundation 3.1i
7
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 13/76
Niveles de abstraccin/descripcin de circuitos
Niveles:
sistema
chip
transferencia de registros
puertas lgicas
circuito elctrico
fsico
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 14/76
Niveles de abstraccin/descripcin de circuitos
Niveles:
sistema
chip
transferencia de registros
puertas lgicas
circuito elctrico
fsico
8
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 15/76
Sumario
Introduccin
Niveles de abstraccin/descripcin de circuitos
Metodologas de Diseo Electrnico
Conceptos bsicos de VHDL
Resumen
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 16/76
Metodologas de diseo electrnico
Diseo con transistores
Diseo con ecuaciones booleanas
Diseo con esquemticos
Diseo con Lenguajes de Descripcin Hardware (HDLs)
9
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 17/76
Diseo a nivel de transistor
Diseo a medida (full-custom)
Herramientas de diseo fsico:
Simulacin de circuitos elctricos (SPICE)
Diseo de patrones geomtricos (layout)
Verificacin de Reglas de Diseo (DRC)
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 18/76
Diseo con ecuaciones booleanas
Diseo con bibliotecas de primitivas (ASICs, PLDs)
Diseo lgico (a nivel puerta)
Generacin de ecuaciones booleanas
Tcnicas de minimizacin
Utilidad: decodificadores, multiplexores, etc.
Ejemplo:
sum:=(a$b)$cin;
cout:=(a&b)#(a&cin)#(b&cin);
sum:=(a$b)$cin;
cout:=(a&b)#(a&cin)#(b&cin);
10
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 19/76
Diseo con esquemticos
Concepto de jerarqua
Bloques funcionales: interfaz + arquitectura
Utilizacin de libreras de bloques
Niveles de anidacin ilimitados
Metodologa de abajo hacia arriba (bottom-up)
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 20/76
Diseo con esquemticos
Concepto de jerarqua
Bloques funcionales: interfaz + arquitectura
Utilizacin de libreras de bloques
Niveles de anidacin ilimitados
Metodologa de abajo hacia arriba (bottom-up)
Generado con Xilinx Foundation 3.1i
11
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 21/76
Diseo con HDLs
HDL = Hardware Description Languaje
Descripcin textual del circuito (no grfica)
Adecuado para diseos complejos
Especificacin estructural o comportamental
Metodologa de arriba hacia abajo (top-down)
Independencia de la tecnologa hasta la sntesis
Ejemplos: VHDL, Verilog, Abel, SystemC, Handel-C...
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 22/76
Sumario
Introduccin
Niveles de abstraccin/descripcin de circuitos
Metodologas de Diseo Electrnico
Conceptos bsicos de VHDL
Resumen
12
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 23/76
VHDL: mbito de aplicacin
Fsico (silicio)
Circuito elctrico
Puertas lgicas
Transfer. de registro
Chip
Sistema
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 24/76
VHDL: mbito de aplicacin
Fsico (silicio)
Circuito elctrico
Puertas lgicas
Transfer. de registro
Chip
Sistema
Espectro de Espectro de
utilizacin del utilizacin del
VHDL VHDL
13
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 25/76
VHDL: metodologa de diseo
Especificacin
VHDL
Sntesis
Modelo a nivel
de puerta
Implementacin
(P&R)
Modelo para
pruebas
Modelo fsico
Netlist
Modelo RTL
Layout /
Configuracin
Algoritmo
ASIC/FPGA
ASIC/FPGA
restricciones /
primitivas
restricciones /
primitivas
Test-bench
Funcionalidad
prestaciones
Simulacin
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 26/76
VHDL: sintaxis general
VHDL es insensible a maysculas/minsculas
Utiliza ; para terminar una sentencia
Utiliza -- para indicar un comentario
Altamente tipado: poca conversin de tipos automtica
Sentencias/sintaxis similares a otros lenguajes:
Asignacin a seal
Control de flujo condicional
Seleccin
Bucles
Procesos
14
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 27/76
VHDL: sintaxis general
VHDL es insensible a maysculas/minsculas
Utiliza ; para terminar una sentencia
Utiliza -- para indicar un comentario
Altamente tipado: poca conversin de tipos automtica
Sentencias/sintaxis similares a otros lenguajes:
Asignacin a seal
Control de flujo condicional
Seleccin
Bucles
Procesos
--comentario: 3 ejemplos
--de sentencias de asignacin
suma <= (a AND b) AND cin;
reg <= 00101 XOR dato;
salida <= datoA + datoB;
--comentario: 3 ejemplos
--de sentencias de asignacin
suma <= (a AND b) AND cin;
reg <= 00101 XOR dato;
salida <= datoA + datoB;
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 28/76
VHDL: sintaxis general
VHDL es insensible a maysculas/minsculas
Utiliza ; para terminar una sentencia
Utiliza -- para indicar un comentario
Altamente tipado: poca conversin de tipos automtica
Sentencias/sintaxis similares a otros lenguajes:
Asignacin a seal
Control de flujo condicional
Seleccin
Bucles
Procesos
IF (control=1) THEN
salida <= datoA AND datoB;
ELSE
salida <= datoA OR datoB;
END IF;
IF (control=1) THEN
salida <= datoA AND datoB;
ELSE
salida <= datoA OR datoB;
END IF;
15
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 29/76
VHDL: sintaxis general
VHDL es insensible a maysculas/minsculas
Utiliza ; para terminar una sentencia
Utiliza -- para indicar un comentario
Altamente tipado: poca conversin de tipos automtica
Sentencias/sintaxis similares a otros lenguajes:
Asignacin a seal
Control de flujo condicional
Seleccin
Bucles
Procesos
CASE sel IS
WHEN 00 =>
sal <= a AND b;
WHEN 01 =>
sal <= a OR b;
WHEN OTHERS =>
sal <= 0000;
END CASE;
CASE sel IS
WHEN 00 =>
sal <= a AND b;
WHEN 01 =>
sal <= a OR b;
WHEN OTHERS =>
sal <= 0000;
END CASE;
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 30/76
VHDL: sintaxis general
VHDL es insensible a maysculas/minsculas
Utiliza ; para terminar una sentencia
Utiliza -- para indicar un comentario
Altamente tipado: poca conversin de tipos automtica
Sentencias/sintaxis similares a otros lenguajes:
Asignacin a seal
Control de flujo condicional
Seleccin
Bucles
Procesos
FOR i IN 1 TO 8 LOOP
salida(9-i) <= entrada(i);
END LOOP;
FOR i IN 1 TO 8 LOOP
salida(9-i) <= entrada(i);
END LOOP;
16
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 31/76
VHDL: sintaxis general
VHDL es insensible a maysculas/minsculas
Utiliza ; para terminar una sentencia
Utiliza -- para indicar un comentario
Altamente tipado: poca conversin de tipos automtica
Sentencias/sintaxis similares a otros lenguajes:
Asignacin a seal
Control de flujo condicional
Seleccin
Bucles
Procesos
PROCESS (seal1, seal2)
--declaracion de variables
BEGIN
--cuerpo del proceso
...
--sentencias secuenciales;
END PROCESS;
PROCESS (seal1, seal2)
--declaracion de variables
BEGIN
--cuerpo del proceso
...
--sentencias secuenciales;
END PROCESS;
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 32/76
Ejemplo: multiplexor (I)
17
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 33/76
Ejemplo: multiplexor (I)
Circuito lgico:
Entidad
Generado con Xilinx Foundation 3.1i
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 34/76
Ejemplo: multiplexor (I)
Circuito lgico:
Entidad
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--Declaracin de la entidad del circuito
ENTITY mux2to1 IS
PORT (ent_a: IN std_logic;
ent_b: IN std_logic;
selec: IN std_logic;
sal : OUT std_logic);
END mux2to1;
18
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 35/76
Ejemplo: multiplexor (I)
Circuito lgico:
Entidad
Arquitectura
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--Declaracin de la entidad del circuito
ENTITY mux2to1 IS
PORT (ent_a: IN std_logic;
ent_b: IN std_logic;
selec: IN std_logic;
sal : OUT std_logic);
END mux2to1;
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 36/76
Ejemplo: multiplexor (I)
Circuito lgico:
Entidad
Arquitectura
Descripcin algortmica
ARQUITECTURE comportamental OF mux2to1 IS
BEGIN
PROCESS (ent_a, ent_b, selec)
BEGIN
IF (selec='1') THEN
sal<=ent_a;
ELSE
sal<=ent_b;
END IF;
END PROCESS;
END comportamental;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--Declaracin de la entidad del circuito
ENTITY mux2to1 IS
PORT (ent_a: IN std_logic;
ent_b: IN std_logic;
selec: IN std_logic;
sal : OUT std_logic);
END mux2to1;
19
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 37/76
Ejemplo: multiplexor (II)
Circuito lgico:
Entidad
Arquitectura
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--Declaracin de la entidad del circuito
ENTITY mux2to1 IS
PORT (ent_a: IN std_logic;
ent_b: IN std_logic;
selec: IN std_logic;
sal : OUT std_logic);
END mux2to1;
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 38/76
Ejemplo: multiplexor (II)
Circuito lgico:
Entidad
Arquitectura
Descripcin de flujo de datos
ARQUITECTURE flujo_datos OF mux2to1 IS
SIGNAL selec_n, selec_a, selec_b: std_logic;
BEGIN
selec_n <= NOT(selec);
selec_a <= selec AND ent_a;
selec_b <= selec_n AND selec_b;
sal <= selec_a OR selec_b;
END flujo_datos;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--Declaracin de la entidad del circuito
ENTITY mux2to1 IS
PORT (ent_a: IN std_logic;
ent_b: IN std_logic;
selec: IN std_logic;
sal : OUT std_logic);
END mux2to1;
20
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 39/76
Ejemplo: multiplexor (III)
Circuito lgico:
Arquitectura
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--Declaracin de la entidad del circuito
ENTITY mux2to1 IS
PORT (ent_a: IN std_logic;
ent_b: IN std_logic;
selec: IN std_logic;
sal : OUT std_logic);
END mux2to1;
Entidad
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 40/76
Ejemplo: multiplexor (III)
Circuito lgico:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--Declaracin de la entidad del circuito
ENTITY mux2to1 IS
PORT (ent_a: IN std_logic;
ent_b: IN std_logic;
selec: IN std_logic;
sal : OUT std_logic);
END mux2to1;
ARQUITECTURE estructural OF mux2to1 IS
SIGNAL selec_n, selec_a, selec_b: std_logic;
COMPONENT comp_and IS
PORT (e1: IN std_logic; e2: IN std_logic;
s: OUT std_logic);
END COMPONENT;
COMPONENT comp_or IS
PORT (e1: IN std_logic; e2: IN std_logic;
s: OUT std_logic);
END COMPONENT;
COMPONENT comp_inv IS
PORT (e: IN std_logic;
s: OUT std_logic);
END COMPONENT;
BEGIN
I_1: comp_inv PORT MAP (selec, selec_n);
I_2: comp_and PORT MAP (ent_a, selec, selec_a);
I_3: comp_and PORT MAP (ent_b, selec_n, selec_b);
I_4: comp_or PORT MAP (selec_a, selec_b, sal);
END estructural;
Arquitectura
Descripcin estructural
Entidad
21
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 41/76
Sumario
Introduccin
Niveles de abstraccin/descripcin de circuitos
Metodologas de Diseo Electrnico
Conceptos bsicos de VHDL
Resumen
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 42/76
Resumen
Existen diferentes niveles de descripcin de circuitos
Las herramientas de CAD electrnico utilizan diferentes
metodologas de diseo segn los niveles sobre los que
actan
Los HDLs son la mejor alternativa para diseo digital
VLSI: mayor capacidad descriptiva, legibilidad,
reusabilidad, e independencia de la tecnologa
Las descripciones en VHDL se basan en la definicin de
una entidad y una o varias arquitecturas asociadas
La funcionalidad de la arquitectura se especifica
mediante uno o varios procesos concurrentes
22
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 43/76
Tema:
Descripcin de componentes RTL con VHDL
Universidad Politcnica de Cartagena
Departamento de Electrnica, Tecnologa de Computadoras y Proyectos
Titulacin: Ingeniero de Telecomunicacin
Asignatura: Arquitectura y Tecnologa de Computadores
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 44/76
Desarrollo de contenidos
Descripcin de componentes RTL con VHDL
23
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 45/76
Sumario
Introduccin
Descripcin de componentes combinacionales RTL
Descripcin de componentes secuenciales RTL
Resumen
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 46/76
Multiplexores
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY multiplexor IS
GENERIC(n : positive := 8);
PORT (sel : IN std_logic_vector(1 DOWNTO 0);
A : IN std_logic_vector(n-1 DOWNTO 0);
B : IN std_logic_vector(n-1 DOWNTO 0);
C : IN std_logic_vector(n-1 DOWNTO 0);
mux_out: OUT std_logic_vector(n-1 DOWNTO 0));
END multiplexor;
ARCHITECTURE Behavioral OF multiplexor IS
BEGIN
PROCESS (sel, A, B, C)
BEGIN
CASE sel IS
WHEN "00" =>
MUX_OUT <= A;
WHEN "01" =>
MUX_OUT <= B;
WHEN others =>
MUX_OUT <= C;
END CASE;
END PROCESS;
END Behavioral;
Ejemplo 2.5.1:
Multiplexor de 3
entradas de tamao
arbitrario
sel
mux_out
A
C
B
n
n
n
n
2
24
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 47/76
Codificadores/decodificadores
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY cod_8_3 IS
PORT ( A : IN std_logic_vector(7 DOWNTO 0);
Y : OUT std_logic_vector(2 DOWNTO 0));
END cod_8_3;
ARCHITECTURE Behavioral OF cod_8_3 IS
BEGIN
PROCESS(A)
BEGIN
CASE A IS
WHEN "00000001" => Y <= "000";
WHEN "00000010" => Y <= "001";
WHEN "00000100" => Y <= "010";
WHEN "00001000" => Y <= "011";
WHEN "00010000" => Y <= "100";
WHEN "00100000" => Y <= "101";
WHEN "01000000" => Y <= "110";
WHEN OTHERS => Y <= "111";
END CASE;
END PROCESS;
END Behavioral;
Ejemplo 2.5.2:
Codificador de 8 a 3
A[0]
Y[0]
Y[1]
Y[2]
A[7]
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 48/76
Codificadores/decodificadores
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY cod_8_3 IS
PORT ( A : IN std_logic_vector(7 DOWNTO 0);
Y : OUT std_logic_vector(2 DOWNTO 0));
END cod_8_3;
ARCHITECTURE Behavioral OF cod_8_3 IS
BEGIN
PROCESS(A)
BEGIN
CASE A IS
WHEN "00000001" => Y <= "000";
WHEN "00000010" => Y <= "001";
WHEN "00000100" => Y <= "010";
WHEN "00001000" => Y <= "011";
WHEN "00010000" => Y <= "100";
WHEN "00100000" => Y <= "101";
WHEN "01000000" => Y <= "110";
WHEN "10000000" => Y <= "111";
WHEN OTHERS => Y <= "---";
END CASE;
END PROCESS;
END Behavioral;
Ejemplo 2.5.4:
Codificador de 8 a 3
con indiferencias
A[0]
Y[0]
Y[1]
Y[2]
A[7]
25
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 49/76
Codificadores/decodificadores
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY hex2led IS
PORT ( enable : IN std_logic;
HEX : IN std_logic_vector (3 DOWNTO 0);
LED : OUT std_logic_vector (6 DOWNTO 0));
END hex2led;
ARCHITECTURE Behavioral OF hex2led IS
BEGIN
PROCESS (enable, HEX)
BEGIN
IF (enable = 1) THEN
LED <= "1111111"; -- apaga los 7 segmentos
ELSE
CASE HEX IS --n segmento:6543210
WHEN "0001" => LED <= "1111001"; --1
WHEN "0010" => LED <= "0100100"; --2
WHEN "0011" => LED <= "0110000"; --3
WHEN "0100" => LED <= "0011001"; --4
WHEN "0101" => LED <= "0010010"; --5 -- 0
WHEN "0110" => LED <= "0000010"; --6 -- ---
WHEN "0111" => LED <= "1111000"; --7 -- 5 | | 1
WHEN "1000" => LED <= "0000000"; --8 -- --- <- 6
WHEN "1001" => LED <= "0010000"; --9 -- 4 | | 2
WHEN "1010" => LED <= "0001000"; --A -- ---
WHEN "1011" => LED <= "0000011"; --B -- 3
WHEN "1100" => LED <= "1000110"; --C
WHEN "1101" => LED <= "0100001"; --D
WHEN "1110" => LED <= "0000110"; --E
WHEN "1111" => LED <= "0001110"; --F
WHEN OTHERS => LED <= "1000000"; --0
END CASE;
END IF;
END PROCESS;
END BEHAVIORAL;
Ejemplo 2.5.3:
Convertidor de
cdigo hexadecimal
a 7 segmentos
LED[0]
HEX[0]
enable
HEX[3] LED[6]
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 50/76
Codificadores con prioridad
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY codific_prior IS
PORT ( A : IN std_logic_vector(7 DOWNTO 0);
valid : OUT std_logic;
Y : OUT std_logic_vector(2 DOWNTO 0));
END codific_prior;
ARCHITECTURE Behavioral OF codific_prior IS
BEGIN
PROCESS (A)
BEGIN
valid <= '1';
IF (A(7)='1') THEN
Y <= "111";
ELSIF (A(6)='1') THEN
Y <= "110";
ELSIF (A(5)='1') THEN
Y <= "101";
ELSIF (A(4)='1') THEN
Y <= "100";
ELSIF (A(3)='1') THEN
Y <= "011";
ELSIF (A(2)='1') THEN
Y <= "010";
ELSIF (A(1)='1') THEN
Y <= "001";
ELSIF (A(0)='1') THEN
Y <= "000";
ELSE
Y <= "---";
valid <= '0';
END IF;
END PROCESS;
END Behavioral;
Ejemplo 2.5.5:
Codificador con
prioridad de 8 a 3
A[0]
Y[0]
Y[1]
Y[2]
A[7] valid
26
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 51/76
Comparadores
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY comparador IS
GENERIC(n : positive := 8);
PORT ( enable : IN std_logic;
A : IN std_logic_vector(n-1 DOWNTO 0);
B : IN std_logic_vector(n-1 DOWNTO 0);
AmenorB : OUT std_logic;
AmayorB : OUT std_logic;
AigualB : OUT std_logic);
END comparador;
ARCHITECTURE Behavioral OF comparador IS
BEGIN
PROCESS (enable, A, B)
BEGIN
IF (enable = '0') THEN
AmenorB <= '0'; AmayorB <= '0'; AigualB <= '0';
ELSE
IF ( A < B ) THEN
AmenorB <= '1';
ELSE
AmenorB <= '0';
END IF;
IF ( A > B ) THEN
AmayorB <= '1';
ELSE
AmayorB <= '0';
END IF;
IF ( A = B ) THEN
AigualB <= '1';
ELSE
AigualB <= '0';
END IF;
END IF;
END PROCESS;
END Behavioral;
Ejemplo 2.5.6:
Comparador de n
bits con entrada de
habilitacin
A AmenorB
AmayorB
AigualB B
enable
n
n
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 52/76
Buffers triestado
-- buffer triestado de tamano arbitrario
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY triestado IS
GENERIC(n : positive := 8);
PORT(enable: IN std_logic;
din : IN std_logic_vector(n-1 DOWNTO 0);
dout : OUT std_logic_vector(n-1 DOWNTO 0));
END triestado;
ARCHITECTURE Behavioral OF triestado IS
BEGIN
PROCESS (enable, din)
BEGIN
IF (enable='1') THEN
dout <= din;
ELSE
dout <= (OTHERS =>'Z');
END IF;
END PROCESS;
END Behavioral;
Ejemplo 2.5.7:
Buffer triestado de
tamao arbitrario
din dout
enable
n n
27
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 53/76
Desplazadores y rotadores
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY desplazador IS
PORT ( A : IN std_logic_vector(7 DOWNTO 0);
sel : IN std_logic_vector(1 DOWNTO 0);
Y : OUT std_logic_vector(7 DOWNTO 0));
END desplazador;
ARCHITECTURE Behavioral OF desplazador IS
BEGIN
PROCESS (A, sel)
BEGIN
CASE sel IS
WHEN "00" =>
Y <= A;
WHEN "01" =>
Y(7 DOWNTO 1) <= A(6 DOWNTO 0);
Y(0) <= 0;
WHEN "10" =>
Y(7 DOWNTO 2) <= A(5 DOWNTO 0);
Y(1 DOWNTO 0) <= (OTHERS=>0);
WHEN OTHERS =>
Y(7 DOWNTO 3) <= A(4 DOWNTO 0);
Y(2 DOWNTO 0) <= (OTHERS=>0);
END CASE;
END PROCESS;
END Behavioral;
Ejemplo 2.5.9:
Desplazador lgico a
la izquierda
A Y
sel
8 8
2
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 54/76
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY desplazador IS
PORT ( A : IN std_logic_vector(7 DOWNTO 0);
sel : IN std_logic_vector(1 DOWNTO 0);
Y : OUT std_logic_vector(7 DOWNTO 0));
END desplazador;
ARCHITECTURE Behavioral OF desplazador IS
BEGIN
PROCESS (A, sel)
BEGIN
CASE sel IS
WHEN "00" =>
Y <= A;
WHEN "01" =>
Y(7 DOWNTO 1) <= A(6 DOWNTO 0);
Y(0) <= 0;
WHEN "10" =>
Y(7 DOWNTO 2) <= A(5 DOWNTO 0);
Y(1 DOWNTO 0) <= (OTHERS=>0);
WHEN OTHERS =>
Y(7 DOWNTO 3) <= A(4 DOWNTO 0);
Y(2 DOWNTO 0) <= (OTHERS=>0);
END CASE;
END PROCESS;
END Behavioral;
A Y
sel
Desplazadores y rotadores
Ejemplo 2.5.9:
Desplazador lgico a
la izquierda
Y <= A sor 2 Y <= A(1 DOWNTO 0) & A(7 DOWNTO 2); Rotar a la Drcha.
Y <= A rol 2 Y <= A(5 DOWNTO 0) & A(7 DOWNTO 6); Rotar a la Izada.
Y <= A sra 2 Y <= A(7) & A(7) & A(7 DOWNTO 2); Desplazam. Aritmtico a la Drcha.
Y <= A sla 2 Y <= A(5 DOWNTO 0) & A(0) & A(0); Desplazam. Aritmtico a la Izqda.
Y <= A srl 2 Y <= 00 & A(7 DOWNTO 2); Desplazam. Lgico a la Drcha.
Y <= A sll 2 Y <= A(5 DOWNTO 0) & 00; Desplazam. Lgico a la Izqda.
Sintaxis 2* Sintaxis 1 Operacin
*En realidad, esta sintaxis slo permite operar sobre tipos de datos definidos como bit_vector, y no sobre std_logic_vector,
como veremos ms adelante. No obstante, la biblioteca numeric_std sobrecarga estos operadores para que tambin puedan
utilizarse con sus tipos de datos, signed y unsigned.
28
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 55/76
Unidades aritmtico-lgicas
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.numeric_std.all;
ENTITY alu IS
GENERIC( n : positive := 8);
PORT ( cod_op : IN std_logic_vector(2 DOWNTO 0);
datoA : IN std_logic_vector(n-1 DOWNTO 0);
datoB : IN std_logic_vector(n-1 DOWNTO 0);
resultado: OUT std_logic_vector(n-1 DOWNTO 0));
END alu;
ARCHITECTURE Behavioral OF alu IS
BEGIN
PROCESS (cod_op, datoA, datoB)
BEGIN
CASE cod_op IS
--operaciones logicas
WHEN "000" => resultado <= datoA;
WHEN "001" => resultado <= datoA AND datoB;
WHEN "010" => resultado <= datoA OR datoB;
WHEN "011" => resultado <= datoA XOR datoB;
--operaciones aritmeticas
WHEN "100" => resultado <= std_logic_vector(signed(datoA) + 1);
WHEN "101" => resultado <= std_logic_vector(signed(datoA) + signed(datoB));
WHEN "110" => resultado <= std_logic_vector(signed(datoA) - signed(datoB));
WHEN OTHERS =>resultado <= std_logic_vector(signed(datoA) - 1);
END CASE;
END PROCESS;
END Behavioral;
Ejemplo 2.5.10:
Unidad aritmtico-
lgica trivial
datoA
resultado
cod_op
datoB
n
n
n
3
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 56/76
Sumario
Introduccin
Descripcin de componentes combinacionales RTL
Descripcin de componentes secuenciales RTL
Resumen
29
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 57/76
Biestables
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY milatch IS
GENERIC( n : positive := 8);
PORT (enable : IN std_logic;
din : IN std_logic_vector(n-1 DOWNTO 0);
dout : OUT std_logic_vector(n-1 DOWNTO 0));
END milatch;
ARCHITECTURE Behavioral OF milatch IS
BEGIN
PROCESS (enable, din)
BEGIN
IF (enable = '1') THEN
dout <= din;
END IF;
END PROCESS;
END Behavioral;
Ejemplo 2.6.1:
Descripcin de
latches tipo D
sincronizados
(gated D latch)
din dout
enable
n n
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 58/76
Biestables
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY biestableD IS
PORT ( clk : IN std_logic;
din : IN std_logic;
dout : OUT std_logic);
END biestableD;
ARCHITECTURE Behavioral OF biestableD IS
BEGIN
PROCESS (clk)
BEGIN
IF (clk'EVENT AND clk = '1') THEN
dout <= din;
END IF;
END PROCESS;
END Behavioral;
Ejemplo 2.6.2:
Descripcin de un
flip-flop tipo D
din
clk
dout
30
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 59/76
Biestables
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY biestableD IS
PORT ( clk : IN std_logic;
reset: IN std_logic;
din : IN std_logic;
dout : OUT std_logic);
END biestableD;
ARCHITECTURE Behavioral OF biestableD IS
BEGIN
PROCESS (clk)
BEGIN
IF (clk'EVENT AND clk = '1') THEN
IF (reset = '1') THEN
dout <= '0';
ELSE
dout <= din;
END IF;
END IF;
END PROCESS;
END Behavioral;
Ejemplo 2.6.3:
Descripcin de un
flip-flop tipo D con
reset sncrono
din
clk
dout
reset
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 60/76
Biestables
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY biestableD IS
PORT ( clk : IN std_logic;
reset: IN std_logic;
din : IN std_logic;
dout : OUT std_logic);
END biestableD;
ARCHITECTURE Behavioral OF biestableD IS
BEGIN
PROCESS (clk, reset)
BEGIN
IF (reset = '1') THEN
dout <= '0';
ELSIF (clk'EVENT AND clk = '1') THEN
dout <= din;
END IF;
END PROCESS;
END Behavioral;
Ejemplo 2.6.4:
Descripcin de un
flip-flop tipo D con
reset asncrono
din
clk
dout
reset
31
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 61/76
Biestables
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY biestableD IS
PORT ( clk : IN std_logic;
enable : IN std_logic;
din : IN std_logic;
dout : OUT std_logic);
END biestableD;
ARCHITECTURE Behavioral OF biestableD IS
BEGIN
PROCESS (clk)
BEGIN
IF (clk'EVENT AND clk = '1') THEN
IF (enable = '1') THEN
dout <= din;
END IF;
END IF;
END PROCESS;
END Behavioral;
Ejemplo 2.6.5:
Descripcin de un
flip-flop tipo D con
habilitacin de reloj
din
clk
dout
enable
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 62/76
Registros de desplazamiento
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY reg_desplaza IS
GENERIC (n : positive := 8);
PORT ( clk : IN std_logic;
reset : IN std_logic;
load : IN std_logic;
data : IN std_logic_vector(n-1 DOWNTO 0);
sin : IN std_logic;
sout : OUT std_logic);
END reg_desplaza;
ARCHITECTURE Behavioral OF reg_desplaza IS
SIGNAL reg: std_logic_vector (n-1 DOWNTO 0);
BEGIN
PROCESS (reset, clk)
BEGIN
IF (reset='1') THEN
reg <= (OTHERS=>'0');
ELSIF (clk'EVENT AND clk='1') THEN
IF (load='1') THEN
reg <= data;
ELSE
reg <= reg(n-2 DOWNTO 0) & sin; --desplaza a izquierdas
END IF;
END IF;
END PROCESS;
sout <= reg(n-1);
END Behavioral;
Ejemplo 2.6.8:
Registro de
desplazamiento con
reset asncrono,
carga sncrona, y
entrada/salida serie
data
clk
sout
reset
load
sin
n
32
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 63/76
Contadores
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
ENTITY contador IS
GENERIC( n : positive := 8);
PORT ( clk, reset, ce, load, dir : IN std_logic;
din : IN std_logic_vector(n-1 DOWNTO 0);
count : OUT std_logic_vector(n-1 DOWNTO 0));
END contador;
ARCHITECTURE Behavioral OF contador IS
SIGNAL count_aux: unsigned (n-1 DOWNTO 0);
BEGIN
PROCESS (clk, reset)
BEGIN
IF reset='1' THEN
count_aux <= (OTHERS => '0');
ELSIF clk='1' AND clk'EVENT THEN
IF load='1' THEN
count_aux <= unsigned(din);
ELSE
IF ce='1' THEN
IF dir='1' THEN
count_aux <= count_aux + 1;
ELSE
count_aux <= count_aux - 1;
END IF;
END IF;
END IF;
END IF;
END PROCESS;
count <= std_logic_vector(count_aux);
END Behavioral;
Ejemplo 2.6.9:
Contador sncrono,
reset asncrono,
entradas de carga y
habilitacin sncronas
din
clk
count
reset
ce
load
dir
n
n
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 64/76
Tema:
Sntesis de alto nivel
Universidad Politcnica de Cartagena
Departamento de Electrnica, Tecnologa de Computadoras y Proyectos
Titulacin: Ingeniero de Telecomunicacin
Asignatura: Arquitectura y Tecnologa de Computadores
33
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 65/76
Desarrollo de contenidos
Sntesis de alto nivel
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 66/76
Sumario
Introduccin
Inferencia de memoria ROM
Inferencia de memoria RAM
Inferencia de Mquinas de Estado
34
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 67/76
Memoria
--Infiere memoria ROM de lectura asincrona
--(por ello en Xilinx se implementara, por defecto, como memoria
distribuida)
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity rom_asinc is
Generic (data_width : integer := 8;
address_width : integer := 5;
mem_depth : integer := 32);
Port(address : in STD_LOGIC_VECTOR(address_width-1 downto 0);
data_out : out STD_LOGIC_VECTOR(data_width-1 downto 0) );
end rom_asinc;
architecture Behavioral of rom_asinc is
type rom_type is array (mem_depth-1 downto 0) of
STD_LOGIC_VECTOR (data_width-1 downto 0);
constant rom : rom_type :=(
"10001010", "11110000", "10101010", "00001111", -- 3
"01010101", "00000000", "11111111", "11001100", -- 7
"01010101", "00000000", "11111111", "11001100", -- 11
"01010101", "00000000", "11111111", "11001100", -- 15
"10001010", "11110000", "10101010", "00001111", -- 19
"01010101", "00000000", "11111111", "11001100", -- 23
"01010101", "00000000", "11111111", "11001100", -- 27
"01010101", "00000000", "11111111", "11001100" ); --31
begin
data_out <= rom(to_integer(unsigned(address)));
end Behavioral;
Ejemplo 8.1: ROM
de lectura asncrona
address
data_out
m n
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 68/76
Memoria
--Infiere memoria ROM de lectura sincrona
--(por ello en Xilinx se implementara, por defecto, como block
RAM)
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity rom_sinc is
Generic (data_width : integer := 8;
address_width : integer := 5;
mem_depth : integer := 32);
Port(address: in STD_LOGIC_VECTOR(address_width-1 downto 0);
clk : in STD_LOGIC;
data_out : out STD_LOGIC_VECTOR(data_width-1 downto 0) );
end rom_sinc;
architecture Behavioral of rom_sinc is
type rom_type is array (mem_depth-1 downto 0) of
STD_LOGIC_VECTOR (data_width-1 downto 0);
constant rom : rom_type :=(
"10001010", "11110000", "10101010", "00001111", -- 3
"01010101", "00000000", "11111111", "11001100", -- 7
"01010101", "00000000", "11111111", "11001100", -- 11
"01010101", "00000000", "11111111", "11001100", -- 15
"10001010", "11110000", "10101010", "00001111", -- 19
"01010101", "00000000", "11111111", "11001100", -- 23
"01010101", "00000000", "11111111", "11001100", -- 27
"01010101", "00000000", "11111111", "11001100" ); --31
begin
rd: process(clk)
begin
if (rising_edge(clk)) then
data_out <= rom(to_integer(unsigned(address)));
end if;
end process;
end Behavioral;
Ejemplo 8.2: ROM
de lectura sncrona
address
clk
data_out
m n
35
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 69/76
Sumario
Introduccin
Inferencia de memoria ROM
Inferencia de memoria RAM
Inferencia de Mquinas de Estado
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 70/76
Memoria
--Infiere RAM de escritura sincrona pero lectura asincrona
--(por ello en Xilinx se implementara, por defecto, como
distributed RAM)
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity ram_asinc_read is
Generic (data_width : integer := 8;
address_width : integer := 5;
mem_depth : integer := 32);
Port(data_in : in STD_LOGIC_VECTOR(data_width-1 downto 0);
we, clk : in STD_LOGIC;
address : in STD_LOGIC_VECTOR(address_width-1 downto 0);
data_out : out STD_LOGIC_VECTOR(data_width-1 downto 0) );
end ram_asinc_read;
architecture Behavioral of ram_asinc_read is
type mem_type is array (mem_depth-1 downto 0) of
STD_LOGIC_VECTOR (data_width-1 downto 0);
signal mem : mem_type;
begin
wr: process(clk, we, address)
begin
if (rising_edge(clk)) then
if (we = '1') then
mem(to_integer(unsigned(address))) <= data_in;
end if;
end if;
end process;
data_out <= mem(to_integer(unsigned(address)));
end Behavioral;
Ejemplo 8.3: RAM de
escritura sncrona y
lectura asncrona
address
clk
data_out
m n
we
data_in
m
36
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 71/76
Sumario
Introduccin
Inferencia de memoria ROM
Inferencia de memoria RAM
Inferencia de Mquinas de Estado
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 72/76
Mquinas de Estado
Ejemplo 8.8: FSM
utilizando dos
procesos
Se pretende disear el algoritmo de control de un
robot explorador para una misin en Marte. El robot
ir tomando muestras de la superficie del planeta
mientras se desplaza. Para controlar su movimiento, el
frontal del robot posee un sensor (x) que detecta
obstculos en la trayectoria actual cuando estn a
menos de una distancia determinada, y dos salidas (zi
y zd) que controlan el movimiento de sendas orugas.
En ausencia de obstculos (x=0), el robot debe
avanzar en la direccin en que se encuentre orientado
(zizd=00). Cada vez que detecte un obstculo
(x=1), el robot deber girar para evitarlo y
continuar la exploracin. En cada obstculo el giro
ser a derechas (zizd=01) o izquierdas (zizd=10)
de forma alternativa, con el fin de evitar un posible
movimiento en crculos y abarcar una mayor zona de
exploracin.
0 1
A A/00 B/01
B C/00 B/01
C C/00 D/10
D A/00 D/10
Tabla de Estados
0 1
00 00/00 01/01
01 11/00 01/01
11 11/00 10/10
10 00/00 10/10
Tabla de Transiciones
A
C
B
D
0/00
1/01
1/10
0/00
0/00
0/00
1/10
1/01
Diagrama de Estados
37
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 73/76
Mquinas de Estado
...
PROCESS (sreg, xin)
BEGIN
CASE sreg IS
WHEN STATE0 =>
IF ( xin='1' ) THEN
next_sreg<=STATE1;
zi<='0'; zd<='1';
ELSE
next_sreg<=STATE0;
zi<='0'; zd<='0';
END IF;
WHEN STATE1 =>
IF ( xin='0' ) THEN
next_sreg<=STATE2;
zi<='0'; zd<='0';
ELSE
next_sreg<=STATE1;
zi<='0'; zd<='1';
END IF;
WHEN STATE2 =>
IF ( xin='1' ) THEN
next_sreg<=STATE3;
zi<='1'; zd<='0';
ELSE
next_sreg<=STATE2;
zi<='0'; zd<='0';
END IF;
WHEN STATE3 =>
IF ( xin='0' ) THEN
next_sreg<=STATE0;
zi<='0'; zd<='0';
ELSE
next_sreg<=STATE3;
zi<='1'; zd<='0';
END IF;
END CASE;
END PROCESS;
END BEHAVIORAL;
Ejemplo 8.8: FSM
utilizando dos
procesos
--dos procesos, salidas combinacionales
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY ROBOT IS
PORT ( CLK,RESET,xin : IN std_logic;
zd,zi : OUT std_logic);
END;
ARCHITECTURE BEHAVIORAL OF ROBOT IS
TYPE type_sreg IS (STATE0,STATE1,STATE2,STATE3);
SIGNAL sreg, next_sreg : type_sreg;
BEGIN
PROCESS (CLK, RESET)
BEGIN
IF ( RESET='1' ) THEN
sreg <= STATE0;
ELSIF CLK='1' AND CLK'event THEN
sreg <= next_sreg;
END IF;
END PROCESS;
...
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 74/76
Tema:
VHDL para simulacin
Universidad Politcnica de Cartagena
Departamento de Electrnica, Tecnologa de Computadoras y Proyectos
Titulacin: Ingeniero de Telecomunicacin
Asignatura: Arquitectura y Tecnologa de Computadores
38
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 75/76
Desarrollo de contenidos
VHDL para simulacin
Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 76/76
Sumario
Introduccin
Tipos de retardo en la asignacin a seal
Tipos de simulaciones
Tipos de simuladores
Diseo de bancos de prueba (testbenches)