Está en la página 1de 45

Circuitos combinatorios VHDL

INGENIERA LUISA FERNANDA GARCIA VARGAS PH.D


DEFINICIÓN DE UN HDL

1. Es un lenguaje de descripción de hardware.


2. Son lenguajes de descripción formal.
3. Pensados para la descripción, documentación y diseño de elementos hardware.
4. Facilitan el proceso de diseño mediante herramientas CAD.
5. Hay para sistemas digitales y para sistemas análogos.
CARACTERÍSTICAS Y VENTAJAS DE UN HDL
1. Describen actividades concurrentes
2. Se puede hacer diseño jerárquico
3. Se pueden combinar varios estilos de descripción en el mismo diseño
4. Permite modelar el tiempo
5. Especifica un sistema tanto en HW como en SW
6. Se puede describir el HW desde sistemas, subsistemas y hasta componentes
7. Puede documentar fácilmente y permite el reuso de los elementos
8. Posibilidad de parametrización
9. Portabilidad
10. Independencia tecnológica
11. Facilita la generación de vectores de prueba para test complejos
TIPOS DE HDLS
La base para la programación de dispositivos de lógica programable, se encuentra
principalmente en tres tipos de lenguajes HDL:
➢VHDL (IEEE Std 1076 - 1987)
➢Verilog (IEEE Std #1364 - 1995) lenguajes para diseño digital de propósito general para
múltiples herramientas de verificación y síntesis
➢System Verilog: una versión avanzada de Verilog (IEEE Std 1800 - 2005) definido por Accellera.
VHDL
VHDL es un lenguaje de descripción de Hardware que es usado para modelar un sistema digital y fue
diseñado por el departamento de defensa de los EEUU. IEEE Std 1076-1987.
VHDL VHSIC (Very High Speed Integrated Circuit) Hardware Description Language
Revisiones:
◦ IEEE Std 1076-1987
◦ IEEE Std 1076-1993
◦ IEEE Std 1164-1993

VHDL es un lenguaje rico en palabras; esta característica lo hace un lenguaje auto documentado, cuya
semántica permite diseños no ambiguos que pueden llevarse de una herramienta a otra y que además
posee estándares adicionales que lo enriquecen (paquetes matemáticos y numéricos).
La ventaja más importante de VHDL es el manejo de un lenguaje general que permite desarrollar paquetes
reutilizables para cubrir funcionalidad en diversas aplicaciones en las cuales el diseñador puede definir
tipos de datos, por ejemplo, unidades físicas de medida.
ESTILOS DE DESCRIPCIÓN
Diseño jerárquico
Un bloque puede tener dentro de si bloques de menor nivel, otros módulos, los cuales son
definidos separadamente.
❖Cuando se incluye un módulo dentro de otro de un nivel superior, se crea una instancia del
módulo.
❖Esto permite reutilizar diseños y generar estructuras jerárquicas con anidamientos.
❖Se pueden utilizar diseños IP (Intellectual Property)
❖Permite tener metodología de trabajo grupal, donde cada persona puede realizar subsistemas
diferentes del diseño total.
VHDL - Entidades y arquitecturas
Entidad: para indicar la vista externa, interfaz de entrada salida de un sistema. Puertas y
parámetros.
La entidad indica las conexiones exteriores para transportar la información y los valores
genéricos, que indican información estática o constante entre las entidades.
Arquitectura: define el funcionamiento del modelo
Design file: estructura de mayor nivel. Conocida también como el Top Level Entity
Se compone de varias design units.
VHDL - Entidades y arquitecturas
Syntax:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY __entity_name IS
GENERIC(define parameters);
PORT(define inputs and outputs);
END __entity_name;
ARCHITECTURE a OF __entity_name IS
SIGNAL and COMPONENT declarations;
BEGIN
statements;
END a;
VHDL - Identificadores
Es el nombre de un elemento del circuito, señal, puerto,
variable, nombre de entidad, cuerpo de arquitectura o
similar.
Características:
◦ Comienzan por una letra, seguida de una combinación de letras y/o números, sin
espacios.
◦ Es not case sensitive my_function y MY_FUNCTION son lo mismo
◦ Se puede utilizar el carácter "_", pero no se puede utilizar como primer o último literal del
identificador. Tampoco pueden utilizarse dos o más "_" seguidos.
◦ No pueden utilizarse ningún otro carácter especial (ni los delimitadores o separadores)
VHDL - Identificadores
Nombres válidos:
◦ Decodificador8
◦ Justo_a_tiempo
◦ What_4
Nombres inválidos
◦ 8decodificador (comienza con número)
◦ Justo__a__tiempo (dos__ consecutivos)
◦ _what_4 (comienza con undescore)
◦ My design (tiene espacio)
◦ las_palabras? (tiene el character ? no permitido)
◦ signal (es una palabra reservada)
VHDL - Separadores
Caracteres que permiten separar unos elementos léxicos de otros:

❑Espacio
❑Tabulador
❑Fin de línea
VHDL - Delimitadores

Caracteres que interconectan unos elementos léxicos con otros:


◦ Delimitadores de VHDL
&'()*+,-./:;<=>|
◦ Delimitadores compuestos
=> ** := /= >= <= <>
VHDL - Comentarios

El inicio de un comentario viene dado por dos guiones consecutivos << -- >>, y termina con un
fin de línea

-- este es un comentario
VHDL - Palabras reservadas
abs access after alias all
and architecture array assert attribute
begin block body buffer bus
case component configuration constant disconnect
downto else elseif end entity
exit file for function generate
Algunas de estas son: generic guarded if in inout
is label library linkage loop
map mod nand new next
nor not null of on
open or others out package
port procedure process range record
register rem report return select
severity signal subtype then to
transport type units until use
variable wait when while with
xor
VHDL - Tipos de datos
Enteros
◦ Son números positivos y negativos. 5 -96 0 28 4
◦ El tipo de dato INTEGER consiste en el intervalo de números que pueden ser representados por el
número de bits soportados por el computador en el cual es compilado el diseño.
◦ Existen dos subtipos de INTEGER, llamados NATURAL los cuales son los enteros mayores o iguales a cero
y POSITIVE NATURAL los cuales son los enteros mayores o iguales a uno.
◦ Las constantes en estos tipos son escritas en VHDL sin comillas
y <= 3;
◦ Es necesario indicar el intervalo numérico que va a tomar el entero porque sino el compilador VHDL
generará el hardware necesario para cubrir todas las posibles combinaciones del entero. Una cantidad
de hardware innecesaria va a ser creada.
VHDL - Tipos de datos
Caracteres
◦ Son literales que se escriben en VHDL encerrándolos en comillas simples 'a' 'M'
◦ Estos son descritos en VHDL por enumeración, en el Packaged ESTANDAR, el cual es un
paquete nativo del VHDL.

Cadenas STRING
◦ Es un objeto compuesto por un conjunto de caracteres.
◦ Un string constante se indica con "comilla"
◦ "VHDL" "Doble"
◦ No son sintetizables
VHDL - Tipos de datos
BIT y BIT_VECTOR

◦ El tipo bit es nativo del VHDL, es definido por el paquete STANDARD y define sólo los valores lógicos '0' y
'1'.
◦ En muchos casos este tipo de dato es suficiente puesto que muchos circuitos solo necesitan estos dos
estados o valores.
◦ Se puede realizar vectores de elementos tipo bit
d : IN BIT_VECTOR (3 downto 0)
◦ Cada uno de los elementos del vector puede ser accedido indicando la posición entre paréntesis.
◦ También se puede escribir los elementos del vector en la otra dirección
d : IN BIT_VECTOR (0 to 3)
VHDL - Tipos de datos
STD_LOGIC y STD_LOGIC_VECTOR
◦ El tipo STD_LOGIC también es llamado IEEE Std.1164 Multi Value Logic. El cual ha sido definido para
tener un mayor número de valores, diferentes del '0' y el '1'.
◦ Cualquier puerto, señal o variable del tipo std_logic y std_logic_vector puede tener cualquiera de los
siguientes valores.
◦ Para utilizarlo se debe incluir la biblioteca en el encabezado del archivo
◦ library IEEE; use IEEE.std_logic_1164.all
VHDL - Tipos de datos
◦ La regla es que VHDL siempre realiza las asignaciones del vector de izquierda a derecha, y los
contenidos de este pueden ser escogidos según la numeración de los elementos.
◦ Los valores contantes se le deben asignar con dobles
comilla “ ” como se manejan los strings.
◦ Sevseg <= B”110011001” si sevseg es bitvector
VHDL - Tipos de objetos
Variables
◦ Solo se pueden declara en estructuras secuenciales (procesos), antes del BEGIN; no tiene analogía
directa con el hardware, es un dato en la memoria de la computadora que calcula la síntesis para
generar el circuito.
◦ VARIABLE <nombre> : <tipo> := <expresion>
◦ VARIABLE tamanobit : INTEGER := 16;

Constantes
◦ Constant en un objeto que siempre mantiene su valor inicial
◦ CONSTANT <nombre> : <tipo> := <expresion>
◦ CONSTANT tamanobit : INTEGER := 16;
VHDL - Tipos de puertos
Los puertos de una entidad se declaran
con la palabra port seguida de una lista
formal de señales IN : leída pero no modificada
Out: modificada pero no leída
Cada señal o grupo de señales de igual Buffer: siempre activa. Leída y modificada
tipo se define con su identificador, su Inout : puerta bidireccional tres estados. Leída y modificada
modo de operación in, out, inout,
buffer , su tipo y un valor por defecto
para las señales de tipo in o inout que
queden sin conectar.
VHDL - Lógica combinatoria
Asignaciones simples
◦ Dada una señal se usa el operador <= para asignarle un valor

◦ Si se tiene un arreglo de señales se pueden asignar así:


SIGNAL sejemplo : STD_LOGIC_VECTOR (7 downto 0);

sejemplo <= "10101010"; -- varios valores


sejemplo(5) <= ‘1'; -- a un elemento
sejemplo (7 downto 5) <= "101"; – a ciertos elementos del arreglo
sejemplo <= (others => '0'); el mismo valor a todos los elementos
del arreglo
VHDL - Lógica combinatoria

y~3
a
c

y~0 y~4
y
b

y~1
VHDL - Lógica combinatoria
VHDL - Lógica combinatoria

y~3
a[3..0]
b[3..0]

y~2

y~1
y[3..0]

y~0
VHDL - Lógica combinatoria
VHDL - Lógica combinatoria
VHDL - Lógica combinatoria
VHDL - Tipos de datos

Las comillas son rectas ' o "


VHDL - Tipos de objetos
VHDL - Lógica combinatoria
Mux0

g
SEL[2..0]
d[1..0] OUT
8' h08 -- DATA[7..0]

MUX

Mux1

SEL[2..0]
OUT
8' h04 -- DATA[7..0]

MUX

Mux2

SEL[2..0] y[3..0]
OUT
8' h02 -- DATA[7..0]

MUX

Mux3

SEL[2..0]
OUT
8' h01 -- DATA[7..0]

MUX
VHDL - Tipos de puertos
VHDL - Lógica combinatoria
VHDL - Tipos de puertos
VHDL - EJEMPLOS
Síntesis estructural
Describe la red de compuertas y registros indicando con exactitud las conexiones a realizar.
Describe la funcionalidad y la estructura del circuito
Se usan señales para asignar valores de ecuaciones lógicas
Se usa normalmente para síntesis, solo emplea un subconjunto de las funcionalidades del VHDL
VHDL - Componentes
Un archivo VHDL puede utilizar otro VHDL como un componente. La forma La declaración de un componente es similar en forma a la declaración
general de un componente es: de una entidad, en la que se incluye la declaración de los puertos y
parámetros del componente.
ENTITY entity_name IS
PORT ( input and output definitions); COMPONENT __component_name
END entity_name; GENERIC(__parameter_name : string := __default_value;
__parameter_name : integer := __default_value);
ARCHITECTURE arch_name OF entity_name IS PORT(
component declaration(s); __input name, __input_name : IN STD_LOGIC;
signal declaration(s); __bidir name, __bidir_name : INOUT STD_LOGIC;
__output name, __output_name : OUT STD_LOGIC);
BEGIN END COMPONENT;
Component instantiation(s);
Other statements; __instance_name: __component_name
END arch_name; GENERIC MAP (__parameter_name => __parameter_value,
__parameter_name => __parameter_value)
Cada instancia del componente require una sentencia de instanciación. Los PORT MAP (__component_port => __connect_port,
puertos pueden ser asignados de forma explicita con el operador =>, o __component_port => __connect_port);
insertando el nombre del puerto en la posición correspondiente al nombre de
puerto de la declaración del componente.
ESTILOS DE DESCRIPCIÓN - Síntesis estructural

38
Process en combinatorios
PROCESOS
- Se comporta como una única sentencia. Conformado por un conjunto de sentencias que se analizan de manera secuencial.
Se utiliza para realizar las descripciones algorítmicas o de comportamiento.
- Conforma un ciclo infinito que comienza con PROCESS … BEGIN y termina en el END PROCESS. Tiene una sección de
declaraciones locales donde se pueden declarar los tipos, variables, constantes y subprogramas. En la sección de
sentencias se incluyen las sentencias secuenciales que consisten en If, case, loop, next, assert, wait
- Los procesos se activan por listas de sensitividad o por sentencias de wait.
La sintaxis del proceso es:
__process_label:
PROCESS (sensitivity list)
declaracion de variables
BEGIN
sentencias secuenciales
END PROCESS __process_label;
Las asignaciones simples y las asignaciones concurrentes se pueden interpretar o crear o como procesos implícitos.
Process en combinatorios
LISTAS DE SENSITIVIDAD Ejemplo comparador BEGIN
Los procesos pueden tener listas de -- compare8.vhd PROCESS (a,b)
sensitividad explicitas, esta conformada BEGIN
por señales definidas que al cambiar LIBRARY ieee; IF a<b THEN
(cualquiera de ellas) activa la ejecución
del proceso. USE ieee.std_logic_1164.ALL; compare <= "110";
USE ieee.std_logic_unsigned.ALL; ELSIF a=b THEN
Algunas herramientas de síntesis tienen ENTITY compare8 IS compare <= "101";
problemas con listas que no contengan
señales que estén usadas en el proceso, PORT( ELSIF a>b THEN
puesto que el sistema no sabe si debe a, b : IN STD_LOGIC_VECTOR(7 compare <= "011";
interpretar el proceso como un sistema downto 0); ELSE
secuencial o combinatorio. agtb, aeqb, altb : OUT Compare <= "111";
STD_LOGIC); END IF;
END compare8; agtb <= compare(2);
ARCHITECTURE a OF compare8 IS aeqb <=compare(1);
SIGNAL compare: STD_LOGIC_VECTOR(2 altb<=compare(0);
downto 0);
END PROCESS;
END a;
Case – en combinatorios
CASE __expression IS Ejemplo:
CASE WHEN __constant_value => CASE s IS
WHEN “00” =>
__statement;
La sentencia CASE es utilizada para y <= “0001”;
ejecutar una de varias sentencias, __statement;
x <= “1110”;
basándose en la evaluación de una WHEN __constant_value => WHEN “01” =>
señal. __statement; y => “0010”;
__statement; x => “1101”;
WHEN OTHERS => WHEN “10” =>
__statement; y <= “0100”;
x <= “1011”;
__statement;
WHEN “11” =>
END CASE;
y <= “1000”;
x <= “0111”;
Tarea: WHEN others =>
Investigar dos ejemplos con case y <= “0000”;
x <= “1111”;
END CASE;
Referencias
▪Tokheim, R. Electrónica digital. Principios y aplicaciones
▪Floyd, Thomas L. Fundamentos de sistemas digitales, 2016. Pearson
▪Mano, Morris. Diseño digital.
▪Tocci, Ronald. Digital Systems Principles and Applications.

También podría gustarte