Академический Документы
Профессиональный Документы
Культура Документы
HDLs
Generalidades
Características, ventajas
Usos típicos
Lenguaje VHDL
Generalidades
Origen, evolución y futuro
Estilos de diseño
Modelos por Comportamiento
Puertos, Tipos, librerías
Sintaxis. operadores
Señales, constantes y variables
En esta serie de diapositivas se han Entidad y arquitectura
tomado, total o parcialmente textos o Descripción de comportamiento usando ecuaciones y asignaciones simples, tablas de
ejemplos de los siguientes autores, Ing. verdad y asignaciones seleccionadas, señales, flujo de datos, tablas de verdad y puntero
(paquete UNSIGNED), función de resolución
Jorge Sinderman, Ing. Eduardo Boemo y su
equipo de la UAM y la Ing. Susana Canel, Manejo de señales de salida bidireccionales y 3-estados
Descripción de dispositivos “colector abierto”
Ejemplos
• El lenguaje debe estar normalizado, de manera que las Los HDLs sirven para modelar circuitos, permiten
descripciones realizadas con ellos sean transportables. expresar ideas .
• Tener léxico y sintaxis similar a los de un lenguaje de Los modelos se pueden simular,
programación, para facilitar su aprendizaje a quienes para comprobar si corresponden
ya tienen experiencia en el uso de estos lenguajes. if A=“1” and B=“1” con la funcionalidad deseada
• Permitir describir los circuitos con distintos niveles de Then S <= ‘1’; A
abstracción y jerarquía else S <= ‘0’; B
• Disponer de herramientas informáticas que faciliten: end if:
S
• simular la operación del circuito descripto para
determinar si su comportamiento es el esperado Los modelos se pueden sintetizar, para crear
• sintetizar un circuito real a partir de su descripción, un circuito que funcione con la funcionalidad
empleando algún dispositivo reconfigurable internamente deseada
como los llamados CPLD y FPGA.
A
S
B
Ing. Daniel Acerbi © - 2014 7 Ing. Daniel Acerbi © - 2014 8
B end if:
0 ns 10 ns
En este caso el objetivo es 20 ns
simular el circuito para A
comprobar su funcionalidad
adecuada y que se ajusta a las B
especificaciones de la
descripción S
Departamento de la
Defensa de los E.U.A.
Desarrollo de Lenguajes para
Descripción de Hardware
Very High Speed Integrated
Programa: Very High Speed
Integrated Circuits (VHSIC) Hardware Description Language
1980
1970’s
IDL/IBM, HDL/TI, ZEUS/GE
Desarrollo en Área Industrial 1983 VHDL Desarrollo:
AHPL, DDL, CDL, ISPS IBM, Texas Instruments e
Desarrollo en Área Académica Intermetrics
1987 VHDL’87
Estándar IEEE -1076
1980’s
AHDL, ABEL, CUPL
VHDL y Verilog
1993 VHDL’93
Estándar IEEE -1164
Sintesis
Problema
Circuito a diseñar
Una vez que uno ha escrito el código, el mismo necesita ser compilado.
El compilador VHDL, analiza el código por si tuviera errores de sintaxis y
también verifica que sea compatible con otros módulos de los que
depende. Crea la información interna necesaria para que funcione el
simulador .
El simulador VHDL le permite aplicar entradas a su diseño y observar las
CPLD o FPGA
salidas, para ver si se cumplen las premisas del diseño. Se pueden armar
Testbench para facilitar el chequeo del diseño .
El proceso de sintesis baja el diseño a la CPLD o a la FPGA .
Simulacion
Código Ing. Daniel Acerbi © - 2014 15 Ing. Daniel Acerbi © - 2014 16
Entidad
Library o Libreria: Las Librerias se deben declarar , hay varios
tipos y se deben colocar todas las que se van a utilizar en el
programa.
Entity o Entidad: Se describen las entradas y salidas del sistema
digital o circuito lógico a describir. Arquitectura
Architecture: Contiene el código propio en VHDL y describe
como funciona el sistema o el circuito lógico.
Ing. Daniel Acerbi © - 2014 23 Ing. Daniel Acerbi © - 2014 24
31 32
Ing. Daniel Acerbi © - 2014
Es necesario conocer aquellos datos que son • Pero la norma también define dos subtipos, que no son
sino restricciones al rango de valores que puede tomar el
sintetizables .
dato:
Los tipos de datos son : • subtype NATURAL is range 0 to +2147483647;
• Escalares • subtype POSITIVE is range 1 to +2147483647;
• Los números enteros
• Los números se expresan, por defecto, en sistema
• Los datos físicos
decimal. Sin embargo, existen formas de definir los
• Los enumerados
• Los números reales
números en otras bases. Por ejemplo, el decimal 213
• Compuestos puede expresarse en binario como 2#11010101# o en
hexadecimal 16#D5#.
Ing. Daniel Acerbi © - 2014 33 Ing. Daniel Acerbi © - 2014 34
• Los valores de los arreglos unidimensionales (por ejemplo, una • Los objetos que contienen datos deben ser declarados. Estos
cadena de caracteres) deben siempre estar encerrados entre objetos son de las siguientes clases:
comillas dobles. Por ejemplo: “VHDL”. • Entradas
• Los arreglos de bits (bit_vector) son un caso particular de • Salidas
cadenas de caracteres en los cuales estos sólo pueden ser 0 ó 1.
Por ejemplo: “01011100”. Por comodidad, las cadenas de bits • Señales
también puede expresarse en hexadecimal, anteponiendo al • Variable
entrecomillado una X. Así, en el ejemplo anterior, usando • Constantes
notación hexadecimal, habríamos podido escribir X“5C”.
• Algo similar puede decirse de las cadenas de std_logic • La declaración debe indicar de qué tipo son y de ser un
(std_logic_vector), pero que sólo pueden expresarse en arreglo, suministrar el rango usando las formas
hexadecimal si sus elementos son ceros y unos exclusivamente. X downto Y o Y to X según sea X > Y o no.
• También puede haber arreglos bidimensionales. Por ejemplo, una • Las declaraciones deben terminar con punto y coma (;).
matriz bidimensional de elementos std_logic se podría definir
como: • A las señales, constantes y variables en la misma declaración
type matriz is array (natural range <>) of std_logic_vector; se les puede asignar un valor (en el caso de señales y
variables, su valor inicial).
Paquetes
Ing. Daniel Acerbi © - 2014 43 Ing. Daniel Acerbi © - 2014 44
En una primera etapa describiremos la Arquitectura Para asignar un valor a un objeto contenedor de datos se
(Architecture) por Comportamiento. usan sentencias de los siguientes tipos:
Esta descripción básica se realiza utilizando la Si el objeto es una salida o una señal
ecuación del circuito lógico o su tabla de verdad. A<= Expresión;
Es comun utilizar, en esta etapa básica de la Si el objeto es una variable o una constante
descripción, Asignaciónes Simples para asignarle A:= Expresión;
valores a los Objetos.
Si el objeto es una entrada, no puede asignársele un
valor dentro de la descripción
En las Expresiones se utilizan Operadores
Tabla de verdad
B A Y
0 0 0
0 1 0 Y = B.A
1 0 0
1 1 1
Los PORTs suelen ir con Asignación Simple
minúscula
Ing. Daniel Acerbi © - 2014 63 Ing. Daniel Acerbi © - 2014 64
ENTITY and_3_in IS
PORT (a,b,c : IN BIT;
y : OUT BIT); Elementos que
agregué para
END ENTITY and_3_in;
trabajar con una
ARCHITECTURE and3 OF and_3_in IS compuerta mas
Demora de 5 ns, propia de la FPGA de la
familia de Altera 7000, con la que se cargo BEGIN
el simulador
y <= a AND b AND c;
END ARCHITECTURE and3;
Ing. Daniel Acerbi © - 2014 67 Ing. Daniel Acerbi © - 2014 68
Procesos Concurrentes
Multiplexor de 2 vías
• Las señales son los nexos entre procesos concurrentes. descripción usando señales
• Representan las interconexiones eléctricas entre library ieee;
use ieee.std_logic_1164.all;
elementos de circuito. entity mux is
port (A, B, C: in std_logic;
• Deben declararse, junto con su tipo, dentro de la sal: out std_logic);
arquitectura y antes del begin. end mux;
• Luego del begin de la arquitectura, se les puede asignar architecture senhal of mux is
un valor, que puede ser leído y utilizado signal Y1, Y2: std_logic;
begin
Y1<= A and not C; Defino las Señales
Señales : Son nexos entre
procesos concurrentes .
Y2<= B and C; Y1 e Y2
sal<=Y1 or Y2;
Son internas a la arquitectura --¿que pasaría si alteráramos el orden de estas 3 asignaciones?
end senhal;
Multiplexor de 2 vías
Descripción usando tabla de verdad y selección
architecture tabla1 of mux2c is
library ieee; -- declararemos el vector de entrada que luego formaremos
use ieee.std_logic_1164.all;
signal VECTENT: STD_LOGIC_VECTOR (2 downto 0);
entity mux 2c is -- el haber escrito 2 downto 0 especifica que el bit de mayor peso
port (A, B, C: in std_logic; -- está a la izquierda; de haber escrito 0 to 2 hubiese significado
Y: out std_logic); -- que está a la derecha
end mux2c; begin
VECTENT <= C & B & A; -- también pudo haberse escrito VECTENT <= (C, B,
architecture tabla1 of mux2c is A);
signal VECTENT: std_logic_vector (2 downto 0); with VECTENT select
begin Y <= '0' when "000", '1' when "001",
VECTENT<= C & B & A; '0' when "010", '1' when "011",
with VECTENT select '0' when "100", '0' when "101",
Y <= '0' when "000", '1' when "001", '1' when "110", '1' when "111",
'0' when "010", '1' when "011", ‘0' when others;
'0' when "100", '0' when "101", -- others cubre los 721 casos restantes. ¿Porqué 721? ;
'1' when "110", '1' when others; -- acá se optó por poner la salida en 0 en todos esos casos;
Ing. Daniel Acerbi © - 2014 79 end tabla1; Ing. Daniel Acerbi © - 2014 80
end tabla1;
Multiplexor de 2 vías
Descripción usando tabla de verdad indexada • Define operaciones aritméticas (sumas, restas, comparaciones, y
otras) entre dos STD_LOGIC_VECTOR o entre uno de ellos y una
library ieee; Agrego esta librería que
magnitud.
use ieee.std_logic_1164.all; me permite trabajar con • Para usar el paquete se debe incorporar la sentencia:
use ieee.std_logic_unsigned.all; números enteros no
signados use IEEE.STD_LOGIC_UNSIGNED.all;
entity mux 2c is • Quizás contrariamente a lo que muchos esperarían, la suma y la resta
port (A, B, C: in std_logic; no computan el acarreo o el préstamo final. Por ejemplo:
Y: out std_logic); "1001"+"1000"="0001"
end mux 2c ;
• El paquete también permite las transformación de un
architecture tabla2 of mux 2c is STD_LOGIC_VECTOR en una magnitud y viceversa
signal VECTENT: std_logic_vector (2 downto 0); CONV_INTEGER (A);
constant COLUMNA : std_logic_vector (0 to 7) :="01010011"; convierte al STD_LOGIC_VECTOR A en una magnitud
begin Convierte al vector de entrada en un
número natural y lo usa como índice
CONV_STD_LOGIC_VECTOR (B, J);
VECTENT <= C & B & A; del vector columna .
Y<= COLUMNA (conv_integer (VECTENT)); convierte a la magnitud B en un STD_LOGIC_VECTOR de longitud J
end tabla2; Ing. Daniel Acerbi © - 2014 83 Ing. Daniel Acerbi © - 2014 84
A3 A2 A1 A0 B3 B2 B1 B0
Convertidor BCD natural a Aiken
0 0 0 0 0 0 0 0 descripto como tabla de verdad
0 0 0 1 0 0 0 1 Ejemplo : library ieee;
use ieee.std_logic_1164.all;
0 0 1 0 0 0 1 0 Convertidor BCD use ieee.std_logic_unsigned.all;
0 0 1 1 0 0 1 1
0 1 0 0 0 1 0 0 natural a AIKEN entity nat2aik is
0
0
1
1
0
1
1
0
1
1
0
1
1
0
1
0
descripto con port (A : in std_logic_vector (3 downto 0); Agrego esta librería que
B : out std_logic_vector (3 downto 0)); me permite trabajar con
0 1 1 1 1 1 0 1 tabla de verdad end nat2aik; números enteros no
signados
1 0 0 0 1 1 1 0 architecture tabla1 of nat2aik is
1 0 0 1 1 1 1 1 begin Indica el valor de B, en cada
1 0 1 0 X X X X caso, en hexadecimal
with A select
1 0 1 1 X X X X B<= X"0" when "0000", X"1" when "0001", X"2" when "0010",
1 1 0 0 X X X X X"3" when "0011", X"4" when "0100", X"B" when "0101",
1 1 0 1 X X X X X"C" when "0110", X"D" when "0111", X"E" when "1000",
1 1 1 0 X X X X X"F" when "1001", others=>"----";
1 1 1 1 X X X X end tabla1;
Signal “arith”
Ing. Daniel Acerbi © - 2014 101 Ing. Daniel Acerbi © - 2014 102
Descripción completa
B Z
H 0 1 H H X
X X X X X X
Ing. Daniel Acerbi © - 2014 105 Ing. Daniel Acerbi © - 2014 106
library ieee;
use ieee.std_logic_1164.all;
entity mux is
port (A, B, C: in std_logic;
sal: out std_logic);
end mux;
La parte declarativa
puede existir o no
architecture wired_and of mux is
begin
sal <=‘0’ when ((C=‘0’) and (A=‘0’)) else ‘H’
sal <=‘0’ when ((C=‘1’) and (B=‘0’)) else ‘H’
end wired_and; La salida de la NAND “colector abierto” es “H”
(equivale a “1”), porque tiene una resistencia de pull-
up en su salida . Las palabras en rojo, son propias del lenguaje y no se pueden usar para nombrar .
Ing. Daniel Acerbi © - 2014 111 Las palabras en negro son nombres queIng.
el diseñador
Daniel Acerbi elije .
© - 2014 112