Está en la página 1de 65

Edición, texto y simulación

Circuitos combinacionales, multiplexores

SEMANA 11
Recordemos la sesión anterior

DISPOSITIVOS LOGICOS PROGRAMABLES (PLD)


Un ejemplo típico de estos dispositivos es la
familia PAL16R8 (16 entradas y 8 salidas), la cual
fue desarrollada por la compañía AMD (Advanced
Micro Devices) e incluye los dispositivos PAL16R4,
PAL16R6, PAL16L8, PAL16R8, dispositivos
programables por el usuario para reemplazar
circuitos combinacionales y secuenciales SSI y MSI
en un circuito.

PAL16L8 2
Recordemos la sesión anterior

Arreglos de compuertas programables en campo FPGA


En la actualidad sólo se
encuentran comercialmente
disponibles CPLD, FPGA y
ASIC.
En los proyectos que
requieran una lógica
relativamente sencilla se
Utilizan CPLD dejando las
FPGA a los más complejos.
Sólo cuando la funcionalidad
está suficientemente bien
definida, es preferible utilizar
ASIC.

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

Los objetivos del lenguaje VHDL son el modelado


(desarrollo de un modelo para la simulación de
un circuito o sistema) y la síntesis (proceso en
donde se parte de una especificación de entrada
con un determinado nivel de abstracción y se
llega a una realización más detallada, menos
abstracta) de circuitos y sistemas electrónicos y
Ejemplo de programación VHDL estilo estructural digitales.

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.

Ejemplo de programación VHDL estilo funcional


10
VHDL
Las ventajas del uso de VHDL son las siguientes:
• Simular y comprobar un sistema desde las primeras etapas de diseño.
• Permite, siguiendo algunas reglas, generar directamente CI.
• Creación de desarrollo de código reutilizable.
• Es independiente de la tecnología al ser un estándar.
• Permite un diseño Top-Down. (de lo general a lo particular).
• Modularidad.

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;

En la última sentencia la constante max_size no tiene nungún valor asociado. Esto se


permite siempre y cuando el valor sea declarado en algún otro sitio y se hace así para
las declaraciones en paquetes.

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);

Es posible, dado un elemento previamente definido, cambiarle el nombre o ponerle


nombre a una parte. Esto se realiza mediante la instrucción alias que suele resultar
muy útil. Ejemplos:
• variable instrucción : bit_vector(31 downto 0);
• alias codigo_op : bit_vector(7 downto 0) is instrucción(31 downto 24);

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.

El nombre se utiliza como una forma de llamar al


puerto; el modo permite definir la dirección que
tomará la información y el tipo define qué clase
de información se transmitirá por el puerto.

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

DISEÑO DE UNA PUERTA AND


Puerta AND

Para diseñar un circuito en


VHDL lo mínimo que se
necesita es una entidad y
una arquitectura.

37
Puerta AND

Cabe mencionar que:


• La entidad no se podría llamar AND ya que es una palabra reservada, sin
embargo es recomendable ponerle un nombre que no describa su
funcionalidad.
• Los puertos de entrada se han declarado de tipo std_logic. Este es un tipo
de datos de un solo bit que puede tener los siguientes valores:

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

El símbolo Z indica que un nodo no está siendo


conducido ni ALTO ni BAJO. Se dice que el nodo es
flotante , de alta impedancia o de alta Z.

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

La sentencia CASE, tiene que tener


todas las alternativas, pudiendo
haber la alternativa “others” que
engloba todas las alternativas
faltantes.

57
VECTORES

Para los vectores se utiliza el tipo de


dato “STD_LOGIC_VECTOR”, donde
se declara desde el bit mas
significativo hasta el menos
significativo.

58
Ejercicio

Realice el código de programación para el multiplexor de la


figura.

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

The overall combination


of two 4x1 Multiplexers
and one 2x1 Multiplexer
performs as one 8x1
Multiplexer.

Implement the code


VHDL for this MUX

The Truth table of 8x1 Multiplexer


The block diagram of 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

También podría gustarte