Professional Documents
Culture Documents
INTRODUCCION A VHD(VHDL)
Parte de este material está basado en fuentes de Internet.
Objetivos
Generalidades de VHDL
VHDL es un lenguaje textual de alto nivel que se utiliza para la descripción del
hardware de los sistemas digitales.
Ventajas:
– Proceso de desarrollo más confiable y automatizado
– Reducción de costo y tiempo de salida al mercado
Limitaciones de VHDL
OPERACIÓN SIMBOLO
NOT Not
AND And
OR Or
XOR Xor
COMENTARIOS
-- comentario
-------------------------------------------------------------------------------------------------
Ejemplo:
SINTAXIS DE VHDL
Entidad y Arquitectura – Tipos de datos
Señales y variables – Asignaciones – Procesos
Sentencia IF ELSE – Sentencia CASE
Entidades y Arquitecturas
Entidad
Arquitectura
• Cada señal debe tener un tipo de dato asociado, que se indica cuando la señal
es declarada. Tipos diferentes de datos no pueden asignarse unos a otros.
Todos los puertos, señales y variables deben ser de algún tipo de dato. Existen
tipos ya construidos pero también pueden crearse nuevos.
Buses
• Bus completo
– pebbles <= “11111111”;
• Un bit de un bus
– dino (3) <= ‘1’;
• Una parte del bus
– SIGNAL picapiedras: bit_vector (7 downto 0);
– picapiedras (3 downto 2) <= “11”;
• Encadenación
– SIGNAL mas: bit_vector (8 downto 0);
– mas <= a(1) & b(3 downto 0) & ‘0’ & “010”;
• Agregado
– mas (3 downto 0) <= ( a (1), b(3), ‘0’, ‘1’);
– maz <= ( 3=> ‘1’, 1 downto 0 => ‘1’, 2 => L );
– max <= (3=> ‘1’, OTHERS => N );
La dirección del subrango debe ser igual como en la declaración del vector
Tipos Enumerados
• Simple
a <= r or t;
b <= ((r or t) and not (g xor h));
• Condicional
q <= ‘0’ WHEN clr = ‘0’ ELSE
‘1’ WHEN set = ‘1’ ELSE
‘X’;
• Selectiva
WITH sel SELECT
q <= a WHEN ‘0’,
b WHEN ‘1’;
Estas dos últimas asignaciones no se emplean dentro de los procesos.
Especifican los valores de las señales para cualquier combinación de las
entradas.
La síntesis crea puertas y conexiones lógicas. No se crean latches ni flipflops.
Asignación múltiple
• Cuando más una señal recibe dos asignaciones de señales separadas, se dice
que es manejada por múltiples fuentes.
• En esos casos, se necesita una Función de Resolución. Si no existe una
función de resolución la asignación múltiple resulta ilegal.
• El tipo std_ulogic no soporta asignación múltiple, pero si el tipo std_logic.
Asignación simple
Compuertas lógicas:
entity compuertas is
Port (a : in STD_LOGIC;
b: in STD_LOGIC;
not_a : out STD_LOGIC;
a_and_b : out STD_LOGIC;
a_or_b : out STD_LOGIC;
a_xor_b : out STD_LOGIC;
a_nor_b : out STD_LOGIC;
a_nand_b : out STD_LOGIC);
end compuertas;
architecture Behavioral of compuertas is
begin
--esta es la parte de programación aquí esta la esencia del programa
a_and_b <= a and b;
not_a <= not a;
a_or_b <= a or b;
a_xor_b <= a xor b;
a_nor_b <=a nor b;
a_nand_b<= a nand b;
--hasta aquí
end Behavioral;
Asignación Condicional
• Lista una serie de expresiones que son asignadas a una señal, luego de una
evaluación positiva de una o más expresiones booleanas. Cada expresión
booleana se valida en el orden escrito.
Asignación Selectiva
ENTITY multiplexor IS
PORT (
d0, d1, d2, d3: IN BIT;
s: IN INTEGER RANGE 0 TO 3;
q: OUT BIT);
END multiplexor;
ARCHITECTURE flujo OF multiplexor IS
BEGIN
WITH s SELECT
output <= d0 WHEN 0,
d1 WHEN 1,
d2 WHEN 2,
d3 WHEN 3;
end flujo
Procesos
La Sentencia Process
PROCESS (a, b, c, d)
BEGIN
-- sentencia secuencial #1
-- ...
-- sentencia secuencial #N
END PROCESS;
PROCESS
BEGIN
WAIT condición
-- sentencia secuencial #1
-- ...
-- sentencia secuencial #N
END PROCESS;
entity multiplexor is
Port (selector : in STD_LOGIC_VECTOR (1 downto 0);
entrada1 : in STD_LOGIC;
entrada2 : in STD_LOGIC;
entrada3 : in STD_LOGIC;
entrada4 : in STD_LOGIC;
salida: out STD_LOGIC);
end multiplexor;
architecture Behavioral of multiplexor is
begin
process (selector,entrada1,entrada2,entrada3,entrada4)
begin
case selector is
when "00" => salida <= entrada1;
when "01" => salida <= entrada2;
when "10" => salida <= entrada3;
when "11" => salida <= entrada4;
when others => salida <= '0';
end case;
end process;
end Behavioral;
PALABRAS RESERVADAS
Para iniciar el ISE, doble clic en el icono que se creo en el escritorio al instalar
el programa:
O se va por:
FIGURA #5
FIGURA # 6
1. Clic en “finish” para concluir la creación del proyecto. Nos aparecerá una
ventana como la FIGURA # 12:
FIGURA # 12
entity Multiplexor is
Port (salida : out STD_LOGIC;
entrada1 : in STD_LOGIC;
entrada2 : in STD_LOGIC;
entrada3 : in STD_LOGIC;
entrada4 : in STD_LOGIC;
selector : in STD_LOGIC_VECTOR (1 downto 0));
end Multiplexor;
architecture Behavioral of Multiplexor is
begin
end Behavioral;
process (selector,entrada1,entrada2,entrada3,entrada4)
begin
case selector is
when "00" => salida <= entrada1;
when "01" => salida <= entrada2;
when "10" => salida <= entrada3;
when "11" => salida <= entrada4;
when others => salida <= '0';
end case;
end process;
entity multiplexor is
Port ( selector : in STD_LOGIC_VECTOR (1 downto 0);
entrada1 : in STD_LOGIC;
entrada2 : in STD_LOGIC;
entrada3 : in STD_LOGIC;
entrada4 : in STD_LOGIC;
salida : out STD_LOGIC);
end multiplexor;
architecture Behavioral of multiplexor is
begin
process (selector,entrada1,entrada2,entrada3,entrada4)
begin
case selector is
when "00" => salida <= entrada1;
when "01" => salida <= entrada2;
when "10" => salida <= entrada3;
when "11" => salida <= entrada4;
when others => salida <= '0';
end case;
end process;
end Behavioral;
DESCRIPCION DEL ENCABEZAMIENTO DE LOS ARCHIVOS
Esto es lo que se despliega al darle clic en el “+” (FIGURA # 14), para mirar
o chequear la sintaxis damos clic en la opción “Check Syntax”, esto nos dirá
donde están los errores para poder corregirlos.
FIGURA # 14
La FIGURA # 15 es la que nos muestra donde sale los comentarios de la
compilación:
FIGURA # 15
1. COMPUERTAS LOGICAS:
----------------------------------------------------------------------------------
-- Company: eafit
-- Engineer: monitoria
--
-- Create Date: 13:33:58 11/21/2006
-- Design Name:
-- Module Name: compuertas - Behavioral
-- Project Name: tutorial
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity compuertas is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
not_a : out STD_LOGIC;
a_and_b : out STD_LOGIC;
a_or_b : out STD_LOGIC;
a_xor_b : out STD_LOGIC;
a_nor_b : out STD_LOGIC;
a_nand_b : out STD_LOGIC);
end compuertas;
entity decodificador is
Port ( a1 : in STD_LOGIC;
b1 : in STD_LOGIC;
c1 : in STD_LOGIC;
d1 : in STD_LOGIC;
a : out STD_LOGIC;
b : out STD_LOGIC;
c : out STD_LOGIC;
d : out STD_LOGIC;
e : out STD_LOGIC;
f : out STD_LOGIC;
g : out STD_LOGIC);
end decodificador;
end Behavioral;
3. DECODIFICADOR 7 SEGMENTOS REALIZADO POR PROCESOS:
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 10:33:33 11/22/2006
-- Design Name:
-- Module Name: decodificador2 - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity decodificador2 is
Port ( clock : in STD_LOGIC;
entrada : in STD_LOGIC_VECTOR (3 downto 0);
salida : out STD_LOGIC_VECTOR (7 downto 0));
end decodificador2;
----------------------------------------------------------------------------------
-- Company: eafit
-- Engineer: monitora
--
-- Create Date: 11:42:57 11/22/2006
-- Design Name:
-- Module Name: dulces - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity dulces is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
c : in STD_LOGIC;
salida : out STD_LOGIC);
end dulces;
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 16:13:13 11/22/2006
-- Design Name:
-- Module Name: dulces - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity dulces is
Port ( clock : in STD_LOGIC;
entrada : in STD_LOGIC_VECTOR (2 downto 0);
salida : out STD_LOGIC);
end dulces;
! Chip XC3S200
Procedimiento