Вы находитесь на странице: 1из 29

Introducción

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

Ing. Daniel Acerbi © - 2014 _v2


Ing. Daniel Acerbi © - 2014 2

• Es habitual que la documentación de los equipos electrónicos


incluya un diagrama esquemático y una descripción de su
funcionamiento.
• Dicha descripción está redactada en lenguaje corriente, y
normalmente no describe con todo detalle la operación del
equipos.
• Es deseable disponer de un lenguaje formal para la descripción
de circuitos electrónicos, universal y estandarizado, que obligue
a describir en forma completa al circuito. Lenguajes descriptivos de
• Un lenguaje como ese sería de gran ayuda para describir los hardware
actuales circuitos con decenas de miles de compuertas, cuyos
diagramas esquemáticos no resultan prácticos.
• Esto lleva a la necesidad de disponer Lenguajes Descriptores
de Hardware (Hardware Description Language o HDL)
Ing. Daniel Acerbi © - 2014 3

Ing. Daniel Acerbi © - 2014 1


El HDL es un lenguaje para describir hardware, es
solo una herramienta formal para describir el Existen Lenguajes de Descripción de Hardware
comportamiento y la estructura de sistemas (HDL) para el diseño de los siguientes tipos de
electrónicos usando esquemas textuales . sistemas :
Usando HDLs puedo describir la operación de sistemas Continuos ( analógicos )
con diferentes niveles de estilos: Discretos - de este último tipo nos ocupamos en
Describiendo QUE es lo que el sistema hace (descripción por Técnicas Digitales I .
comportamiento – uso ecuaciones y tablas de verdad)
Describiendo COMO lo hace (descripción algorítmica – uso
diagramas de flujo)
Detallando CON QUE HACERLO (descripción de estructuras -
uso circuitos)

Ing. Daniel Acerbi © - 2014 5 Ing. Daniel Acerbi © - 2014 6

• 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

Ing. Daniel Acerbi © - 2014 2


Se puede crear un modelo de un circuito que ya existe y
que ya ha sido implementado .
if A=‘0’ and B=‘0’
Then S <= ‘0’ after 5 ns;
S
A else S <= ‘1’ after 4 ns;

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

Ing. Daniel Acerbi © - 2014 9 Ing. Daniel Acerbi © - 2014 10

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

Ing. Daniel Acerbi © - 2014 11

Ing. Daniel Acerbi © - 2014 3


• Está aprobado por una norma del Institute of Electrical VHDL es un lenguaje de descripción de hardware
and Electronic Engineers (IEEE) desde 1987. La norma VHDL No es un lenguaje de programación
original es la número IEEE 1076, que ha sido actualizada
y complementada años después. Su última revisión es VHDL es un lenguaje asociado a herramientas de CAD
del 2008. (diseño asistido por computadora) .
• Ha sido diseñado de manera que resulta muy parecido al Ventajas del VHDL :
Ada, pero un programador en C no tiene dificultades en Potencia y flexibilidad
aprenderlo.
Permite diseños independiente de la tecnología de
• Permite el diseño jerárquico multinivel (una descripción
de alto nivel puede hacer uso de descripciones de menor implementación ( la misma descripción la puedo aplicar
nivel, pudiendo ambas ser preparadas y depuradas en distintas FPGAs )
separadamente) Portabilidad ( puedo migrar fácilmente los diseños de
• Los fabricantes de CPLD y FPGA ofrecen programas que una tecnología de fabricación a otra ) .
facilitan la redacción, la verificación y la síntesis
(lógicamente, limitados en la síntesis al caso de usar sus
propios productos).
Ing. Daniel Acerbi © - 2014 13 Ing. Daniel Acerbi © - 2014 14

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

Ing. Daniel Acerbi © - 2014 4


Ing. Daniel Acerbi © - 2014 17

• Los distintos objetos que forman parte de una descripción


VHDL (puertos de entrada y salida, señales, entidades,
etc.) deben tener un nombre o identificador. El mismo debe
formado por letras (VHDL no hace diferencia entre una
minúscula y su correspondiente mayúscula), números o el
carácter de guión bajo (_). Valen, sin embargo, las
siguientes limitaciones básicas:
• El identificador debe empezar forzosamente con una letra
• No puede haber dos guiones bajos sucesivos ni terminar el
identificador con un guión bajo
• Ciertas denominaciones están reservadas por el lenguaje
para palabras clave, y no pueden usarse como
identificadores.

Ing. Daniel Acerbi © - 2014 19 Ing. Daniel Acerbi © - 2014 20

Ing. Daniel Acerbi © - 2014 5


Ing. Daniel Acerbi © - 2014 21

Tomemos un programa real en VHDL e identifiquemos


las 3 partes fundamentales:
Programa básico
en VHDL Libreria

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

Ing. Daniel Acerbi © - 2014 6


Incluiría un diagrama identificando los terminales
En la hoja de datos de un circuito integrado encontramos: de entrada y de salida (habitualmente indicando el
• Un esquema en el que se muestran todas las puertas número de terminal asociado). Es lo que llamaremos
(entradas y salidas) que tiene el dispositivo para entidad ( Entity ).
comunicarse con el exterior
C
• Una descripción funcional de su operación en una o más de Mux de
las siguientes formas: 2 vías Y Salida
Entradas B

• Comportamiento (tabla de verdad o ecuaciones) A


• Algoritmo
• Estructura (circuito) interna Multiplexor de 2 vías

También incluiría una Descripción Funcional. Es lo


que llamaríamos arquitectura ( Architecture ).

Ing. Daniel Acerbi © - 2014 25 Ing. Daniel Acerbi © - 2014 26

Otra manera particular de explicar el funcionamiento del circuito es mediante un


La Arquitectura será la Descripción Funcional del circuito. diagrama de flujo, esta descripción corresponde a una Descripción Algorítmica,
en el lenguaje VHDL. Puedo importar un programa hecho en C .
Si la descripción es por Comportamiento, la misma quedará La descripción algorítmica es muy indicada cuando hay lazos iterativos,
representada en la Tabla de Verdad o en la Ecuación del anidaciones, alternativas de múltiples posibilidades, etc.
circuito : Solo es útil para simulación y NO ES SINTETIZABLE.
BA
C B A Y C 00 01 11 10 C B A Y
0
0 0 0 0 0 1 1 0 0 0 0 0
Tabla de verdad del
0 0 1 1 0 0 1 1 0 0 1 1 no
Multiplexor de 2 vías 1 C = 1?
0 1 0 0
0 1 0 0
0 1 1 1 si
0 1 1 1
1 0 0 0
1 0 0 0 Y=B Y=A
1 0 1 0
1 1 0 1 1 0 1 0
Y = C.A + C.B
1 1 1 1 1 1 0 1
Ing. Daniel Acerbi © - 2014 27 28
1 1 1 1 Ing. Daniel Acerbi © - 2014

Ing. Daniel Acerbi © - 2014 7


La descripción estructural muestra la implementación circuital • Los terminales que conectan a un circuito lógico con el
del funcionamiento deseado. exterior son denominados puertos. Un puerto puede
operar en uno de los siguientes modos:
Describo los subcomponentes y las conexiones entre los • in: se trata de un puerto de entrada. Su valor depende de la
mismos . señal externa que se aplique a él y no podrá ser alterado
A por el dispositivo.
• out: se trata de un puerto de salida. Su valor es fijado por el
Y dispositivo, pero no puede ser leído por el mismo ni usado
C como variable independiente (en el sentido matemático del
término) en la asignación de valor a otra señal.
• buffer: se trata de un puerto de salida que puede ser leído
B
por el dispositivo, y por lo tanto usado como variable
independiente en la asignación de valor a otra señal.
Y = C.A + C.B • inout y linkage: otras modalidades en las que no
profundizaremos

Ing. Daniel Acerbi © - 2014 29 Ing. Daniel Acerbi © - 2014 30

• Los objetos que contienen datos deben ser declarados. Estos


objetos son de las siguientes clases:
• Entradas
• Salidas
• Señales
• Variable
• Constantes
Los Puertos de la Entidad son Objetos que deben ser
declarados y los mismos son capaces de manejar datos.
Los Puertos de una Entidad tienen :
Modo – Forma de operación del puerto
Tipo – Tipo de Datos que manejan; se definen en las
Librerias

31 32
Ing. Daniel Acerbi © - 2014

Ing. Daniel Acerbi © - 2014 8


Para escribir un código en VHDL, es necesario • Aquellos predeterminados por la norma se denominan
conocer los tipos de datos que se pueden manejar INTEGER, y la norma los define como:
en los objetos. • type INTEGER is range -2147483648 to +2147483647;

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

• Son datos que pueden tomar cualquier valor dentro de


• Estos datos no sólo admiten un valor, sino también una lista finita de valores posibles. Por ejemplo, una
unidades. Así, por ejemplo, un dato físico podría ser una variable arcoiris podría definirse como:
longitud.
• type arcoiris (rojo, naranja, amarillo, verde, azul, indigo,
• Un tipo físico nativo de VHDL, y muy útil para nuestros
fines, es el tiempo (time) predefinido como sigue: violeta);
type time is range 0 to 1e20; • Algunos tipos de datos enumerados están predefinidos
units en VHDL (IEEE1076). Por ejemplo:
fs;
ps = 1000 fs; • character (los caracteres de texto típicos del código
ns = 1000 ps; ASCII). Por ejemplo ‘3’ y ‘d’. Cuando se escriben,
us = 1000 ns; deben siempre limitarse con comillas simples, como
ms = 1000 us;
sec = 1000 ms; en los ejemplos anteriores
min = 60 sec; • boolean (que puede tomar los valores de TRUE o
hr = 60 min;
end units; FALSE)
• bit (que puede tomar los valores de ‘0’ o ‘1’)
Ing. Daniel Acerbi © - 2014 35 Ing. Daniel Acerbi © - 2014 36

Ing. Daniel Acerbi © - 2014 9


• std_logic es un tipo enumerado que no es nativo del • Son los datos que están compuestos por arreglos de datos
VHDL sino que fue agregado por la norma IEEE 1164. como los anteriormente descriptos. Son:
• Toma en cuenta que las señales lógicas no son simples • arreglos unidimensionales (vectores, cadenas, etc-
ceros y unos, sino que pueden tomar otros estados • Arreglos bidimensionales (matrices)
como, por ejemplo, alta impedancia, un estado • Arreglos multidimensionales
indefinido, un estado débil, un estado indiferente, etc. La • Registros (arreglos mixtos, similares a la estructura en C)
mencionada norma define 9 niveles diferentes para un
dato std_logic, a saber: • Entre VHDL y su norma complementaria IEEE 1164, están
predefinidos los siguientes tipos de arreglos
‘1’: 1 fuerte
unidimensionales (cuyos valores deben siempre ser
‘0’: 0 fuerte encerrados entre comillas dobles).
‘Z’: alta impedancia • type string is array (positive range <>) of character;
‘H’: 1 débil • type bit_vector is array (natural range <>) of bit;
‘L’: 0 débil • type std_logic_vector is array (natural range <>) of std_logic;
‘X’: indefinido fuerte
‘W’: indefinido débil
‘U’: no inicializado
‘-’: indiferente Ing. Daniel Acerbi © - 2014 37 Ing. Daniel Acerbi © - 2014 38

• 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).

Ing. Daniel Acerbi © - 2014 39 Ing. Daniel Acerbi © - 2014 40

Ing. Daniel Acerbi © - 2014 10


Algunos Objetos y Datos no pueden ser sintetizados signal A: std_logic;
signal B, C: std_logic_vector (7 downto 0);
variable contador: integer range 1 to 8;
variable contador: integer range 1 to 8 :=1;
variable par_even: bit;
variable par_even: bit := ‘0’;
constant plabra: std_logic_vector (3 downto 0);
constant plabra: std_logic_vector (3
downto0):=”1001”;
signal D : matriz (0 to 3) (7 downto 0);

Ing. Daniel Acerbi © - 2014 41 Ing. Daniel Acerbi © - 2014 42

• Previo a la entidad se deben incluir las bibliotecas (carpetas) a


emplear y abrir (con una sentencia use) los paquetes que ellas
Se puede usar el dato completo o, en el caso de contienen que serán utilizados, ya sea algunos de los elementos
un compuesto, un subrango del mismo. Veamos contenidos en ellos o (como es muy usual) la totalidad (all)
algunos ejemplos de este último caso, usando • Como usaremos señales std_logic deberemos incluir la carpeta
los objetos recién declarados (B y C vectores de IEEE, y usar el paquete STD_LOGIC.
std_logic, y D una matriz): • Ejemplos:
Libreria
• B(3)
Paquete
• C(5 downto 2)
• D(1)
• D(1)(3 downto 0)
Libreria

Paquetes
Ing. Daniel Acerbi © - 2014 43 Ing. Daniel Acerbi © - 2014 44

Ing. Daniel Acerbi © - 2014 11


Ing. Daniel Acerbi © - 2014 45 Ing. Daniel Acerbi © - 2014 46

-- declaramos primeramente la biblioteca


1076
-- dos guiones indican el inicio de un comentario
1076
library IEEE;
-- en general, un punto y coma cierra las sentencias
-- abrimos el paquete std_logic y todo su contenido
use IEEE.STD_LOGIC_1164.all;
-- pasamos a describir la entidad
entity mux2c is
-- el is implica continuidad
-- por lo que no debe cerrarse con un punto y coma
port (A, B, C: in STD_LOGIC;
Y: out STD_LOGIC );
Es frecuente el error de
end mux2c; -- fin de la entidad invertirlos ;)

Ing. Daniel Acerbi © - 2014 47 Ing. Daniel Acerbi © - 2014 48

Ing. Daniel Acerbi © - 2014 12


Ing. Daniel Acerbi © - 2014 49 Ing. Daniel Acerbi © - 2014 50

Los vectores se pueden definir tanto en rangos


ascendentes como descendentes . Vector de 4 bits

Va con 2 comillas porque


El numero binario lo guardo en el vector “a” asigno mas de un bit . Indica hexadecimal

Producen como resultados en el vector a y b Coloca un ‘1’en el bit 7

Carga parcialmente el vector,


con un valor
Lo que expreso para std_logic_vector, también vale para
los bit_vector .
Ing. Daniel Acerbi © - 2014 51 Ing. Daniel Acerbi © - 2014 52

Ing. Daniel Acerbi © - 2014 13


Un Bus se representa
mediante un Vector

Ing. Daniel Acerbi © - 2014 53 Ing. Daniel Acerbi © - 2014 54

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

Ing. Daniel Acerbi © - 2014 55 Ing. Daniel Acerbi © - 2014 56

Ing. Daniel Acerbi © - 2014 14


En VHDL se pueden formar expresiones a partir de ciertos
datos y mediante diversos operadores. Podemos distinguir, • Los operadores relacionales son:
entre los operadores más usuales y listados según la • los de igualdad (=) y desigualdad (/=) que pueden
prioridad creciente aplicarse a operandos de cualquier tipo, con tal que
• Los operadores lógicos and, or, nand, nor, xor y xnor. sea el mismo a ambos lados de la comparación.
Actúan sobre los tipos bolean, bit, bit_vector, std_logic y • los de mayor (>), mayor o igual (>=), menor (<) y
std_logic_vector. La función que cumple cada una de ellos menor o igual (<=) que sólo son aplicables a
resulta obvia. escalares, cadenas de caracteres o vectores.
• En el caso de vectores, la operación se hace bit a bit. • La suma y la resta aritmética, aplicables a datos
numéricos y, compartiendo con ellas la prioridad, la
Debe resaltarse que ningún operador lógico tiene precedencia concatenación de objetos (&).
respecto a otro operador lógico, de manera que una • La multiplicación (*) y la división (/)
expresión se evalúa de izquierda a derecha y la prioridad • El operador lógico NOT y la potenciación (**)
entre los operadores lógicos resulta de su orden de aparición.
Así la expresión A or B and C realizará primero la operación • Hay otros operadores como el cambio de signo, el valor
or entre A y B, y luego la and entre el resultado de A or B con absoluto, desplazamientos, etc.
C. De desear alterar esta secuencia, se debe utilizar
paréntesis.
Ing. Daniel Acerbi © - 2014 57 Ing. Daniel Acerbi © - 2014 58

Ing. Daniel Acerbi © - 2014 59 Ing. Daniel Acerbi © - 2014 60

Ing. Daniel Acerbi © - 2014 15


Aggregates:
• Sean: (Asigna uno o mas valores a uno o mas elementos de un registro o array)
• A una señal std_logic_vector (7 downto 0) A<=(7=>’1’,6=>B(2),5=>B(1),4=>B(0),3=>´0´,2=>’1’,1=>’0’,0=>C);
• B una señal std_logic_vector (2 downto 0) El orden puede ser cualquiera, ya que la asignación es nominal
A<=(’1’, B(2), B(1), B(0), ´0´, ’1’, ’0’, C);
• C una señal std_logic
Se debe respetar el orden, ya que la asignación es posicional
• Puede escribirse, para asignar valor a A: A<=(7=>’1’,6=>B(2),5=>B(1),4=>B(0),2=>’1’,0=>C, others=>’0’);
A(7)<=‘1’; El orden puede ser cualquiera, todos los no incluidos caen en el others.
¿Qué produciría la sentencia B<=(others=>’0’);?
A(6 downto 4)<=B;
A(3 downto 1)<=“010”; Concatenación:
A(0)<=C; (Compone dos arrays unidimensionales en uno mayor del mismo tipo haciendo
la suma modulo 2 entre los bits de la misma ubicacion )
A<=‘1’ & B & ”010” & C;
Se debe respetar el orden
Ing. Daniel Acerbi © - 2014 61 Ing. Daniel Acerbi © - 2014 62

Uso los TIPOS de la IEEE-1076 – No necesito especificar libreria


Recordemos una compuerta AND, de 2 entradas, para
poder escribir la descripción .
Simbolo Defino Entradas y Salidas
A a y b : entradas
Y y : salidas
B

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

Ing. Daniel Acerbi © - 2014 16


Hay 2 tipos de simulaciones :
Funcional, no tiene en cuenta las demoras (ejemplo)
Temporizadas, tienen en cuenta demoras partiendo de los
tiempos de demora de las FPGAs seteadas en el simulador.

65 Ing. Daniel Acerbi © - 2014 66


Ing. Daniel Acerbi © - 2014

Fácilmente puedo lograr la descripción de este ejemplo. Parto de


la anterior descripción y defino una entrada mas y agrego un
operador en la Arquitectura .

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

Ing. Daniel Acerbi © - 2014 17


El Hardware es inherentemente concurrente, los circuitos
coexisten físicamente en el tiempo .
En el caso analizado, S y Q deben aparecer
simultáneamente en las salidas .

Procesos Concurrentes

Ing. Daniel Acerbi © - 2014 70

• Cada una de las sentencias de la descripción es un proceso, en


La solución al problema anterior es que aunque la ejecución sea ocasiones llamado proceso implícito para distinguirlo de los procesos que
secuencial, por parte del simulador, las instrucciones no tarden caracterizan a la descripción algorítmica que tienen varios pasos de
ningún tiempo en ejecutarse : ejecución secuencial.
• Todos los procesos se ejecutan simultáneamente. Por lo tanto, y al
menos en principio, no importa el orden en que se los haya listado.
• Una descripción mediante ecuaciones conduce a procesos que son
asignaciones simples de valores.
• Se usan señales para vincular procesos concurrentes. Las señales no
son entradas ni salidas, sino interconexiones entre procesos
• Existen, además de las asignaciones simples, asignaciones más
De esta manera aunque una instrucción se ejecuta después de complejas como las asignaciones seleccionadas, particularmente
adaptadas para la descripción de tablas de verdad y las asignaciones
la otra, como las dos se evalúan en el mismo tiempo condicionadas. Ambas son aptas para describir por flujo de datos por
simulado, desde el punto de vista de la modelización del describir ramificaciones.
circuito ambas puertas funcionan simultáneamente . • Si se asignan dos o más valores a una misma señal, esto es equivalente
Esta es la solución que opta VHDL y VERILOG, para resolver a colocar en paralelo la salida de dos compuertas: se crea un conflicto
que requiere una resolución para los únicos casos admisibles: aquellos
los circuitos como el que estamos analizando . que emplean salidas de 3 estados o de elemento (colector o drenador)
abierto.
Ing. Daniel Acerbi © - 2014 71 Ing. Daniel Acerbi © - 2014 72

Ing. Daniel Acerbi © - 2014 18


library ieee;
use ieee.std_logic_1164.all;
architecture ecuacion of mux2c is Y = C.A + C.B
entity mux2c is
begin
port (a, b, c: in std_logic;
-- luego de un begin tampoco va un punto y coma de cierre
Y<=(A and not C) or (B and C);
y: out std_logic);
-- la sentencia anterior es una asignación simple end mux2c;
-- Para asignar un valor a una señal, después de su identificador
-- se usa el símbolo <= seguido del valor que se desea asignarle architecture ecuacion of mux is
-- En nuestro caso, el resultado de una expresión. begin Asignación simple
-- En la expresión, los primeros dos paréntesis son convenientes por y<=(a and not c) or (b and c);
-- claridad, pero los últimos dos son estrictamente necesarios. --¡en el renglón anterior, los últimos 2 paréntesis son
-- ¿Porqué? necesarios!
end ecuacion; end ecuacion;
Ing. Daniel Acerbi © - 2014 73 Ing. Daniel Acerbi © - 2014 74

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;

Ing. Daniel Acerbi © - 2014 75 Ing. Daniel Acerbi © - 2014 76

Ing. Daniel Acerbi © - 2014 19


Asignación única con selección
WITH expresión SELECT
identificador<=valor1 WHEN caso1,
valor2 WHEN caso2,

otrovalor WHEN others;
with…select…when… • Aplicables a casos mutuamente excluyentes.
• Particularmente aptas para representar una tabla de verdad o un
flujo de datos.
• La inclusión del others asegura la cobertura de todos los casos;
su ausencia puede causar que se infiera una memoria en la sintesis
• La asignación única, si se refiere a un vector, puede ser a todos
los elementos del vector, a uno solo, o a un subconjunto.
Ing. Daniel Acerbi © - 2014 78

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;

Ing. Daniel Acerbi © - 2014 20


architecture miniter of mux2c is -- se debe agregar en la parte de bibliotecas, el siguiente use
-- use IEEE.STD_LOGIC_UNSIGNED.all
signal VECTENT: STD_LOGIC_VECTOR (2 downto 0);
begin architecture tabla2 of mux2c is
VECTENT <= C & B & A; signal VECTENT: STD_LOGIC_VECTOR (2 downto 0);
constant COLUMNA: STD_LOGIC_VECTOR (0 to 7) :="01010011";
with VECTENT select
begin
Y <= '1' when "001"|"011"|"110"|"111", VECTENT <= C & B & A;
‘0' when others; Y<=COLUMNA (CONV_INTEGER (VECTENT));
-- convierte al vector de entrada en un número natural
end miniter;
-- y lo usa como índice del vector columna
end tabla2

Ing. Daniel Acerbi © - 2014 81 Ing. Daniel Acerbi © - 2014 82

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

Ing. Daniel Acerbi © - 2014 21


• Otro paquete llamado SIGNED es similar al UNSIGNED pero se
refiere a número enteros, es decir, con signo
• Otro paquete llamado ARITH permite combinar vectores con architecture flujo of mux2c is
signo y sin signo begin
• Los tres paquetes mencionados son muy utilizadas, pero algo
anticuados. No están normalizados, y por lo tanto las with C select
descripciones pueden no ser interpretadas por igual en diferentes Y <= A when '0',
sistemas.
• Por ejemplo: ¿Qué resulta de la suma de dos vectores de distinta B when others;
longitud? end flujo;
• Por eso, el IEEE, al normalizar el paquete denominado
NUMERIC_STD, pasó a desaconsejar el uso de los paquetes
antes mencionados. Sin embargo, los mismas siguen siendo muy
utilizados, y en los casos más sencillos no traen problemas.
• Haremos el análisis de la NUMERIC_STD más adelante.

Ing. Daniel Acerbi © - 2014 85 Ing. Daniel Acerbi © - 2014 86

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;

Ing. Daniel Acerbi © - 2014 87 Ing. Daniel Acerbi © - 2014 88

Ing. Daniel Acerbi © - 2014 22


-- requiere haber declarado
-- use IEEE.STD_LOGIC_UNSIGNED.all;

architecture tabla2 of nat2aik is


type tabla is array (0 to 15) of STD_LOGIC_VECTOR (3 downto 0);
constant MATRIZ : tabla :=(X"0", X"1", X"2", X"3", X"4", X"B",
X"C", X"D", X"E", X"F", others=>"XXXX");
begin
B<=MATRIZ (CONV_INTEGER (A));
end tabla2;

Ing. Daniel Acerbi © - 2014 89 Ing. Daniel Acerbi © - 2014 90

Conversión BCD Natural a Aiken


A3 A2 A1 A0 B3 B2 B1 B0
0 0 0 0 0 0 0 0 <5
0 0 0 1 0 0 0 1
0 0 1 0 0 0 1 0 No afectar
0 0 1 1 0 0 1 1
(sumar 0)
0 1 0 0 0 1 0 0
0 1 0 1 1 0 1 1
0 1 1 0 1 1 0 0
0 1 1 1 1 1 0 1
1 0 0 0 1 1 1 0 ≥5
1 0 0 1 1 1 1 1
Sumar 6
1 0 1 0 X X X X
1 0 1 1 X X X X (ignorar el
1 1 0 0 X X X X posible acarreo)
1 1 0 1 X X X X
1 1 1 0 X X X X
1 1 1 1 X X X X
Ing. Daniel Acerbi © - 2014 91 Ing. Daniel Acerbi © - 2014
92

Ing. Daniel Acerbi © - 2014 23


Convertidor BCD natural a Aiken
descripto con comparación y suma
library ieee; Uso esta librería
-- requiere haber declarado
use ieee.std_logic_1164.all; porque utilizo números
-- use IEEE.STD_LOGIC_UNSIGNED.all; use ieee.std_logic_unsigned.all; enteros y operaciones
entity nat2aik is matemáticas
architecture flujo of nat2aik is port (A : in std_logic_vector (3 downto 0);
begin B : out std_logic_vector (3 downto 0));
end nat2aik;
B <= A when A < 5 else A+6;
architecture flujo of nat2aik is
end flujo; begin
Condición planteada
B <= A when A < 5 else A+6; en la TV
end flujo;

Ing. Daniel Acerbi © - 2014 93 Ing. Daniel Acerbi © - 2014 94

library IEEE; Bi=Gi ⊕ Bi+1


use IEEE.STD_LOGIC_1164.all;
Gray Planteamos solo la arquitectura:
entity gray2bin is
port (G : in STD_LOGIC_VECTOR (3 downto 0);
B : out STD_LOGIC_VECTOR (3 downto 0) ); + + + architecture bhv4 of gray2bin is
end gray2bin; signal IB : STD_LOGIC_VECTOR (3 downto 0)
Binario
begin
architecture bhv1 of gray2bin is
signal IB : STD_LOGIC_VECTOR (3 downto 0)
IB(3)<=G(3);
begin IB(2 downto 0)<=IB(3 downto 1) xor G(2 downto 0);
Uso señales para
IB(3)<=G(3); evitar usar buffer B<=IB;
IB(2)<=IB(3) xor G(2);
end bhv4;
IB(1)<=IB(2) xor G(1);
IB(0)<=IB(1) xor G(0);
B<=IB;
end bhv1;
Ing. Daniel Acerbi © - 2014 95 Ing. Daniel Acerbi © - 2014 96

Ing. Daniel Acerbi © - 2014 24


• Se trata de realizar un convertidor de Gray a
binario con un número de bits genérico que sirva
cualquiera sea el número de bits real. Para ello,
un parámetro modificable contendrá el número
de bits real.
• generic es la forma de declarar un parámetro en
una entity
• Si se usa el objeto descripto en forma genérica
como componente, puede externamente
modificarse el valor de esa constante usando un
generic map (luego se verán más detalles).

Ing. Daniel Acerbi © - 2014 97 Ing. Daniel Acerbi © - 2014 98

Dar la descripción de la siguiente ALU:


library IEEE; Usamos la instrucción
use IEEE.STD_LOGIC_1164.all; generic, para describir La ALU esta dividida en 2
sistemas o circuitos unidades una realiza operaciones
entity g2b is lógicos donde se lógicas y la otra aritmeticas y un
generic (n: INTEGER :=4);-- n es 4 por defecto requiere variar con multiplexor pone en la salida (
port (G : in STD_LOGIC_VECTOR (n-1 downto 0); frecuencia la cantidad 8bits) los resultados .
B : out STD_LOGIC_VECTOR (n-1 downto 0) ); de entradas
end g2b;
Las funciones de las unidades son :
architecture bhv1 of g2b is
signal IB : STD_LOGIC_VECTOR (n-1 downto 0);
begin
IB(n-1)<=G(n-1);
IB (n-2 downto 0)<=IB (n-1 downto 1) xor G (n-2 downto 0);
B<=IB;
end bhv1;
Ing. Daniel Acerbi © - 2014 99 Ing. Daniel Acerbi © - 2014 100

Ing. Daniel Acerbi © - 2014 25


Librería y entidad Arquitectura:

Signal “arith”

Uso 2 librerías, Signal “logic”


la primera para
las funciones
lógicas, la
segunda para las
funciones
aritméticas

Ing. Daniel Acerbi © - 2014 101 Ing. Daniel Acerbi © - 2014 102

Descripción completa

Resolución del conflicto


+V

B Z

Ing. Daniel Acerbi © - 2014 103 D

Ing. Daniel Acerbi © - 2014 26


Valor de la resolución
del conflicto
• Cuando en procesos concurrentes se le asigna dos o
más valores diferentes a una misma señal, aparece Señal 1 0 1 Z H X
un conflicto que debe ser resuelto Señal 2

• STD_LOGIC ya tiene resuelto internamente el 0 0 X 0 0 X


conflicto (la biblioteca IEEE incluye la función de
resolución) que considera que:
• Una señal fuerte domina a una débil 1 X 1 1 1 X
• Una alta impedancia es la más débil de las señales.
• Es indeterminado el resultado del conflicto entre dos señales Z 0 1 Z H X
diferentes de igual fuerza

H 0 1 H H X

X X X X X X

Ing. Daniel Acerbi © - 2014 105 Ing. Daniel Acerbi © - 2014 106

Función de resolución en std_logic


---------------------------------------------------------
Asignación única condicionada
| U X 0 1 Z W L H - | |
Identificador <=valor1 WHEN condición1
--------------------------------------------------------- ELSE valor2 WHEN condición2
( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U | ELSE valor3 WHEN condición3

( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X |
ELSE otro_valor;
( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- | 0 |
( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 | • No exige que las condiciones sean mutuamente excluyentes.
• En esos casos se ejecutan sólo las sentencias asociadas a la primer condición
( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z |
satisfecha. El orden de sondeo fija la prioridad.
( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W | • El último else (sin when) asegura la total cobertura de los casos.
( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L | • La asignación única, si se refiere a un vector, puede ser a todos los elementos
del vector, a uno solo, o a un subconjunto.
( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H | • Se recomienda su uso cuando hay una única condición (un único when) o
cuando son varias las condiciones, son mutuamente excluyentes, y se desea
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- | - |
establecer una prioridad entre ellas.
Fuente IEEE std_logic_1164 Ing. Daniel Acerbi © - 2014 107 Ing. Daniel Acerbi © - 2014 108

Ing. Daniel Acerbi © - 2014 27


library ieee;
use ieee.std_logic_1164.all;

entity mux is Entradas


port (A, B, C: in std_logic; Salida
sal: out std_logic);
end mux;

architecture tresesta of mux is


begin El buffer 3-estados deshabilitado
queda en “Alta Impedancia”
sal <=A when C=‘0’ else ‘Z’;
sal <=B when C=‘1’ else ‘Z’;
end tresesta;
Entrada/Salida
Ing. Daniel Acerbi © - 2014 109 Ing. Daniel Acerbi © - 2014 110

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

Ing. Daniel Acerbi © - 2014 28


Ing. Daniel Acerbi © - 2014 113

Ing. Daniel Acerbi © - 2014 29

Вам также может понравиться