Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SEMANA 11
Recordemos la sesión anterior
PAL16L8 2
Recordemos la sesión anterior
3
Recordemos la sesión anterior
FPGA Xilinx Spartan-6
La placa de circuitos Atlys es una plataforma de
desarrollo de circuitos digitales completa y lista
para usar, basada en una FPGA Xilinx Spartan-6
LX45, grado de velocidad -3.
La gran colección de periféricos de gama alta y
FPGA que incluyen Ethernet Gbit, Video HDMI,
memoria DDR2 de 16 bits de 128 MB y puertos USB
y de audio hacen de la placa Atlys un host ideal
para una amplia gama de sistemas digitales,
incluido el procesador integrado Diseños
basados en MicroBlaze de Xilinx.
4
CONTENIDOS DE LA SESION
1. VHDL
2. VHDL: Entidad
3. DISEÑO DE UNA PUERTA AND
4. COMPUERTAS LOGICAS
5. MULTIPLEXORES
¿Qué es un MUX?
Lenguaje de descripción de Hardware
VHDL
VHDL
VHDL es un acrónimo de "Very Hight Speed
Integrated Circuit Hardware Definition
Lenguage".
Fue desarrollado como lenguaje de
descripción de modelado y simulación
dirigido por eventos.
Es decir, se trata de un lenguaje mediante
el cual se puede describir, analizar y
evaluar el comportamiento de un sistema
electrónico digital.
8
VHDL
VHDL es un lenguaje con una sintaxis amplia y flexible que permite el modelado
estructural, en flujo de datos y de comportamiento hardware.
Permite el modelado preciso, en distintos estilos, del comportamiento de un
sistema digital conocido y el desarrollo de modelos de simulación
9
VHDL
Estilo funcional
Utilizamos estilo funcional cuando
exponemos la manera en que
trabaja el sistema, es decir se
considera la relación que hay entre
las entradas y las salidas del
circuito, sin importar cómo este
organizado en su interior.
Por ejemplo si tenemos la tabla de
verdad, es mas fácil describir la
función del sistema.
11
SINTAXIS DE VHDL
• Comentarios: Cualquier línea que empieza por dos guiones “-- “ es un comentario.
• Símbolos especiales. De un solo carácter: + - / * ( ) . , : ; & ´ “ < > = | #; De dos
caracteres: ** => := /= >= <= --
• Identificadores. Se utilizan para dar nombre a variables, señales, nombres de
rutinas, etc. puede ser cualquier nombre compuesto por letras y números,
incluyendo el símbolo del subrayado “_”; nunca puede contener símbolos
especiales o palabras claves del VHDL ni empezar por un número o subrayado.
• Números. Cualquier número se considera que se encuentra en base 10. Se admite
la notación científica convencional para números en punto flotante. Es posible
manejar números en otras bases utilizando el símbolo del sostenido “#”.
Ejemplo: 2#11000100# y 16#c4# representan el entero 196.
12
SINTAXIS DE VHDL
• Caracteres: Es cualquier letra o carácter entre comillas simples: ´1´, ´3´, ´t´
• Cadenas. Son un conjunto de caracteres englobados por comillas dobles: “esto es
una cadena”.
• Cadenas de bits. Los tipos bit y bit_vector son de tipo carácter y matriz de
caracteres respectivamente. En VHDL se tiene una forma elegante de definir
números con estos tipos y es mediante la cadena de bits. Dependiendo de la base
en que se especifique el número, se puede poner un prefijo B (binario), O (octal),
o X (hexadecimal). Ejemplos: B”11101001”, O”126”, X”FE”.
• VHDL no distingue entre mayúsculas y minúsculas, Pero por claridad se
recomienda mantener una misma forma de escribir.
13
LISTA DE PALABRAS RESERVADAS EN VHDL
14
OPERADORES EN VHDL
• & (concatenación). Concatena matrices de manera que la dimensión de la matriz
resultante es la suma de las dimensiones de las matrices sobre las que opera.
• ** (exponencial). Eleva un número a una potencia: 4**2 es 42
• abs( ) (valor absoluto). Devuelve el valor absoluto de su argumento.
• * (multiplicación). Multiplica dos números de cualquier tipo numérico.
• / (división). Funciona con cualquier dato numérico.
• mod (módulo). Calcula el módulo de dos números.
• rem (resto). Calcula el resto de una división entera.
• + (suma y signo positivo). Indica suma o signo.
• - (resta y signo negativo). Indica resta y signo negativo.
15
OPERADORES EN VHDL
OPERADORES RELACIONALES.
Devuelven siempre un valor de tipo booleano (true o false). Los tipos con los que
pueden operar dependen de la operación.
• =, /= (igualdad, desigualdad). El primero devuelve true si los operandos son
iguales y false en caso contrario. El segundo indica desigualdad, así que funciona
al revés. Los operandos deben ser del mismo tipo.
• <=, >, >= (menor, mayor) Tienen el significado habitual. Los tipos de datos que
pueden manejar son escalares o matrices de una sola dimensión de tipos
discretos.
16
OPERADORES EN VHDL
OPERADORES LÓGICOS.
Son not, and, nand, or, nor, xor y xnor.
Actúan sobre los tipos bit, bit_vector y boolean. En un vector, las operaciones son bit
a bit
17
TIPOS DE DATOS EN VHDL
La sintaxis del VHDL es estricta con respecto a los tipos. Cualquier objeto en VHDL
debe tener un tipo.
• Enteros. Datos cuyo contenido constituye un valor numérico entero. Se definen
con la palabra range. No se dice que es un dato entero, sino que está
comprendido en cierto intervalo especificando los límites de dicho intervalo con
valores enteros. Ejemplo: type byte is range 0 to 255;
• Reales. Números en punto flotante, definidos igualmente con la palabra range.
Ejemplo: type nivel is range 0.0 to 5.0;
• Físicos. Datos que corresponden a magnitudes físicas. Tienen un valor y unas
unidades. Ejemplo: type longitud is range 0 to 1.0E9
18
VHDL: CONSTANTES, VARIABLES Y SEÑALES (SIGNALS)
Hay tres tipos de elementos en VHDL: las variables, las señales y las constantes. Las
variables y constantes son similares a lo que se encuentra en otros lenguajes. Las
señales, en cambio, son elementos con un significado enfocado a la descripción de
hardware.
En la figura, en la estructura interna, se encuentra la señal “x” como un elemento de
interconexión, esta señal se declara en la línea 9.
19
VHDL: CONSTANTES, VARIABLES Y SEÑALES (SIGNALS)
CONSTANTES
Una constante es un elemento que se inicializa a un valor determinado y que no
puede ser cambiado una vez inicializado. Ejemplos:
• constant e : real := 2.71828;
• constant retraso : time := 10 ns;
• constant max_size : natural;
20
VHDL: CONSTANTES, VARIABLES Y SEÑALES (SIGNALS)
VARIABLES
Una variable en VHDL es similar al concepto de variable en otros lenguajes.
Ejemplos:
• variable contador : natural := 0;
• variable aux : bit_vector(31 downto 0);
21
VHDL: CONSTANTES, VARIABLES Y SEÑALES (SIGNALS)
SEÑALES
Las señales se declaran igual que las constantes y variables, con la diferencia de que
las señales pueden ser normal, register o bus. Si en la declaración no se especifica
nada, se entiende que la señal es de tipo normal; para que sea de tipo bus o register
se debe declarar explícitamente con las palabras clave bus o register.
Una señal no es lo mismo que una variable, La señal no es exactamente un objeto del
lenguaje que guarda un valor, sino que lo hace en realidad es guardar un valor (o
varios) y hacerlo visible en el momento adecuado.
Esto es, se puede decir que la señal tiene dos partes, una donde se escribe y que
almacena el valor y otra que se leé y que no tiene por qué coincidir con lo que se
acaba de escribir.
Las señales también se les puede dar un valor inicial si se quiere.
• Ejemplos: signal selec: bit := ´0´;
22
UNIDADES DE DISEÑO
VHDL: ENTIDAD
VHDL: ENTIDAD (entity)
Es el bloque elemental de diseño en VHDL, Las
entidades son todos los elementos electrónicos
(sumadores, contadores, compuertas, flip-flops,
memorias, multiplexores, etc.) que forman de
manera individual o en conjunto un sistema digital.
La entidad puede representarse de muy diversas
maneras; por ejemplo, la figura muestra la
arquitectura de un sumador completo a nivel de
compuertas; ahora bien, esta entidad se puede
representar a nivel de sistema indicando tan sólo las
entradas (Cin, A y B) y salidas (SUMA y Cout) del
circuito.
24
VHDL: ENTIDAD (entity)
PUERTOS DE ENTRADA Y SALIDA
Cada una de las señales de entrada y salida en
una entidad son referidas como puerto, el cual
es similar a una terminal (pin) de un símbolo
esquemático.
Todos los puertos que son declarados deben
tener un nombre, un modo y un tipo de dato.
25
VHDL: ENTIDAD (entity)
MODOS
Permite definir la dirección en la cual el dato es transferido. Un
modo puede tener uno de cuatro valores:
• Modo in. Se refiere a las señales de entrada a la entidad. Es
unidireccional y únicamente permite el flujo de datos hacia
dentro de la entidad.
• Modo out. Indica las señales de salida de la entidad.
• Modo inout. Permite declarar a un puerto de forma
bidireccional, permite la retroalimentación.
• Modo buffer. Permite hacer retroalimentaciones internas dentro
de la entidad, pero a diferencia del modo inout, el puerto
declarado se comporta como una terminal exclusiva de salida.
26
VHDL: ENTIDAD (entity)
TIPOS DE ENTRADA/SALIDA
Son los valores (datos) que el diseñador establece para
los puertos de entrada y salida dentro de una entidad, y
que son asignados de acuerdo con las características de
un diseño en particular.
Algunos de los tipos más utilizados son el bit , el cual
tiene valores de 0 y 1 lógico; el tipo boolean (booleano)
define valores de verdadero o falso en una expresión; el
bit_vector (vectores de bits), el cual representa un
conjunto de bits para cada variable de entrada y/o
salida, y el tipo integer (entero), que representa a un
número entero.
27
VHDL: VECTORES
En VHDL las palabras binarias se conocen como vectores de bits, los cuales se consideran un
grupo y no como bits individuales. Como ejemplo considérense los vectores de 4 bits que se
muestran a continuación:
El código que se usa para declarar un vector dentro de los puertos es:
entity Sumador is
port (vector_A, vector_B: in bit_vector (3 downto 0);
vector_SUMA: out bit_vector (3 downto 0));
end Sumador
28
VHDL: VECTORES
La forma en la que se ordenan se indica como ascendente “to” o como descendente
“downto”.
Ejemplo:
29
VHDL: LIBRERIAS
Las librerías o bibliotecas incluyen tipos de datos, componentes ya hechos, funciones, entre
otros, que se pueden utilizar en los diseños.
Para incluir una librería a un diseño basta con utilizar la palabra reservada LIBRARY seguida
del nombre de la biblioteca a utilizar. Además, también es posible hacer visibles elementos
internos de estas bibliotecas con el uso de la sentencia USE, como se explicó en el apartado
anterior. En el caso de querer hacer visible todos los elementos de un paquete se puede
utilizar la palabra reservada ALL.
30
VHDL: LIBRERIAS
Una de las bibliotecas más utilizadas en el mundo de la industria es la denominada ieee, la
cual contiene algunos tipos y funciones que completan a las que vienen por defecto en el
propio lenguaje. Dentro de la librería existe un paquete denominado std_logic_1164, con el
cual se pueden trabajar con un sistema de nueve niveles lógicos, como puede ser: valor
desconocido, alta impedancia, etc.
31
Desarrollo de la lógica programable
Archivo.bit
32
FPGA: Flujo de diseño
33
FPGA: Flujo de diseño
34
FPGA: Flujo de diseño
35
VHDL
37
Puerta AND
38
Puerta AND
• Para poder usar el tipo std_logic, hay que indicar que se incluya la librería IEEE y
dentro de ella, el paquete std_logic_1164, esto se hace con las líneas:
Para incluir una librería a un diseño basta con utilizar la palabra reservada LIBRARY
seguida del nombre de la biblioteca a utilizar.
En el caso de querer hacer visible todos los elementos de un paquete se puede
utilizar la palabra reservada ALL.
39
Buffer trie-stado
40
VHDL
CIRCUITO COMBINACIONAL
CIRCUITO COMBINACIONAL
La puertas
disponibles en VHDL son:
AND, NAND, OR, NOR,
XOR, XNOR, NOT.
Para implementar varias
puertas, éstas se pueden
poner en la misma
sentencia, dentro de la
arquitectura, por ejemplo:
42
CIRCUITO COMBINACIONAL
La señal (signal) es la
representación de un
alambre en un circuito.
Éste puede ser de varios
tipos: bus, register o bit,
puede tomar algún valor
inicial y sólo se actualizan al
terminar el proceso en el
cual están siendo utilizadas
43
VARIAS PUERTAS
Un concepto muy importante en hardware y por tanto en VHDL es la concurrencia.
Esto implica que no importa que no importa el orden de las sentencias que están
en el cuerpo de una arquitectura, ya que el hardware se ejecuta
concurrentemente: El hardware siempre se está ejecutando.
Así tenemos un código equivalente:
44
VHDL
MULTIPLEXORES
MULTIPLEXOR
El Multiplexor selecciona una salida entre varias alternativas de acuerdo al valor de
selección.
Se puede implementar a partir de una sentencia concurrente que incluya condición:
46
MULTIPLEXOR
Otra manera de implementar un Multiplexor es mediante el uso de procesos.
En estos procesos la declaración de sentencias es secuencial:
Los procesos tiene una lista de sensibilidad, en la que se tienen que incluir todas las
señales leídas dentro del proceso.
47
Multiplexor con cuatro entradas y una
única salida de datos, según se muestra
en su tabla de verdad:
SENTENCIA CASE
57
VECTORES
58
Ejercicio
59
Ejercicio
8x1 Multiplexer
In this exercise, let us implement 8x1 Multiplexer using 4x1 Multiplexers and 2x1
Multiplexer. We know that 4x1 Multiplexer has 4 data inputs, 2 selection lines
and one output. Whereas, 8x1 Multiplexer has 8 data inputs, 3 selection lines
and one output.
So, we require two 4x1 Multiplexers in first stage in order to get the 8 data
inputs. Since, each 4x1 Multiplexer produces one output, we require a 2x1
Multiplexer in second stage by considering the outputs of first stage as inputs
and to produce the final output.
Let the 8x1 Multiplexer has eight data inputs I 7 to I0, three selection lines s2, s1 &
s0 and one output Y. The Truth table of 8x1 Multiplexer is shown below.
60
Ejercicio
8x1 Multiplexer
61
¿Qué es un MUX?
SIGUIENTE SESION:
Evaluación.
63
Bibliografía:
• El arte de programar VHDL: Síntesis lógica para PLD. Universidad de Deusto 2005
2da. edicion.
• VHDL, el arte de programar sistemas digitales, David G, Maxinez
• http://arantxa.ii.uam.es/~cedeps/Tutorial_ISE_Esqu.pdf
• http://eprints.ucm.es/26200/1/intro_VHDL.pdf
• http://studyres.es/doc/1743850/programaci%C3%B3n-de-
sistemas-digitales-con-vhdl
• https://www.electronics-
tutorials.ws/combination/comb_2.html
64
GRACIAS
65