Libro VHDL Lara
Libro VHDL Lara
Carrera:
Ingeniería Electrónica
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Libro de Texto:
Diseño Digital con VHDL
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Elaboró:
M.C. José Armando Lara González
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
INTRODUCCIÓN………………………………………………………………....... 1
CAPÍTULO 1………………………………………………………………………. 3
Introducción……………………………………………………………………… 3
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1.1 Elementos del lenguaje VHDL………………………………………………. 4
M.C. JOSÉ2……………………………………………………………………….
CAPÍTULO ARMANDO LARA GONZÁLEZ 36
Introducción……………………………………………………………………… 36
2.1 Modelo de Mealy y Modelo de Moore………………………………………. 41
2.2 Representación de modelos Mealy y Moore en diagramas de estado y ASM. 43
i
2.3 Diseño de FSM tipo Mealy y tipo Moore utilizando VHDL…………………. 49
2.3.1 Obtención de tablas de estado…………………………………………... 49
2.3.2 Obtención de ecuaciones de estado……………………………………... 57
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
2.3.3 Programación del archivo .VHD………………………………………... 66
2.3.4 Simulación del archivo .VHD…………………………………………... 82
2.3.5 Obtención del archivo de programación………………………………... 92
2.3.6 Programación de FPGA’s ó CPLD’s…………………………………… 98
ii
5.1.1 Introducción………………………...……….......……………………… 151
5.1.2 Diseño de una UART en VHDL…...……….......……………………… 169
5.2 Comunicación serial por I2C……...………….……………………………… 175
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
5.2.1 .Introducción a I2C..……….......…………………...…………………… 175
5.2.2 Diseño de un módulo para comunicación I2C………….......…………… 178
5.2.3 Comunicación de una FPGA con otro dispositivo por medio de I2C….. 194
5.3 Comunicación por Ethernet utilizando IP cores…….…………………..…… 205
5.3.1 Introducción a Ethernet……………..……….......……………………… 205
5.3.2 Utilización de IP cores para comunicar dos FPGA’s por Ethernet........... 206
M.C. JOSÉ ARMANDO LARA GONZÁLEZ217
5.4 Comunicación por CAN utilizando IP cores….…….…………………..……
5.4.1 Introducción al Bus CAN…………..……….......……………….……… 218
5.4.2 Utilización de IP cores para comunicar dos FPGA’s por Bus CAN........ 223
Referencias……………………………………..….…….…………………..…… 231
iii
Introducción
INTRODUCCIÓN
En el presente libro de texto, se estudian temas relacionados con la manera de diseñar
circuitos digitales utilizando un lenguaje de descripción de hardware como VHDL. El libro está
[Link]É
apegado ARMANDO
programa LARA GONZÁLEZ
de estudios de la materia de Diseño Digital con VHDL de la carrera de
Ingeniería Electrónica del Tecnológico Nacional de México. Este trabajo nace por la necesidad
de contar con un instrumento didáctico que permita impartir dicha materia en la carrera
mencionada, ya que debido al rápido avance de las técnicas de desarrollo digital, no se contaba
con un material para la impartición de dicha materia.
Capítulo 1
Programación VHDL
=============================================================
Introducción.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En el presente capítulo se estudian los elementos básicos de VHDL (Lenguaje de
Descripción de Hardware para Circuitos Integrados de Muy Alta Velocidad), lo que permitirá
al lector conocer la estructura de un programa en dicho lenguaje. En este capítulo se adquirirán
las bases necesarias para realizar un programa en VHDL. Estos conocimientos son básicos para
la comprensión de la operación de circuitos lógicos más complejos, como es el caso de los
Microprocesadores y los Microcontroladores.
Unas de las ventajas de VHDL es que los módulos creados en este lenguaje pueden ser
utilizados en diferentes diseños, lo que permite la reutilización de código. Igualmente al estar
basadoM.C.
enJOSÉ ARMANDO
un estándar LARA
(IEEE GONZÁLEZ
Std 1076-1987, IEEE Std 1076-1993) los ingenieros de las
industrias de diseño pueden usar este lenguaje para minimizar errores de comunicación y
problemas de compatibilidad.
Una de las principales diferencias del lenguaje VHDL con respecto al resto de los
lenguajes es la capacidad de ejecutar instrucciones a la vez de forma concurrente, aunque
también existen otros tipos de lenguaje que tienen esta característica.
Caracteres: son cualquier letra o carácter entre comillas simples: ‘1’, ’3’, ‘t’.
M.C.
Cadenas de bits: la LARA
JOSÉ ARMANDO cadena de bits se puede expresar, depende del tipo de base en que
GONZÁLEZ
se especifique el número usando los prefijos (B) para binario, (O) para octal y (X) para
hexadecimal, como se muestra a continuación:
Operadores Lógicos.
Estos operadores, actúan sobre los datos tipos bit, bit_vector y boolean. En el caso de
utilizar este tipo de operadores en un vector, la operación se realizará bit a bit. Estos operadores
son: AND, OR, NAND, NOR, XOR, XNOR y NOT.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Operadores Aritméticos.
+ indica suma si se encuentra entre dos operandos e indica signo positivo si se encuentra
al inicio de un operando.
- indica resta si se encuentra entre dos operandos e indica signo negativo si se encuentra
al inicio de un operando.
M.C.
*
indica
JOSÉmultiplicación
ARMANDO LARA de dos operandos de tipo numérico.
GONZÁLEZ
/ indica división de dos operandos de tipo numérico.
** indica exponencial, la base puede ser entero y real, pero el exponente sólo puede ser
real. Ejemplo: 6**3 sería 63.
ABS() esta función devuelve el valor absoluto de un argumento tipo numérico.
MOD calcula en módulo de dos números.
REM calcula el resto de una división entera.
Operadores Relacionales
Este tipo de operadores devuelven siempre un valor booleano (false o true) y los tipos
de datos que pueden manejar son siempre del tipo escalar o matrices.
==igualdad
/= desigualdad
> mayor que
M.C.
>= JOSÉ
mayorARMANDO
o igual queLARA GONZÁLEZ
< menor que
<= menor o igual que
Operadores de concatenación
& indica concatenación, concatena matrices de tal forma que la dimensión de la matriz resultante
es la M.C.
sumaJOSÉ ARMANDO
de las LARAde
dimensiones GONZÁLEZ
las matrices sobre las que opera. Ejemplo: dato<=a&b
construye la matriz dato con la matriz a en las primeras posiciones y la matriz b en las ultimas.
Operadores de desplazamiento
Estos operadores fueron integrados apenas en el VHDL’93 ampliando su funcionalidad
para el corrimiento y desplazamiento de datos.
SLL n (Shift Left Logic) desplazamiento lógico a la izquierda n veces.
SRL n (Shift Right Logic) desplazamientoM.C. JOSÉaARMANDO
lógico la derecha nLARA GONZÁLEZ
veces.
SLA n (Shift Left Arithmetic) desplazamiento aritmético a la izquierda n veces.
SRA n (Shift Right Arithmetic) desplazamiento aritmético a la derecha n veces.
ROL n (ROtate Left) rotación circular a la izquierda n veces.
ROR n (ROtate Right) rotación circular a la derecha n veces.
Ejemplos:
Tomemos en consideración el operando A=1100 1101.
A SLL 4 -- El resultado es 1101 0000
M.C.
A SLA 4 --JOSÉ ARMANDO
El resultado LARA1111
es 1101 GONZÁLEZ
(el último bit se replica)
A SRL 4 -- El resultado es 0000 1100
A SRA 4 -- El resultado es 1111 1100 (el bit más significativo se replica)
A ROL 4 -- El resultado es 1101 1100 (los primeros 4 bits pasan a la última posición)
A ROR 4 -- El resultado es 1101 1100 (los últimos 4 bits pasan a las primeras posiciones)
tipo normal. Al igual que en variables y constantes, a las señales se les puede dar un valor inicial
si se quiere o se les puede asignar un valor en cualquier momento de la ejecución del programa.
Ejemplos:
[Link]:
SIGNAL JOSÉ ARMANDO
bit :=LARA
'0';GONZÁLEZ
SIGNAL valores: bit_vector(7 DOWNTO 0) BUS := B"00000000";
Constantes
Una constante como su nombre lo dice, es un elemento al cual se le asigna un valor
determinado y no puede se puede cambiar una vez que ha sido asignado, por lo tanto conservara
su valor durante todo el programa.
Ejemplos:
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
CONSTANT m: real := 3.14159;
CONSTANT espera: time := 10 ns;
CONSTANT maximo: natural;
En esta última sentencia, la constante maximo no tiene ningún valor asociado. Esto se
es posible siempre y cuando el valor sea declarado en algún otro sitio.
Variables
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Las variables funcionan de la misma manera que una constante, con la única diferencia
de que una variable se puede alterar el valor de la misma en cualquier parte del programa. A las
variables también se les puede asignar un valor inicial.
entity mux41 is
Port ( a,b,c,d : in STD_LOGIC;
sel : in STD_LOGIC_VECTOR (1 downto 0);
sal: out std_logic);
end mux41;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En esta descripción mux41 es el nombre que del circuito, ya que se trata de un multiplexor
de cuatro a uno, es decir, el circuito permite la entrada de cuatro señales diferentes (a, b, c y d) las
cuales son tipo bit, por lo que aparecen como STD_LOGIC, pero el circuito permite solo a una entrada
alcanzar la salida (sal), esto dependiendo del valor de otra entrada de selección (sel), la cual consta
de dos bits, por esta razón aparece como STD_LOGIC_VECTOR.
b
mux41 sal
c
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
d
sel (1,0)
process(a,b,c,d,sel)
begin
case sel is
when "00" => sal <= a;
when "01" => sal <= b;
M.C.
whenJOSÉ ARMANDO
"10" => sal LARA
<= c;GONZÁLEZ
when others => sal <= d;
end case;
end process;
end Behavioral;
En el caso del process, lo veremos únicamente en este momento como una subrutina el
cual se ejecuta únicamente cuando cambie algunas de sus variables sensibles. En este caso las
variables sensibles son: a, b, c, d y sel.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
El programa básicamente esta compuesto de una función case dentro de un process, el
cual cuando sel es “00” permite a la entrada a alcanzar la salida del circuito, cuando sel es “01”
la salida será igual a la entrada b, cuando la entrada sel sea “10” la salida será igual a la entrada
c y finalmente cuando la entrada sel sea “11” la salida será igual a la entrada d.
En este orden de ideas se puede decir que VHDL tiene la capacidad de describir circuitos
permitiendo la paralelización de las instrucciones. Estas instrucciones o sentencias secuenciales
se encuentran dentro de los llamados process en VHDL. Los process son ejecutados en paralelo
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entre sí, y en paralelo con asignaciones concurrentes de señales y con las instancias a otros
componentes. Las estructuras utilizadas para la descripción de flujo de datos serán mostradas y
explicadas a continuación:
Ejemplo:
De la misma manera que en la asignación condicional, se debe incluir todos los posibles
valores que pueda tomar la expresión. Por lo tanto, si no se especifican todos los valores en las
cláusulas WHEN entonces hay que incluir la cláusula WHEN OTHERS.
block_id:
BLOCK(expresion de guardia)
cabecera
declaraciones
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BEGIN
sentencias concurrentes
END BLOCK block_id;
En otras palabras, imaginemos una memoria ROM (Read Only Memory) definida como
bloque conJOSÉ
M.C. entradas direccion
ARMANDO y enable, y salida dato; entonces estas señales se definen
LARA GONZÁLEZ
con PORT como la entidad y la conexión entre estas señales y todo lo de fuera, que vamos a
suponer que son las señales rom_dir, rom_ena y rom_dato, mediante PORT MAP, como
se muestra en el siguiente código:
rom: BLOCK
PORT(direccion: IN bit_vector(15 DOWNTO 0);
enable: IN bit;
dato: OUT bit_vector(7 DOWNTO 0));
PORT MAP(direccion=>rom_dir,enable=>rom_ena,dato=>rom_dato);
BEGIN
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
...
...
END BLOCK rom;
En este ejemplo se ha definido una memoria de solo lectura que es capaz de almacenar
65,536 datos de una longitud de un Byte, ya que su bus de direcciones es de 16 bits y el ancho
del bus de datos es de 8 bits.
con tres entradas (a, b y c) y una salida (sal) misma que proveerá un “1” cada vez que en las
entradas este presente un numero primo (2, 3, 5 y 7).
a
sand1
b sal GONZÁLEZ
M.C. JOSÉ ARMANDO LARA
sand2
c
Figura 1.2.- Circuito detector de números primos
Como se puede apreciar en la Figura 1.2, a las salidas de las compuertas AND se has
[Link]
definido JOSÉ ARMANDO
señales (sand1LARA GONZÁLEZ
y sand2) que servirán de apoyo para llevar a cabo la descripción
del circuito como flujo de datos. En las siguientes líneas se muestra la descripción de flujo de
datos para el circuito detector de números primos de tres bits mostrado en la Figura 1.2.
En esta descripción se puede destacar que se han definido las señales sand1 y sand2 con
el uso de la palabra clave signal las cuales son de tipo std_logic. Tambien se puede destacar
que todas las instrucciones son concurrentes, es decir se ejecutan cada vez que cambie algunas
de las señales que intervienen en la asignación.
a sa
b
sbJOSÉ ARMANDO LARA GONZÁLEZ
M.C.
sal
c sc
d
sd
En esta descripción se hace uso de señales las cuales se han definido como sa, sb, sc y
M.C.
sd, que JOSÉ
son las ARMANDO LARA de
señales de salida GONZÁLEZ
las compuertas AND del circuito de la Figura 1.3. Estas
señales han sido declaradas con la instrucción signal antes de bigin y dentro de la arquitectura.
De igual manera que en el ejemplo anterior, las instrucciones escritas en la descripción son
concurrentes.
SALIDAS
ANTERIORES
Los sistemas secuenciales síncronos y los sistemas secuenciales asíncronos son los dos
tipos de sistemas secuenciales que existen básicamente. El comportamiento de los primeros se
M.C. sincronizado
encuentra JOSÉ ARMANDO LARA el
mediante GONZÁLEZ
pulso de reloj del sistema, mientras que el funcionamiento
de los sistemas asíncronos depende del orden y momento en el cual se aplican sus señales de
entrada, por lo que no requieren un pulso de reloj para sincronizar su funcionamiento.
SET
D Q
CKL
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
CLR Q
Figura 1.5.- Símbolo del flip-flop tipo D.
Por otro lado en el siguiente listado se muestra la declaración secuencial de del flip-flop
de la Figura 1.5.
M.C. JOSÉ ARMANDO
entity LARA
ffd is port ( GONZÁLEZ
D,clk: in std_logic;
Q: out std_logic);
end ffd;
SET
S Q
CKL
R CLR Q
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Figura 1.6.- Símbolo del flip-flop tipo RS.
Las MSF no son diagramas de flujo y no deben confundirse con los mismos. En una
MSF las acciones se asocian con las flechas (transiciones), mientras que un Diagrama de Flujo
las acciones se asocian a los vértices de la flecha o a los bloques de proceso. Cuando una MSF
se encuentra en uno de sus estados, básicamente se encuentra "en reposo" esperando a que
sucedaM.C.
unJOSÉ ARMANDO
evento, mientrasLARA
que GONZÁLEZ
en un Diagrama de Flujo el sistema se encuentra activo
realizando una tarea. En las siguientes páginas se describen dos ejemplos de Diagramas de
Máquinas de Estado.
En esta FSM los estados s0, s1 y s2, aparecen como nodos en el diagrama. El nodo s0
representa el estado inicial y también el estado en el que entrará el circuito después que se
aplique una entrada W=0. En este estado la salida Z debe ser 0, lo cual se indica como s0/Z=0
en el nodo. El circuito debe permanecer en el estado s0 siempre que W=0, lo que se indica por
medioM.C.
de un
JOSÉarco con una etiqueta
ARMANDO W=0 que se origina y termina en este nodo. La primera
LARA GONZÁLEZ
ocurrencia de W=1 (después de la condición W=0) se registra al pasar del estado s0 al estado
s1.
reset W=1
W=0 W=1
s2/Z=1
W=1
Esta transición del estado s0 al estado s1, se indica en la gráfica por medio de un arco
que se origina en s0 y termina en s1. La etiqueta W=1 en este arco denota el valor de entrada
que ocasiona la transición. En el estado s1 la salida permanece en un valor de 0, lo cual se indica
como s1/Z=0 en el nodo.
Cuando
M.C. JOSÉ el circuito seLARA
ARMANDO hallaGONZÁLEZ
en el estado s1, cambiara al estado s2 si W aún es igual a 1
en el siguiente flanco activo del reloj. En el estado s2 la salida Z se vuelve igual a 1. Si W
permanece en 1 durante los ciclos subsiguientes del reloj, el circuito permanecerá en el estado
s2 manteniendo Z=1. No obstante, si W se vuelve 0 cuando el circuito esta ya sea en el estado
s1 ó en el estado s2, el siguiente flanco activo del reloj producirá una transición al estado s0.
En el diagrama se indica que la entrada reset se utiliza para forzar el circuito a entrar en
el estado s0, lo cual es posible independientemente del estado en el que se encuentre el circuito.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En la Tabla 1.2 se muestra la tabla de estados de la máquina de estados de la Figura 1.7,
en la cual se incluyen los estados iniciales, la variable externa, los estados finales y las salidas.
En este segundo ejemplo se trata de implementar una máquina de estado finita tipo
Mealy, la cual como se puede ver en la Figura 1.8, cuenta con cuatro estados, siendo estos S0,
S1, S2 y S3, donde el estado S0 será el estado inicial cuando la máquina sea puesta a cero.
También la máquina de estados cuenta con una entrada externa x y una salida s.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
S1
x=0/s=1 1 x=1/s=0
=
x=
/s
0/
1
x=
s=
1
RESET
S0 S3
x=0/s=0
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
x=0/s=0
x=1/s=0
S2
x=1/s=1
Por otro lado si la FSM se encuentra en el estado S1, sí x=0 pasará al estado S3,
provocando una salida de s=1, en caso de que la entrada sea x=1, la máquina pasará al estado
S0, produciendo una señal de salida s=1.
Por otro lado, y a un nivel más elevado, se pueden agrupar subprogramas, definiciones
de tipos, bloques, entre otros, en estructuras por encima de la propia descripción, esto es lo que
formaría los paquetes que a su vez, junto con otros elementos de configuración, formarían las
librerías.
En la Tabla 1.4 se muestra la estructura para los procedimientos y las funciones las que
serán explicadas más ampliamente más adelante
Muchas cosas se pueden pasar por alto en la declaración de los parámetros. Por ejemplo
si el puerto es de tipo IN entonces no hace falta poner la palabra CONSTANT adelante puesto
que se sobreentenderá que es una constante, de hecho, y si no se pone nada más, se entenderá
que los objetos son de tipo IN. Para el resto de tipos, y si no se especifica otra cosa, se entenderá
que son de tipo VARIABLE. M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En los procedimientos se pueden utilizar los tres tipos de objetos (constantes, variables
y señales), y los tres tipos de puerto (IN, OUT e INOUT). Sin embargo, en las funciones solo
se admiten los objetos de clase constante o señal y como tipo de puerto solo se admite el IN ya
que los parámetros no pueden ser modificados en una función.
Dentro de una función, no está permitido el uso de variables, puesto que la clase
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
constante ya juega el mismo papel. No es aconsejable el uso de señales como parámetros puesto
que pueden llevar a confusión dada la especial forma en que estos objetos se asignan, sin
embargo su uso es posible y hay que tener especial cuidado en el uso de los atributos ya que
Por otro lado las declaraciones dentro de una función o procedimiento pueden incluir las
mismas que incluiría un PROCESS ya que se trata también de bloques de ejecución serie. Por
lo tanto, y al igual que sucede en un proceso, no se pueden declarar señales en una función o
procedimiento. Como es de obviar, todo lo que se declara en esta parte sólo es visible en el
cuerpo de la función.
Quizás en algunas ocasiones resulte útil declarar la función antes de especificar su cuerpo
por motivos de visibilidad, por ejemplo. En estos casos la declaración se hace igual como se ha
visto pero al llegar a la palabra IS, se pone un punto y coma y se termina la declaración.
Es decir:
M.C. JOSÉ
PROCEDURE ARMANDO LARA GONZÁLEZ
nombre(parametros);
FUNCTION nombre(parametros) RETURN tipo;
1.5.2. Subprogramas.
Un subprograma no es más que una función o procedimiento que contiene una porción
de código. De igual forma que ocurre en la mayoría de los lenguajes de programación, también
el VHDL se puede estructurar mediante el uso de subprogramas.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Resulta bastante simple la forma de invocar un subprograma, se pone el nombre seguido
por los argumentos entre paréntesis, en caso de que tenga argumentos, y eso es todo. A las
funciones sólo se les puede invocar como parte de una expresión, mientras que los
procedimientos se ejecutan como si fueran una sentencia, secuencial o concurrente.
Diferentes posibles llamadas al procedimiento del ejemplo anterior, junto con otro
procedimiento que no tiene parámetros, sería:
M.C. JOSÉ ARMANDOTO
extremos(conj(4 LARA GONZÁLEZ
20),valmin,valmax);
reset; -- llamada a un procedimiento sin argumentos
extremos(min=>valmin,max=>valmax,conjunto=>conj(4 TO 20));
Los procedimientos se pueden llamar, bien desde entornos concurrentes o bien desde
entornos secuenciales. Llamar a un procedimiento desde un entorno secuencial es bien simple,
se llama como se ha visto anteriormente y ya está. Sólo hay que tener cuidado de no incluir
ninguna instrucción WAIT si es que en el proceso que llamó al procedimiento existe una lista
sensible.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1.5.3. Paquetes.
Un paquete consta de un conjunto de subprogramas, constantes, declaraciones, entre
otros, con la intención de implementar algún servicio. De esta manera se pueden hacer visibles
las interfaces de los subprogramas y ocultar su descripción.
-- Declaración de paquete
PACKAGE nombre IS
declaraciones
END [PACKAGE] [nombre];
Ya habiendo declarado los paquetes de esta forma, los elementos de los que está
compuesto, se les referencia con el nombre del paquete y del elemento, separados por un punto.
Por ejemplo, para hacer visibles la constante o los tipos del ejemplo anterior se haría
simplemente:
Aunque esto era una forma posible de referenciar los elementos de un paquete, no es la
forma usual de referenciarlos. Se suele hacer visible el paquete de manera que se puedan
referenciar algunos o todos sus elementos sin necesidad del punto. Los elementos de un paquete
se pueden hacer visibles para el fichero de diseño actual mediante el comando USE tal y como
se había mostrado anteriormente. De esta manera, el ejemplo anterior se puede simplificar
empleando un USE en la cabecera del programa:
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
USE tipos_mios.ALL
VARIABLE pc: direcc;
pila:=inicio+X"FF";
desp:=datotoint(registro);
1.5.4 Bibliotecas
Hasta ahora se han visto varios elementos del lenguaje, como pueden ser las entidades,
M.C. JOSÉ ARMANDO
las arquitecturas, LARAentre
los paquetes, GONZÁLEZ
otros. Cuando se realiza una descripción en VHDL se
utilizan estas unidades, en uno o más ficheros, éstos se denominan ficheros de diseño.
Posteriormente, estos ficheros serán compilados para obtener una librería o biblioteca
de diseño, de forma que esta biblioteca contiene los elementos que componen el circuito. La
biblioteca donde se guardan los resultados de la compilación se denomina work.
Una librería se compone de dos partes bien diferenciadas, dependiendo de las unidades
que la formen. Por un lado, están las unidadesM.C. JOSÉ ARMANDO
primarias, LARA GONZÁLEZ
que corresponderán a entidades,
paquetes y archivos de configuración. Mientras que las unidades secundarias serán
arquitecturas y cuerpos de paquetes. Por lo tanto, se puede sacar la conclusión de que cada
unidad secundaria deberá estar asociada con una unidad primaria.
Al realizar una compilación se analizarán las unidades que vayan apareciendo en el texto.
Por consiguiente, es importante establecer un orden lógico de las distintas unidades, para que
de esta forma se puedan cumplir las dependencias existentes entre las mismas. La forma que
toma M.C. JOSÉ ARMANDO
la librería una vez LARA GONZÁLEZ
compilada es muy diversa; dependiendo de la herramienta de
compilación utilizada así será el resultado obtenido, esto se debe a que en VHDL no existe un
estándar para crear bibliotecas.
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. En el caso de querer
hacer visible todos los elementos de un paquete se puede utilizar la palabra reservada ALL,
como se muestra en el siguiente listado. M.C. JOSÉ ARMANDO LARA GONZÁLEZ
LIBRARY mis_componentes;
USE mis_componentes.[Link];
En VHDL hay dos librerías que no hacen falta importarlas. Por un lado está la librería
work, que contiene las unidades que se están compilando, y por otro lado, la librería std que
contiene los paquetes standard y textio, las cuales contienen definiciones de tipos y funciones
para el acceso a ficheros de texto.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
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, entre otros. En el siguiente código se muestra parte de este paquete:
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
PACKAGE std_logic_1164 IS
TYPE std_ulogic IS('U', -- Indefinido
'X', -- Desconocido
'0', -- 0
'1', -- 1
'Z', -- Alta impedancia
'W', -- Desconocido
'L', -- LOW (weak low o 0 débil)
'H', -- HIGH (weak high o 1 débil)
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
'-' -- Desconocido
);
TYPE std_ulogic_vector IS ARRAY(NATURAL RANGE <>) OF std_ulogic;
FUNCTION resolved(s : std_ulogic_vector) RETURN std_ulogic;
SUBTYPE std_logic IS resolved std_ulogic;
TYPE std_logic_vector IS ARRAY (NATURAL RANGE <>) OF std_logic;
Al ser la librería IEEE la librería más empleada en la industria, se hará uso de aquí en
delante de forma indistinta estos tipos y los definidos en la librería std. En todos los ejemplos
M.C. JOSÉ
que siguen ARMANDO
se supondrá por LARA GONZÁLEZ
tanto que la librería IEEE ha sido cargada y que los paquetes std
logic 1164 y std logic 1164 ext son visibles.
Ejemplo 1.
En este ejemplo se trata de construir un circuito digital comparador de dos señales tipo
[Link]
bus, con JOSÉde
ARMANDO LARA
tres bits cada GONZÁLEZ
una. El circuito deberá tener tres salidas tipo bit donde se podrá
conectar un LED en cada una de ellas para verificar la funcionalidad del circuito.
La primera señal de salida se activará cuando el dato presente en la entrada p sea igual a
q, la segunda salida se activara cuando la entrada p sea mayor que la entrada q y finalmente la
tercera salida se activara cuando p sea menor que q. En la Figura 1.10 se muestra un diagrama
de bloques del circuito comparador que se desea construir.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity COMPATRES is
Port ( p : in STD_LOGIC_VECTOR (2 downto 0);
q : in STD_LOGIC_VECTOR (2 downto 0);
pigualq : out STD_LOGIC;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
pmayorq : out STD_LOGIC;
pmenorq : out STD_LOGIC);
end COMPATRES;
process(q,p)
begin
if p>q then
pigualq <= '0';
M.C. JOSÉpmayorq
ARMANDO<= '1';
LARA GONZÁLEZ
pmenorq <= '0';
else
pigualq <= '1';
M.C. JOSÉpmayorq
ARMANDO<= '0';
LARA GONZÁLEZ
pmenorq <= '0';
end if;
end process;
end Behavioral;
Como se puede apreciar en el listado anterior, dentro de la entidad se han definido las
dos entradas del circuito p y q tipo STD_LOGIC_VECTOR (2 downto 0) y las tres salidas
pigualq, pmayorq y pmenorq tipo STD_LOGIC para cumplir con el diseño.
Ejemplo 2.
M.C.
En JOSÉ ARMANDO
este ejemplo LARAdeGONZÁLEZ
se trata construir un circuito digital multiplexor de 4 a 1, de igual
forma que en el ejemplo anterior, nos apoyaremos con el diagrama de bloques de dicho
multiplexor el cual se muestra en la Figura 1.11, como una caja negra, donde no sabemos que
es lo que tiene adentro. En este diagrama se puede apreciar en consta de cinco entradas (a, b, c,
y d) y sel(1:0) y una sola salida (sal).
a
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
b
MUX 4-1 sal
c
En el siguiente listado se muestra la forma de editar el código para resolver este ejemplo
del multiplexor de cuatro entradas, es conveniente recordar que este circuito acepta cuatro
entradas, pero permite solo a una de ellas alcanzar la salida.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En el listado se puede ver como dentro de la entidad se han definido las entradas a, b, c
y d, como std_logic, así mismo sal se ha definido como salida std_logic ya que es de tipo bit.
También se ha definido sel como entrada tipo std_logic_vector debido a que es un bus de un
ancho de dos bits.
Dentro de dicho process se ha descrito un case para la entrada sel, de tal manera que
cuando sel valga “00” a la salida sal se le asigne el valor de la entrada a, cuando sel valga “01”
a la salida sal se le asigne el valor de b y así sucesivamente.
library IEEE;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
use IEEE.STD_LOGIC_1164.ALL;
entity mux41 is
Port ( a,b,c,d : in STD_LOGIC;
sel : in STD_LOGIC_VECTOR (1 downto 0);
sal: out std_logic);
end mux41;
process(a,b,c,d,sel)
begin
case sel is
when "00" => sal <= a;
when "01" => sal <= b;
when "10" => sal <= c;
when others => sal <= d;
end case;
M.C. JOSÉ
end ARMANDO
process;LARA GONZÁLEZ
end Behavioral;
Ejemplo 3.
En este ejemplo se trata de construir un circuito digital contador cíclico, mismo que
cuenteM.C.
desde 0 aARMANDO
JOSÉ 3, es decir en la salida
LARA se verá reflejada la cuenta desde “00” hasta “11”. En la
GONZÁLEZ
Figura 1.12 se muestra el diagrama de bloques del contador.
Como se puede ver, este circuito consta de tres entradas, la entrada de habilitación ce, la
entrada de reloj clk y la entrada de reset rst. Cuenta también con una salida de dos bits
denominada salida(1:0).
ce
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Salida(1:0)
clk CONTADOR
rst
M.C.
En JOSÉ ARMANDO
el siguiente LARA
listado GONZÁLEZ
se muestra la forma de estructurar el programa en VHDL para el
contador cíclico de la Figura 1.12.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity CUENTA_TRES is
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Port ( clk : in STD_LOGIC;
ce : in STD_LOGIC;
rst : in STD_LOGIC;
salida : out STD_LOGIC_VECTOR (1 downto 0));
end CUENTA_TRES;
end if;
salida<= conteo;
end process;
end Behavioral;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En el listado anterior se puede ver como dentro de la entidad se han definido las tres
entradas ce, clk y rst como entradas STD_LOGIC, mientras que la salida se ha definido como
STD_LOGIC_VECTOR debido a que consta de dos bits.
Finalmente el valor de conteo será asignado a la salida para ser despegado al mundo
real, pudiendo conectar de dos diodos emisores de luz, uno para cada bit de la salida.
Capítulo 2
En otras palabras, imaginemos una máquina capaz de seguir una secuencia finita de
pasos al introducir un conjunto de datos en ella, solo se puede leer un dato en cada paso que se
ejecute, por tanto el número de pasos a seguir está dado por el número de datos a introducir.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Cada entrada diferente genera una salida diferente, pero siempre el mismo resultado con
los mismos datos de entrada. Por lo tanto una computación es capaz de resolver un problema, sí
y solo sí tiene una solución algorítmica, es decir, puede ser descrito mediante una secuencia
finita de pasos bien definidos.
Transiciones:
Las transiciones se representan mediante flechas que indican la dirección de cambio de
un estado a otro.
Eventos:
Los eventos se anotan en el gráfico por encima de las flechas de transición.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Condiciones de Transición:
Las Condiciones de Transición se anotan por debajo de las flechas de transición, no todas
las transiciones poseen Condiciones de Transición. Una pseudotransición inicial en algunos de
los estados en un diagrama de estados, indica el estado inicial de la MSF.
Vale la pena destacar, que las MSF no son diagramas de flujo y no deben confundirse
con los mismos. En una MSF las acciones se asocian con las flechas (transiciones), mientras
M.C.
que un JOSÉ ARMANDO
Diagrama LARA
de Flujo las GONZÁLEZ
acciones se asocian a los vértices de la flecha o a los bloques de
proceso. Cuando una MSF se encuentra en uno de sus estados, básicamente se encuentra "en
reposo" esperando a que suceda un evento, mientras que en un Diagrama de Flujo el sistema se
encuentra activo realizando una tarea.
En ese mismo orden de ideas, cuando la FSM se encuentra en el estado S2, si la señal
externa vale 0, se transfiere al estado S0 y durante este estado de enlace se activa la señal de
salida OUT1=1. De igual manera si la FSM estáM.C. en el estado
JOSÉ S2 y la señal
ARMANDO LARAexterna es igual a 1,
GONZÁLEZ
permanecerá en ese mismo estado y activa la salida OUT2.
X=1/0 X=1/0
X=0/0 S0 S1 S2 1/OUT2
X=0/OUT1
Existen tres tipos de elementos utilizados en los diagramas ASM los cuales se
mencionaran a continuación:
Caja de estado:
Básicamente consta de un rectángulo que representa un estado de la FSM. Equivale a un
nodo M.C.
en elJOSÉ ARMANDO
diagrama LARA
de estado ó a GONZÁLEZ
una fila de la tabla de estado. El nombre del estado se indica
fuera de la caja, en la esquina superior izquierda. Las salidas tipo Moore se enumeran dentro de
la caja, como se muestra en la Figura 2.2.
Además, tal vez sea útil indicar una acción que debe tomarse; por ejemplo, dato=dato+1
especifica que el contenido de un dato debe incrementarse en 1. Desde luego, esto es únicamente
un modo de decir que la señal de control que hace que el dato se incremente debe validarse.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Caja de decisión:
En este caso el rombo indica que la expresión de condición establecida se va a probar y
la trayectoria de salida se elegirá en consecuencia. La expresión de condición consta de una o
más entradas a la FSM. Por ejemplo, W indica que la decisión se basa en el valor de la entrada
W, mientras que WI • W2 indica que la trayectoria de verdadero se toma si WI = W2 = 1 y la
de falso en caso contrario. En la Figura 2.3 se muestra el diagrama de la caja de decisión utilizada
en losM.C. JOSÉ ARMANDO
diagramas ASM. LARA GONZÁLEZ
En la Figura 2.5 se muestra un ejemplo de un diagrama ASM para una máquina de estado cuyo
Diagrama de Estado se muestra en la Figura 2.1. Como se puede observar el diagrama ASM
tiene mucha similitud en cuanto al funcionamiento. Estando en el estado S0, se evalúa X y si es
cero se regresa al mismo estado y si X es uno, pasa al estado S2.
[Link]
JOSÉ ARMANDO
la máquinaLARA GONZÁLEZ
de estado en S1 se evalúa X, y si es cero se regresa al estado S0 y
si X es uno, pasa al estado S2. Finalmente, estando en S2, si X es cero se activa la salida OUT1
y se regresa al estado S0 y si no se activa la salida OUT2 y se queda en ese mismo estado S2.
0
X
S1
S2
0 1
M.C. JOSÉ ARMANDO LARA GONZÁLEZ X
OUT1 OUT2
Máquina de Moore
Es un autómata de estados finitos para el cual la salida en un momento dado sólo depende
M.C. JOSÉ
de su estado en ARMANDO LARA
ese momento, GONZÁLEZ
mientras la transición al siguiente estado depende del estado en
que se encuentre y de la entrada introducida. El diagrama de estados para una máquina Moore
incluirá una señal de salida para cada estado. Comparada con la Máquina de Mealy, la cual
mapea transiciones en la máquina a salidas.
ESTADO ACTUAL
(FLIP-FLOPS)
(CIRCUITO
COMBINACIONAL)
Máquina de Mealy
Es un autómata de estados finitos para el cual genera una salida basándose en su estado
actual y una entrada. Esto significa que el Diagrama de Estados incluirá ambas señales de
entrada y salida para cada línea de transición. En contraste, la salida de una máquina de Moore
de estados finitos depende solo del estado actual de la máquina, dado que las transiciones no
tienen entrada asociada.
SinJOSÉ
M.C. embargo, para cada
ARMANDO Máquina
LARA de Mealy hay una máquina de Moore equivalente cuyos
GONZÁLEZ
estados son la unión de los estados de la máquina de Mealy y el Producto cartesiano de los
estados de la máquina de Mealy y el alfabeto de entrada. El nombre "Máquina de Mealy" viene
del Matemático e informático americano George H. Mealy, un pionero de las máquinas de
estados.
(CIRCUITO
COMBINACIONAL)
ENTRADAS
MEMORIA DE
LÓGICA DEL ESTADO
SIGUIENTE
ESTADO
ESTADO ACTUAL
(FLIP-FLOPS)
(CIRCUITO
COMBINACIONAL)
En esta sección del libro, se llevará a cabo el desarrollo de los Diagramas de Estado y
los Diagramas ASM de una máquina de estado tipo Mealy y tipo Moore tomando ejemplos para
realizar dichos diagramas. Para el desarrollo [Link] maquina tipo Mealy
JOSÉ ARMANDO se tomara
LARA un ejemplo de
GONZÁLEZ
un circuido detector de una secuencia de tres bits, mientras que para el desarrollo de la máquina
de estado tipo Moore se tomara de ejemplo un circuito contador ascendente y descendente de
tres bits. Se iniciará con la Maquina de la máquina de estado tipo Mealy.
Ejemplo de FSM tipo Mealy para obtención de Diagramas de Estado y Diagrama ASM.
Primeramente debemos saber que el sistema cuenta con tres estados, los cuales se
pueden nombrar S0, S1 y S2, pero considerando que la máquina de estado se fuera a
implementar con flip-flops se tendrían realmente cuatro estados ya que se necesitaría emplear
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
dos flip-flops, por lo que se debe considerar el cuarto estado S3. En ese estado S3, si por alguna
razón callera la máquina de estado es él, sin importar el valor de la variable de entrada x
regresaría inmediatamente al estado S0.
El diagrama de estados para cumplir con el con el planteamiento del problema, quedaría
como se muestra en la Figura 2.8, el cual consta de cuatro estados S0, S1, S2 y S3 como se
puede observar.
x=1/s=1
S2 S1
x=0/s=0
x=0/s=0
S3
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
0 1
x
S0
S1
1
x
0
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
S2
x 0
Como se puede observar e este diagrama ASM de la Figura 2.9, se tiene un diagrama
formado por los tres elementos básicos de un diagrama ASM siendo estos las cajas de estado,
las cajas de decisión y la activación de las señales Mealy.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Resulta relativamente fácil convertir un diagrama de estados a un diagrama ASM y
viceversa solo respetando las reglas mencionadas anteriormente. Para el caso del diagrama ASM
de la Figura 2.9, primeramente se evalúa la variable de entrada en el estado S3 e
independientemente de su valor, hay una transición de S3 a S0.
[Link]í
JOSÉ
es ARMANDO LARA
la forma en que se GONZÁLEZ
desarrollan los diagramas de estado y ASM para una máquina
de estado tipo Mealy. A continuación se analizará el mismo proceso con un ejemplo en una
FSM tipo Moore.
Ejemplo de FSM tipo Moore para obtención de Diagramas de Estado y Diagrama ASM.
Se desea representar una máquina de estado tipo Moore en diagrama de estado y
diagrama ASM para un circuito digital. Este circuito deberá desplegar la cuenta binaria de forma
ascendente de 0 a 3 y de forma descendente [Link] 3JOSÉ
a 0 de forma cíclica.
ARMANDO LARASe requiere una sola
GONZÁLEZ
variable externa x y cuatro estados correspondientes a los números que se desean contar de
forma ascendente y descendente. En la Figura 2.10 se muestra en diagrama de estados del
contador ascendente y descendente.
S1/01
x=1 x=1
S0/00 S2/10
x=1 x=1
x=0
x=0
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
S3/11
Por otro lado si se encuentra en cualquiera de los cuatro estados posibles y la variable de
entrada x es igual a “1”, entonces la máquina de estado cambiara del estado en que se encuentra
a un estado inferior, por ejemplo si se encuentra en el estado S2 y x es igual a “1” pasará al
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
estado S1 y la salida será la del estado S1.
S0
Z1Z0=00
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1 0
x
S1
Z1Z0=01
1 0
x
S2
Z1Z0=10
S3
Z1Z0=11
Se hará uso del software ISE (Integrated Synthesis Environment) es una herramienta
de software producida por Xilinx para la síntesisM.C. yJOSÉ ARMANDO
análisis LARAde
de diseños GONZÁLEZ
HDL. Con esta
herramienta se editará, sintetizará y depurará el programa .VHD, así como su simulación y
posterior descarga a la tarjeta de evaluación con la FPGA.
La Tabla de Estados para una FSM, se puede obtener a partir del Diagrama de Estados
o bien del Diagrama ASM. Como ya se mencionó cuando los desarrollos no son muy complejos
resulta relativamente fácil obtener la Tabla de Estados a partir del Diagrama de Estados pero
cuando se tiene una FSM compleja es conveniente partir del Diagrama ASM. En este caso
aunque el problema no es muy complejo se partirá del Diagrama ASM para la obtención de la
Tabla de Estados.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Una vez que se cuenta con el diagrama ASM se procederá a la obtención de la Tabla
de Estados de la Maquina de Mealy detectora de la secuencia de los números “101”. La Tabla
de estados resultante se muestra en la Tabla 2.1
S3
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
0 1
x
S0
0
M.C.
x JOSÉ ARMANDO LARA GONZÁLEZ
1
S1
1
x
0
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
S2
x 0
Como la FSM y el Diagrama ASM está formado por cuatro estados S0, S1, S2, S3 y
una variable de entrada, se han colocado en la Tabla 2.1 dos veces cada estado debido a que se
evalúan con cada uno de los dos valor de la variable de entrada x la cual puede ser “0” o “1”.
Una vez que se cuenta con la Tabla de Estado, la Asignación de Código a los Estados
y la Tabla de Transición del flip-flop JK, se procederá a obtener la Tabla de Estados Codificada.
Esta Tabla Codificada se muestra en la Tabla 2.4 donde se puede observar que en la primera
columna denominada Estado Actual se han [Link]
JOSÉ ARMANDO
los estadosLARA
peroGONZÁLEZ
con el código
correspondiente a cada estado, igualmente se has escrito dos veces cada estado para evaluar cada
uno de los estados con cada valor de la variable de entrada.
[Link]É
las ARMANDO LARAyGONZÁLEZ
columnas cuatro cinco se has escrito las entradas de los dos flip-flops 0 y 1,
siendo J1 y K1 las entradas del flip-flop 1, mientras que J0 y K0 son las entradas del flip-flop 0.
Estas columnas serán determinadas utilizando la Tabla de transición del flip-flop JK de la Tabla 2.3.
Si analizamos el primer caso cuando Q1t en el Estado Actual cero es “0” y Q1t+1 en el Estado
Siguiente es “0”, de acuerdo con la Tabla de transición del flip-flop JK se tendrá que J1 y K1
serán 0 y X respectivamente, donde X significa no importa.
Finalmente la salida solo se cumple cuando la FSM pasa del estado dos “10” al estado
“00” con x=1.
Se desea obtener la Tabla de Estado una FSM tipo Moore considerando el diagrama de
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
estado y diagrama ASM para un circuito digital el cual deberá desplegar la cuenta binaria de
forma ascendente de 0 a 3 y de forma descendente de 3 a 0 de forma cíclica. Se requiere una
sola variable externa x y cuatro estados correspondientes a los números que se desean contar de
forma ascendente y descendente. Dicho ejemplo fue analizado en la sección 2.2, donde se
obtuvieron los Diagramas de Estado y ASM de dicho ejemplo.
1 0
x
S1
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Z1Z0=01
1 0
x
S2
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Z1Z0=10
1 0
x
S3
Z1Z0=11
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1 0
x
Una vez que se cuenta con la Tabla de Estado, la Asignación de Código a los Estados
y la Tabla de Transición del flip-flop JK, se procederá a obtener la Tabla de Estados Codificada.
Esta Tabla Codificada se muestra en la Tabla 2.8 donde se puede observar que en la primera
columna denominada Estado Actual se han escrito los estados pero con el código
correspondiente a cada estado, igualmente se has escrito dos veces cada estado para evaluar cada
uno de los estados con cada valor de la variable M.C. JOSÉ ARMANDO LARA GONZÁLEZ
de entrada.
[Link]É
las ARMANDO LARAyGONZÁLEZ
columnas cuatro cinco se has escrito las entradas de los dos flip-flops 0 y 1,
siendo J1 y K1 las entradas del flip-flop 1, mientras que J0 y K0 son las entradas del flip-flop 0.
Estas columnas serán determinadas utilizando la Tabla de transición del flip-flop JK de la Tabla 2.7.
Si analizamos el primer caso cuando Q1t en el Estado Actual cero es “0” y Q1t+1 en el Estado
Siguiente es “0”, de acuerdo con la Tabla de transición del flip-flop JK se tendrá que J1 y K1
serán 0 y X respectivamente, donde X significa no importa.
De igual manera que en los puntos anteriores se tomaran en consideración los dos
ejemplos que se han venido manejando hasta el momento. Para desarrollar las ecuaciones de
estado de una Maquina de Mealy se empleará el ejemplo que se ha venido desarrollando el cual
se representó en el punto 2.2, la máquina de estado tipo Mealy en diagrama de estado y diagrama
ASM para un circuito digital el cual detecte unaM.C. JOSÉ ARMANDO
secuencia de númerosLARA GONZÁLEZ
binarios de tres dígitos.
A partir de esta tabla de estados se obtendrán las ecuaciones de estado de la FSM.
Por otro lado para determinar de las ecuaciones de estado de una máquina tipo Moore se
empleará el ejemplo, el cual se estudió en el punto 2.2 donde se desarrollaron las
representaciones de la máquina de estado tipo Moore en diagrama de estado y diagrama ASM
para un circuito digital. Este circuito deberá desplegar la cuenta binaria de forma ascendente de
0 a 3 y de forma descendente de 3 a 0. Se requiere una sola variable externa x y cuatro estados
correspondientes a los números que se desean contar de forma ascendente y descendente. Este
mismo ejemplo se empleó en el punto 2.3.1 para determinar la Tabla de Estados de la máquina
M.C.
tipo Moore, de la cual se partirá para obtener las JOSÉ ARMANDO
ecuaciones LARA GONZÁLEZ
de estado.
A partir de la tabla de estados codificada y excitada de la Tabla 2.9, se puede hacer los
mapas K para las entradas de los Flip-Flops y para la salida de la FSM. Para el ejemplo en
cuestión, se tendrán cinco mapas K ya que tenemos dos entradas de Flip-Flops y una salida
siendo estos mapas para J1, K1, J0, K0 y Salida.
Es conveniente recalcar que las variables de los mapas K serán los Estados Actuales
M.C. JOSÉ
y la variable ARMANDO
externa x, por loLARA
tantoGONZÁLEZ
las estados actuales y la variable externa darán la numeración
de los mapas K.
Por ejemplo para el primer estado de la Tabla 2.9 donde Q1t =0, Q0t =0 y x=0 esa será
la casilla 0 en el mapa K y en el segundo estado, donde Q1t =0, Q0t =0 y x=1 será la casilla 1 y
así sucesivamente. De esta forma al llenar el mapa K para J1, se tendrá un “0”en las casillas 0, 1
y 3 de acuerdo con la columna de J1 de la Tabla 2.9, mientras que en la casilla 2 se tendrá un
“1”. Finalmente en las casillas del 4 al 7 se tendrán X. Es conveniente recordar que X tiene un
valor de “no importa”. M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Q0X
Q1 00 01 11 10
0 0 0 0 1
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1 X X X X
Figura 2.14.- Mapa K para J1.
Una vez que ya se ha llenado el mapa K se procederá a vaciarlo para extraer la primera
ecuación de estado correspondiente a J1, agrupando el “1” de la posición 2 del mapa con la X de
la posición 6 como se muestra en la Figura 2.15
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Q0X
Q1 00 01 11 10
0 0 0 0 1
1 X X X X
Figura 2.15.- Mapa K para J1.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Como se puede observar en la Figura 2.15, Q1 cambia de “0” a “1” por lo que se
elimina, mientras que Q0 permanece en “1” y x permanece en “0” por lo que la ecuación para la
entrada J1 será la que se escribe en la Ecuación 2.1.
𝐉𝟏 = 𝐐𝟎 𝐱̅ …………….………………….Ecuación 2.1
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
De esta misma manera se obtendrán las cuatro ecuaciones faltantes, llenando los
mapas K a partir de la Tabla de Estados y extrayendo la ecuación de estado. A continuación se
obtendrá la ecuación para la entrada K1. Llenando el mapa K quedaría como se muestra en la
Figura 2.16.
Q0X
Q1 00 M.C.
01 JOSÉ
11 ARMANDO
10 LARA GONZÁLEZ
0 X X X X
1 0 1 1 1
Figura 2.16.- Mapa K para K1.
Relacionando dos veces en grupos de cuatro dígitos, se obtendrá la ecuación para K1,
la cual se muestra en la Ecuación 2.2.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
𝐊 𝟏 = 𝐱 + 𝐐𝟎 …………………………..Ecuación 2.2
Q0X
Q1
00 01 11 10
0 0 1 X X
1 0 0 X X
Figura 2.17.- Mapa K para J0.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Relacionando el único “1” lógico que hay en el mapa con la X contigua, como se
muestra en la Figura 2.17 se obtiene la Ecuación 2.3
[Link]
JOSÉ ARMANDO LARA GONZÁLEZ
tenemos el mapa K para la entrada K0, tomando en consideración la
tabla de estados en la columna K0, tendremos el mapa mostrado en la Figura 2.18.
Q0X
Q1 00 01 11 10
0 X X 0 1
1 X M.C.
X JOSÉ
1 ARMANDO
1 LARA GONZÁLEZ
Relacionando los dos “1” lógicos de las casillas 3 y 6 con las “X” de las casillas 0 y 4
se obtendrá el término 𝐱̅. Por otro lado relacionando los dos “1” lógicos de las casillas 6 y 7 con
las “X” de las casillas 4 y 5 se obtiene el término Q1. De esta manera se obtiene en conjunto la
Ecuación 2.4
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
𝐊 𝟎 = 𝐱̅ + 𝐐𝟏 ………….………………….Ecuación 2.4
Q0X
Q1 00 01 11 10
0 0 0 0 0
1 0 1 0 0
M.C. K
Figura 2.19.- Mapa JOSÉ
paraARMANDO
Salida. LARA GONZÁLEZ
En este caso no se puede relacionar ese “1” con ningún otro digito por lo que saldrá
del mapa K de la misma manera como entro, quedando la ecuación para la salida como se
muestra en la Ecuación 2.5.
𝐒 = 𝐐𝟏 ̅̅̅̅
𝐐𝟎 𝐱………….………………….Ecuación 2.5
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Una vez que hemos obtenido las cinco ecuaciones podemos enlistarlas como se
muestra a continuación:
1. 𝐉𝟏 = 𝐐𝟎 𝐱̅
2. 𝐊 𝟏 = 𝐱 + 𝐐𝟎
3. ̅̅̅̅𝟏 𝐱
𝐉𝟎 = 𝐐
4. 𝐊 𝟎 = 𝐱̅ + 𝐐𝟏
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
5. 𝐒 = 𝐐𝟏 ̅̅̅̅
𝐐𝟎 𝐱
[Link]
Ejemplo JOSÉ
FSMARMANDO LARA
tipo Moore GONZÁLEZ
para obtención de Ecuaciones de Estado.
En esta sección se empleará el ejemplo del diseño de una máquina de estado tipo
Moore, consistente en un circuito digital que muestra la cuenta ascendente de 0 a 3 y
[Link]
JOSÉ ARMANDO
esta LARA
tabla, sería GONZÁLEZ
posible extraer las ecuaciones directamente, pero resulta más
conveniente reducir dichas ecuaciones a través de mapas de Kanaugh, también conocidos como
mapas K, con la finalidad de simplificar el circuito y hacer más sencilla su implementación
física o bien para simplificar el código cuando se desarrolla un programa en un lenguaje HDL
(Lenguaje de Descripción de Hardware).
Una vez que se cuenta con la tabla de estados excitada y codificada que se muestra en la
Tabla 2.10, se procederá a la obtención de las ecuaciones de estado de la FSM tipo More, donde
se deben obtener 6 ecuaciones, ya que hay que M.C. JOSÉ ARMANDO
recordar que se haránLARA GONZÁLEZ
mapas K para las cuatro
entradas de los flip-flops y las dos salidas (J1, K1, J0, K0, S1 y S0).
Es conveniente recalcar que las variables de los mapas K serán los Estados Actuales
y la variable de externa x, por lo tanto las estados actuales y la variable externa darán la
numeración de los mapas K.
[Link]
JOSÉ ejemplo
ARMANDOpara el primer
LARA estado de la Tabla 2.10 donde Q1t =0, Q0t =0 y x=0, esa
GONZÁLEZ
será la casilla 0 en el mapa K y en el segundo estado, donde Q1t =0, Q0t =0 y x=1 será la casilla
1 y así sucesivamente. De esta forma al llenar el mapa K para J1, se tendrá un “0”en las casillas
0 y 3 de acuerdo con la columna de J1 de la Tabla 2.10, mientras que en las casillas 1 y 2 se
tendrá un “1”. Finalmente en las casillas del 4 al 7 se tendrán X. Es conveniente recordar que X
tiene un valor de “no importa”.
Q0X
Q1 00 01 11 10
0 0 1 0 1
1 X X JOSÉ
M.C. X ARMANDO
X LARA GONZÁLEZ
Figura 2.20.- Mapa K para J1.
Una vez que ya se ha llenado el mapa K se procederá a vaciarlo para extraer la primera
ecuación de estado correspondiente a J1, agrupando el “1” de la posición 1 del mapa con la X de
la posición 5 y el “1” de la posición 5 con la X de la posición 6, como se muestra en la Figura
2.21
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Q0X
Q1 00 01 11 10
0 0 1 0 1
1 X X X X
Como se puede observar en la Figura 2.21, en el par de datos formados por el “1” de
la posición 1 con la X de la posición 5 del mapa, Q1 cambia de “0” a “1” por lo que se elimina,
mientras que Q0 permanece en “0” y x permanece en “1” quedando el termino ̅̅̅̅ 𝐐𝟎 𝐱. Por otro
lado para el par de datos formado por el “1” de la posición 5 con la X de la posición 6, Q1 cambia
también de “0” a “1” por lo que se elimina, mientras que Q0 se mantiene en “1” y X se mantiene
en “0”, quedando el termino 𝐐𝟎 𝐱̅, por lo que la ecuación completa para la entrada J1 será la que
se escribe en la Ecuación 2.6.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
̅̅̅̅𝟎 𝐱 + 𝐐𝟎 𝐱̅ = 𝐐𝟎 ⊕ 𝐱 …………….………………….Ecuación 2.6
𝐉𝟏 = 𝐐
De esta misma manera se obtendrán las cinco ecuaciones faltantes, llenando los mapas
K a partir de la Tabla de Estados y extrayendo la ecuación de estado.
Q0 X
Q1 00 01 11 10
0 X X X X
1 0 1 0 1
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Figura 2.22.- Mapa K para K1.
Q0X
Q1
00 01 11 10
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
0 1 1 X X
1 1 1 X X
Figura 2.23.- Mapa K para J0.
Relacionando los cuatro “1” lógicos de la izquierda del mapa K con las cuatro X de la
derecha del mapa, como se muestra en la Figura 2.23 se obtiene la Ecuación 2.8
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
𝐉𝟎 = 𝐕𝐜𝐜………….………………….Ecuación 2.8
1 X X 1 1
Figura 2.24.- Mapa K para K0.
𝐊 𝟎 = 𝐕𝐜𝐜………….………………….Ecuación 2.9
Q0X
Q1
00 01 11 10
0 0 0 0 0
1 1 1 1 1
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Figura 2.25.- Mapa K para S1.
En este caso se relacionan los cuatro unos de la parte inferior del mapa, quedando la
ecuación para la salida como se muestra en la Ecuación 2.10.
𝐒𝟏 = 𝐐𝟏 ………….………………….Ecuación 2.10
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Finalmente se plantea el mapa K para la salida S0, tomando de igual manera en
consideración la columna correspondiente a la salida S0 en la Tabla 2.10. De tal manera que el
mapa K para dicha salida, quedará integrado como se muestra en la Figura 2.26.
QX
Q1 0
00 01
M.C. JOSÉ ARMANDO LARA GONZÁLEZ 11 10
0 0 0 1 1
1 0 0 1 1
Figura 2.26.- Mapa K para S0.
En este caso se relacionan los cuatro unos de la derecha del mapa, como se muestra en
la Figura 2.26, quedando la ecuación para la salida S0 como se muestra en la Ecuación 2.11.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
𝐒𝟎 = 𝐐𝟎 ………….………………….Ecuación 2.11
Una vez que hemos obtenido las seis ecuaciones podemos enlistarlas como se muestra
a continuación:
1. 𝐉𝟏 = 𝐐𝟎 ⊕ 𝐱
2.M.C.
𝐊 𝟏JOSÉ
= 𝐐𝟎ARMANDO
⊕𝐱 LARA GONZÁLEZ
3. 𝐉𝟎 = 𝐕𝐜𝐜
4. 𝐊 𝟎 = 𝐕𝐜𝐜
5. 𝐒𝟏 = 𝐐𝟏
6. 𝐒𝟎 = 𝐐𝟎
Para cumplir con lo planteado anteriormente, se desarrollará el archivo .VHD para una
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
FSM tipo Moore, para un circuito digital el cual deberá desplegar la cuenta binaria de forma
ascendente de 0 a 3 y de forma descendente de 3 a 0, dependiendo del valor de x. Se requiere
una sola variable externa x y cuatro estados correspondientes a los números que se desean contar
de forma ascendente y descendente. Dicho ejemplo fue analizado en la sección 2.2, donde se
obtuvieron los Diagramas de Estado y ASM del mismo.
Como se puede apreciar en la Figura 2.27 la máquina de estado en cuestión, está formada
básicamente por tres bloques correspondientes a la lógica del siguiente estado, la memoria de
estado y la lógica de salida. M.C. JOSÉ ARMANDO LARA GONZÁLEZ
D Q
S(1,0)
PROXIMO ACTUAL
LOGICA DEL LOGICA DE SALIDA
SIGUIENTE MEMORIA DE MOORE
X ESTADO ESTADOS
entity moorelibro is
M.C. JOSÉ ARMANDO
Port ( clk : LARA GONZÁLEZ
in STD_LOGIC;
rst : in STD_LOGIC;
x : in STD_LOGIC;
s : out STD_LOGIC_VECTOR (1 downto 0));
end moorelibro;
En la entidad descrita anteriormente, se ha declarado como entradas los pines clk, rst y
x (STD_LOGIC), mientras que s se ha descrito como bus (STD_LOGIC_VECTOR (1 downto 0))
de salida de 2 bits.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
reg: process(clk)
begin
if clk'event and clk='1'
then if rst = '1'
M.C. JOSÉthen
ARMANDO
actualLARA GONZÁLEZ
<= I0;
else actual <= proximo;
end if;
end if;
end process reg;
Como se puede observar también en la descripción del registro de estado, dentro del
process solo se ha considerado una sola variable sensible siendo esta el clk, a pesar de que
existen otras entradas en el flip-flop (próximo y rst), la razón es porque el flip-flop solo tendrá
cambios cuando exista un flanco de transición activo en el pulso de reloj. En este código se
verifica en el primer if si existe un flanco de transición positiva en el pulso de reloj y si esto se
cumple, en el siguiente if se verifica si esta activada la señal de reset y en caso positivo a la
salidaM.C.
se leJOSÉ
asigna el estado LARA
ARMANDO I0 (estado inicial), en caso contrario el dispositivo actúa como un
GONZÁLEZ
registro transparente asignando la D a la salida Q (actual=próximo).
prox: process(actual, x)
begin
case actual is
when I0 => case x is
when '0' => proximo <= I1; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
when others => proximo <= I3;
end case;
Finalmente se desarrolla la lógica de salida de la FSM, para llevar a cabo esta tarea se
M.C.
pueden JOSÉ
usar ARMANDO
muchas LARA de
herramientas GONZÁLEZ
programación en VHDL como es el caso de un with-select
pero en esta ocasión se propone el uso de un case para desarrollar este bloque.
En este bloque básicamente lo que se hace es asignar un valor de salida a cada uno de
los estados, como se puede apreciar en el siguiente listado correspondiente al código de la lógica
de salida. Por ejemplo cuando la FSM este en el estado I0, la salida s tomará el valor de “00” y
cuando se encuentre la FSM en el estado I1, s tomará el valor de “01” y así sucesivamente.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
act: process(actual)
begin
case actual is
when I0 => s <= "00";
when I1 => s <= "01";
when I2 => s <= "10";
when I3 => s <= "11";
end case;
end process act;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entity moorelibro is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
x : in STD_LOGIC;
s : out STD_LOGIC_VECTOR (1 downto 0));
end moorelibro;
begin
prox: process(actual, x)
begin
case actual is
when I0 => case x is
when '0' => proximo <= I1;
when others => proximo <= I3;
end case;
M.C. JOSÉwhen
ARMANDO LARA GONZÁLEZ
I1 => case x is
when '0' => proximo <= I2;
when others => proximo <= I0;
end case;
act: process(actual)
begin
case actual is
when I0 => s <= "00";
when I1 => s <= "01"; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
when I2 => s <= "10";
when I3 => s <= "11";
end case;
end process act;
reg: process(clk)
begin
if clk'event and clk='1'
then if rst = '1'
then actual <= I0;
M.C. JOSÉelse
ARMANDO
actualLARA GONZÁLEZ
<= proximo;
end if;
end if;
end process reg;
end Behavioral;
Una vez que se cuenta con este código, se puede obtener el archivo .VHD, para lo cual
se hará uso, como ya se había mencionado en el capítulo I, del programa ISE Desing Suite
donde se editaran, sintetizaran, depuraran y simularán los programas desarrollados en esta
sección. En la Figura 2.29 se muestra el icono M.C. JOSÉ ARMANDO
correspondiente LARA GONZÁLEZ
al programa que será empleado.
De esta manera se debe de ver el icono del programa una vez que ha sido instalado en la
computadora.
Una vez instalado el programa se dará doble click en el icono de la Figura 2.29 para
ejecutar dicho programa apareciendo la imagen de la Figura 2.30. En esta pantalla se selecciona
en la barra de herramientas la opción File y dentro de este se selecciona New Project, como se
muestra en el recuadro en la pantalla principal de la Figura 2.30. Una vez que se ha realizado lo
anterior aparecerá la ventana de la Figura 2.31 para crear un nuevo proyecto.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En esta ventana de la Figura 2.31, se establecerá el nombre del proyecto, el cual en este
ejemplo se le ha asignado del nombre de FSMmoore como se puede observar en la ventana
mencionada. Así mismo se ha determinado una carpeta donde se guardará dicho proyecto,
siendo esta la ruta C:\PRUEBAS-CURSO. También dentro de esta ventana se puede agregar
de forma opcional un comentario para describir el funcionamiento del proyecto. Finalmente se
define el tipo de fuente para el proyecto como HDL. Posteriormente seleccione Next.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
[Link]
Figura 2.32. Ventana para crear JOSÉ proyecto
ARMANDO LARA GONZÁLEZ
en VHDL.
Una vez que se han definido los parámetros de la ventana de la Figura 2.32, se selecciona
la opción Next con lo que emergerá la ventana de Project Summary o ventana de resumen del
proyecto de la Figura 2.33. En esta ventana se muestra un resumen de las especificaciones
hechas por el usuario, donde se podrá verificar si son los datos que el usuario desea especificar.
M.C.
En JOSÉ ARMANDO
caso de que estosLARA
datosGONZÁLEZ
especificados sean correctos, se selecciona la opción Finish
para pasar al siguiente paso y en caso de que exista algún error en las definiciones de estos
parámetros, se selecciona la opción Back para hacer las correcciones pertinentes.
En esta ventana de la Figura 2.36 como se puede observar, se definen los puertos para el
modulo el cual consta de tres entradas tipo bit (clk, rst y x) y una salida tipo vector de dos bits
llamada s(1,0). Una vez definidas estas entradas y salidas del módulo se aplica un click en la
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
opción Next con lo que aparecerá una ventana de resumen la cual se muestra en la Figura 2.37.
Esta ventana permite al usuario verificar que los puertos de entrada y salida sean los
correctos para el modulo y en ese caso se debe aplicar un click en la opción Finish. En caso de
que los puertos de entrada y salida que aparecen en este resumen sean incorrectos se debe aplicar
un click en la opción Back con la finalidad de regresar a la ventana anterior y corregir los errores
cometidos. Una vez que se ha verificado que los puertos de entrada y salida del módulo sean los
correctos, después de aplicar un click en la opción Finish aparecerá la ventana de la Figura 2.38,
que corresponde al espacio de trabajo del programa ISE Desing Suite. Como se puede observar aparece
ya definida la entidad dentro del espacio de trabajo, soloJOSÉ
M.C. faltaría editar el programa
ARMANDO que se desarrollado
LARA GONZÁLEZ
en el inicio de este tema, el cual sería editado en el área marcada con el texto AGREGAR CODIGO en
el siguiente listado extraído de la ventana de trabajo del programa.
entity moorelibro is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
x : in STD_LOGIC;
s : out STD_LOGIC_VECTOR (1 downto 0));
end moorelibro;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
architecture Behavioral of moorelibro is
begin
AGREGAR CÓDIGO
end Behavioral;
Ya que el código completo ha sido agregado, se procede a la síntesis del programa, dando
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
un click en la opción Synthesize-XST en la ventana del recuadro 1 de la Figura 3.39.
M.C.
Como se puede apreciar en la Figura 2.40 JOSÉ ARMANDO
la máquina de estadoLARA GONZÁLEZ
en cuestión, está formada
básicamente por tres bloques correspondientes a la lógica del siguiente estado, la memoria de
estado y la lógica de salida.
X MEMORIA DE
ESTADOS
LÓGICA DEL
SIGUIENTE CLK (FLIP- FLOP)
ESTADO
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
RESET
FSM S
CLK
MEALY
RST
entity mealylibro is
Port ( clk : in STD_LOGIC;
M.C. JOSÉ ARMANDO
rst LARA
: in GONZÁLEZ
STD_LOGIC;
x : in STD_LOGIC;
s : out STD_LOGIC);
end mealylibro;
En la entidad descrita anteriormente, se ha declarado como entradas los pines clk, rst y
x (STD_LOGIC), mientras que s se ha descrito como un pin de salida también del tipo
(STD_LOGIC). En esta entidad todas las entradas y salidas del circuito, son tipo bit, es decir no
tiene entradas o salidas tipo bus.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
process(clk)
begin
if clk'event and clk='1'
then if rst = '1'
M.C. JOSÉthen
ARMANDO
actualLARA GONZÁLEZ
<= I0;
else actual <= proximo;
end if;
end if;
end process;
Es la descripción de este registro en VHDL del listado anterior, se puede observar que
se encuentra dentro de un process, de igual manera se describirán dentro de un process la lógica
del siguiente estado y la lógica de salida, por lo que el orden en que se describan dentro del
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
programa completo no importará.
Continuando con el desarrollo, se hará uso de un process donde las variables sensibles
serán las entradas actual y x, dentro del cual se tendrá un case para evaluar el estado actual y el
valor de la variable de entrada x y en función de esos valores tomar la decisión de cambio de
estado y de activar o no la salida s de la FSM tipo Mealy.
En este listado en VHDL se puede ver en el primer case, como se evalúa el estado actual
I0 y si x es igual a “0” la maquina se quedará en el mismo estado y la salida no se activa. De
igual forma estando la maquina en I0 si x es igual a “1” la maquina pasa al estado I1 debido a
que el primer número de la secuencia es “1” pero la salida s no se activa, debido a que
M.C. JOSÉ
únicamente ARMANDO
ha recibido LARAdigito
el primer GONZÁLEZ
correcto de la secuencia.
process(actual, x)
begin
case actual is
M.C. JOSÉwhen I0 => LARA GONZÁLEZ
ARMANDO
if x='0' then proximo <= I0; s <= '0';
else proximo <= I1; s <= '0';
end if;
when I1 =>
if x='0' then proximo <= I2; s <= '0';
else proximo <= I1; s <= '0';
end if;
when I2 =>
if x='0' then proximo <= I2; s <= '0';
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
else proximo <= I0; s <= '1';
end if;
when I3 =>
if x='0' then proximo <= I0; s <= '0';
else proximo <= I0; s <= '0';
end if;
end case;
end process;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entity mealylibro is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
x : in STD_LOGIC;
s : out STD_LOGIC);
end mealylibro;
process(actual, x)
begin
case actual is
when I0 =>
if x='0' then proximo <= I0; s <= '0';
else proximo <= I1; s <= '0';
end if;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
when I1 =>
if x='0' then proximo <= I2; s <= '0';
else proximo <= I1; s <= '0';
end if;
when I2 =>
if x='0' then proximo <= I2; s <= '0';
else proximo <= I0; s <= '1';
end if;
process(clk)
begin
if clk'event and clk='1'
then if rst = '1'
M.C. JOSÉthen
ARMANDO
actualLARA GONZÁLEZ
<= I0;
else actual <= proximo;
end if;
end if;
end process;
end Behavioral;
Una vez que se cuenta con este código, se puede obtener el archivo .VHD, para lo cual
se harán los mismos pasos que en el ejemplo de la FSM tipo Moore que cuenta de forma
ascendente y descendente, únicamente [Link]É ARMANDO
código LARA GONZÁLEZ
de programación de la máquina de
estado, pero el procedimiento es exactamente el mismo.
Para cumplir con este punto, se hará la simulación de la máquina de Moore, que se ha
venido trabajando, misma que consiste de una máquina de estado que cuenta de forma
ascendente y descendente de 0 a 3 y de 3 a 0, respectivamente. Es conveniente recordar que se
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
obtuvo el archivo .VHD para dicha máquina de estado en el punto 2.3.3, el cual será simulado
para comprobar su correcto funcionamiento, en esta sección. En la Figura 2.42 se muestra la
pantalla principal del programa ISE Desing Suite con el programa .VHD de la FSM tipo Moore
mencionada anteriormente.
Para iniciar con la simulación es necesario forzar el clk y las entradas rst y x como se
explicara a continuación y una vez establecidos los valores deseados para dichas variables, se
da un click en el icono de un paso de simulación (run for the time specified), marcado con el
recuadro número 2 en la Figura 2.44.
[Link]
A continuación se deberá forzar la señal JOSÉ ARMANDO
entrada rst, esLARA
decir GONZÁLEZ
establecer un valor
determinado a dicha entrada, con la finalidad de proceder a la simulación de la FSM. En la
Figura 2.47 se muestra la forma de asignar un valor a la entrada rst.
Para forzar un valor en la entrada rst, primeramente se coloca el cursor donde está la U
del rst, en la posición marcada en el recuadro rojo número 1 de la Figura 2.47 y se aplica un
click derecho, para que aparezca la ventana que se muestra en el centro de la figura. En esta
ventana central se seleccionará la opción Force Constant marcada con el recuadro color rojo
número 2.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Una vez que se ha hecho lo anterior, aparecerá la ventana Force Selected Signal que se
muestra en la Figura 2.48.
En la ventana Force Selected Signal se coloca un dato binario de “0” o “1” en la ventana
Force to Value del recuadro número 2. En esta ocasión se ha colocado un cero lógico para esa
señal de rst tome el valor de cero lógico. Es posible cambiar el formato de los numero que se
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
van a asignar a la constante en la ventana Value Radix marcada con el recuadro número 1. En
esta ventana se puede cambiar de valor binario a Hexadecimal, Decimal sin signo, decimal con
signo, Octal o ASCII. En esta ocasión lo dejamos en binario.
M.C. JOSÉFigura
ARMANDO2.49.- LARA GONZÁLEZ
Ventana de simulación para forzar la entrada externa x.
Una vez que se ha colocado el cero lógico en la señal de entrada x, se aplica un click en
la opción OK, con lo que quedaría forzada la señal x y por ende, quedarían forzadas todas las
señales que intervienen en la máquina de estado, por lo que ya estaría lista para ser simulada.
M.C. Signal
Figura 2.50.- Ventana Force Selected JOSÉ ARMANDO
para forzar laLARA GONZÁLEZ
entrada x.
Para llevar a cabo la simulación, solamente basta con aplicar un click en el icono de paso
de simulación, el cual se ha circulado en la ventana de simulación de la Figura 2.51. Unos
segundos después aparecerán las gráficas resultantes de la simulación como se puede ver en la
mencionada figura.
Como se puede apreciar en las gráficas de salida de la simulación, del tiempo t0 a t1 los
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
valores de las variables corresponden a los valores iniciales por default del programa antes de
aplicar el paso de simulación. En el periodo comprendido de t1 a t2 se presenta el semiciclo
negativo clk, mientras que rst y x toman el valor de “0” habiendo sido forzados anteriormente
con estos valores. Note como s y actual y no sufren cambios aún, debido a que solo cambiarán
con el flanco de transición positiva del pulso de reloj. En el caso de la variable próximo, este si
cambia de I3 a I1, esto se debe a que al estar un valor de x igual a “0” entiende que la cuenta
será ascendente y que si el estado actual es I0, el estado próximo será I1.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Para continuar con la simulación será necesario forzar la señal de entrada externa x a un
valor de “1” con la finalidad de que la FSM cuente ahora de forma descendente. Aplicamos los
pasos aprendidos líneas arriba para hacer el forzado de x a un valor de “1”.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Como se puede apreciar en las gráficas de salida de la simulación de la Figura 2.52., del
tiempo t0 a t1 los valores de las variables corresponden a los valores con x igual a “0” donde la
maquina estaba contando de forma ascendente. Al aplicar el paso de simulación en t1,
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
inmediatamente x toma el valor de “1”. En el periodo comprendido de t1 a t2 se presenta el
semiciclo negativo clk, mientras que rst es “0” y x tiene el valor de “1” habiendo sido forzados
anteriormente con estos valores. Note como s y actual y no sufren cambios aún, debido a que
solo cambiaran con FTP. En el caso de la variable próximo, este si cambia a de I2 a I1, esto se
debe a que al estar un valor de x igual a “1” entiende que la cuenta será descendente y que si el
estado actual es I2, el estado próximo será I1.
Exactamente cuando inicia el tiempo t2 se presenta el primer FTP, lo que provoca que
la salida s pase de “10” a “01”. En el segundo FTP la salida cambia a “00”, en el tercer FTP la
salida cambia a “11”, mientras que en el cuarto FTP la salida toma el valor de “10” y en el quinto
FTP la salida cambia a “01” y finalmente el sexto FTP la salida cambia a “00”. Con esto se
comprueba finalmente el correcto funcionamiento de la FSM ya que con estos valores se
comporta como un contador cíclico descendente de 3 a 0.
Para explicar la forma de generación del archivo .BIT, nuevamente se hará uso de la
máquina de Moore que cuenta de forma ascendente y descendente de 0 a 3 y de 3 a 0,
respectivamente. Es conveniente recordar que se obtuvo el archivo .VHD para dicha máquina
de estado en el punto 2.3.3, el cual fue simulado para comprobar su funcionamiento en el punto
2.3.4. En el presente punto se generará el archivoM.C. JOSÉ ARMANDO
de programación, paraLARA GONZÁLEZ
que este sea descargado
a una FPGA que para este caso, será la Digilent Basys2 Spartan-3E FPGA Board.
FSM S(1,0)
CLK
MOORE
RST
Lo primero será abrir el archivo .VHD de la máquina de estado tipo Moore de la cual de
desea hacer el archivo de programación y cambiar a modo de implementación como se muestra
en el recuadro número 1 de la Figura 2.54. Posteriormente se deberá colocar el cursor del mouse
sobreM.C. JOSÉ ARMANDO
el nombre LARA
del programa GONZÁLEZcomo se muestra en el recuadro número 2 y dar
(Moorelibro)
doble click para que aparezca la ventana emergente, donde se seleccionará la opción New
Source como se muestra en el recuadro número 3.
FiguraARMANDO
M.C. JOSÉ 2.54.- Ventana
LARApara agregar el archivo de restricciones del usuario
GONZÁLEZ
Ya que se seleccionó la opción New Source aparecerá la ventana New Source Type que
se muestra en la Figura 2.55
En esta misma ventana de resumen se puede ver en la última línea, como se muestra el
nombre del proyecto al cual fue asociado el archivo de restricciones del usuario, siendo este, el
proyecto denominado moorelibro.
En la ventana de edición del UCF de la Figura 2.58, como se puede ver se han editado5
líneas, cada una corresponde a la ubicación de las entradas y salidas de la FSM tipo Moore
dentro de la tarjeta Digilent Basys2 Spartan-3E FPGA. En otras palabras a cada una de las
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entradas y salidas de la maquina se le asigna un pin o pines, por donde entrará o saldrá la
información.
Por ejemplo en la línea uno se ha asignado a la señal de entrada rst el switch deslizable
SW1, mientras que en la línea 2, se describe que en el switch SW0 de la FPGA se aplicará la
señal externa x. Por otro lado en la línea 3, a la señal de entrada de la máquina de estado clk, se
le ha asignado la señal primaria del oscilador interno de la FPGA denominada MCLK. En lo
que se refiere a las líneas 4 y 5 para la salida s(1,0), se ha asignado a s0 el LED6, mientras que
a la salida s1 se le ha asignado el LED7. M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En este punto se verá la forma de programar una FPGA con el fin de poner en
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
funcionamiento la FSM. Cuando se ha generado el programa .BIT resulta relativamente fácil
programar un CPLD ó una FPGA haciendo uso del programa Digilent Adep. En la Figura 2.62
se muestra el icono de la aplicación Digilent Adep. Este programa tienen la función de descargar
el programa .BIT al dispositivo de hardware, que este caso será una FPGA Digilent Basys2
Spartan-3E FPGA Board, la cual deberá ser conectada a la computadora personal donde se ha
instalado previamente el programa para descargar los archivos de programación.
Capítulo 3
Memorias
=============================================================
Introducción.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En el presente capítulo se estudian los conceptos básicos sobre las memorias
semiconductoras, así como la terminología empleada en las mismas. Se inicia el capítulo
precisamente con los conceptos básicos, para tener los conocimientos necesarias para la
comprensión de los siguientes temas del capítulo.
Al final del capítulo se estudian los diferentes tipos de memorias, y se cierra el capítulo
con la aplicación de las memoria en la lógica combinacional y secuencial. En esta parte del
trabajo, se desarrollaran el diseño de memorias RAM y ROM en VHDL y serán aplicadas en la
solución de problemas prácticos. Estas memorias tendrán la capacidad de almacenar
información de forma
M.C. JOSÉ temporal
ARMANDO LARAo permanente,
GONZÁLEZ dependiendo del tipo de memoria del que se trate.
Finalmente los programas con diseños de memorias serán descargadas a una FPGA.
Así mismo, existen memorias que en vez de Flip-Flops, utilizan como unidad
fundamental de almacenamiento un pequeño capacitor MOS donde se almacena un determinado
valor de voltaje el cual representa un dato binario. Por si el capacitor está cargado representara
un valor binario de 1, mientras que si este se encuentra descargado representara un valor binario
de 0. A continuación se estudiaran de manera detallada todos estos tipos de memoria destacando
M.C. JOSÉ
su estructura, ARMANDO
operación LARA GONZÁLEZ
y aplicaciones.
Por esta razón resulta de gran importancia conocer esta terminología empleada en las
memorias, para tener una mejor comprensión de dicho tema. A continuación se enlistan algunos
de los términos más importantes dentro del ámbito de las memorias de semiconductor.
Nibble.- Se denomina así a la mitad de un Byte, es decir, a una palabra de 4 bits (herencia de
los procesadores de 4 bits como el 4004).
Celda de Memoria.- Dispositivo o circuito eléctrico que se usa para almacenar un solo bit, ya
sea un cero o un uno lógico, ejemplos de celdas de memoria son: un flip-flop, un capacitor y un
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
solo canal en cinta o en disco magnéticos.
Capacidad de memoria.- Es una manera de especificar cuantos bits pueden almacenarse una
memoria.
Densidad.- Es otra manera de especificar la cantidad de información que puede almacenar una
memoria. Cuando una memoria tiene mayor densidad, puede almacenar mayor cantidad de
información.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Dirección.- Número que identifica la ubicación de un dato en la memoria.
Memoria de solo lectura (ROM).- Este tipo de memoria solo puede ser leída dentro del proceso
de operación normal.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Memoria de lectura y escritura (RWM).- En este tipo de memoria se pueden leer datos y
escribir datos dentro de su operación normal.
Memoria volátil.- Es una memoria que requiere energía eléctrica para mantener almacenada la
información. Cuando la energía eléctrica es desconectada de esta memoria, la información se
pierde.
Memoria estática.- Memoria que almacena un dato de forma permanente, siempre y cuando se
mantenga activa la alimentación eléctrica. No requiere ser refrescada periódicamente.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Memoria dinámica.- Memoria que no almacena los datos de forma permanente aun cuando se
le aplique energía eléctrica. En esta memoria los datos se van perdiendo con el tiempo, por lo
que es necesario refrescar los datos periódicamente.
M.C. auxiliar.-
Memoria JOSÉ ARMANDO LARA GONZÁLEZ
Es la memoria de almacenamiento masivo ya que puede almacenar grandes
cantidades de información aunque es más lenta que la memoria principal. Esta memoria es
externa a la memoria de trabajo.
Palabra de memoria.- Es un grupo de bits que pueden ser almacenados en una memoria y que
representan una instrucción o un dato.
Buses de una memoria.- Son las vías de comunicación de la memoria mediante los cuales se
podrán realizar las operaciones de lectura y escritura.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Bus de datos.- Es el canal por donde van a entrar o salir los datos de una memoria, durante los
procesos de lectura y escritura.
Toda memoria ya sea ROM o RAM para operar adecuadamente, deberá tener tres buses
para permitir el almacenamiento y la recuperación de la información. Eso tres buses, son el bus
de DATOS, de CONTROL y de DIRECIONES, como se ilustra en el diagrama de bloques de
una memoria genérica en la Figura 3.1.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BUS DE CONTROL
BUS DE DATOS
MEMORIA
BUS DE DIRECCIONES
Toda memoria deberá realizar dentro de su operación, los siguientes cinco pasos para
llevar a cabo operaciones de lectura o de escritura.
[Link]
JOSÉ ARMANDO LARA
la memoria paraGONZÁLEZ
que responda a los buses de control y dirección.
Con la finalidad de entender de una forma práctica la operación de los BUSES de una
memoria y en general la operación de la misma, consideremos la memoria de la Figura 3.2
correspondiente a un diagrama de bloques de una memoria de 16 X 8.
D
BUS DE
CONTROL
cs M.C. JOSÉ 0ARMANDO LARA GONZÁLEZ
R/W D1
D2
MEMORIA D3 BUS DE
A0 16 BYTES D4 DATOS
BUS DE A1 D5
DIRECCIONES A2 D6
A3 D7
De esta forma, por ejemplo podemos decir que en la posición de memoria “0000” se
tiene guardado el dato B816 ó que en la posición de memoria “0111”, se tiene almacenado el
dato FF16. De esta
2. La CPU coloca un “1” en la entrada de control 𝑹/𝑾̅̅̅ para seleccionar la opción de lectura
̅̅̅̅.
y habilitar la memoria aplicando un “0” en la entrada de control 𝑪𝑺
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
3. Los circuitos internos de la memoria decodifican la dirección “1010” para determinar
que el numero requerido es el “10101010”.
4. Los circuitos internos de la memoria colocan el bus de datos el número “10101010” para
que este sea transferido a la CPU y completar el proceso de lectura de la memoria.
Por otro lado, suponga que se desea guardar (escribir) el número “10111000” en la posición
de memoria “0000”. Se puede afirmar que se deberán
M.C. JOSÉ
seguirARMANDO LARApasos:
los siguientes GONZÁLEZ
3.M.C.
La JOSÉ
CPU ARMANDO
coloca un “0”LARA
enGONZÁLEZ
la entrada de control 𝑹/𝑾̅̅̅ para seleccionar la opción de
̅̅̅̅.
escritura y habilitar la memoria aplicando un “0” en la entrada de control 𝑪𝑺
En la Figura 3.3 se muestra la forma en que se pueden conectar dos memorias a la CPU
con la finalidad de aumentar la capacidad de almacenamiento. Como se puede ver el bus de
datos de la CPU va conectado tanto a la MEMORIA 1 como a la MEMORIA 2, lo mismo
sucede conJOSÉ
M.C. el bus de datos yLARA
ARMANDO el busGONZÁLEZ
de control.
Esto es posible porque cada memoria podrá ser seleccionada ya sea a través del bus de
control o también a través del bus de direcciones.
De esta forma la CPU podrá tener acceso a cualquiera de las dos memorias, una a la vez
sin tener contienda por el bus de datos por parte de los periféricos de la CPU.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BUS DE DIRECCIONES
MEMORIA 1 MEMORIA 2
CPU
BUS DE CONTROL
3.1.3 M.C.
TiposJOSÉ
de memorias
ARMANDO LARA GONZÁLEZ
La memoria es un bloque de construcción importante, de gran importancia en las
computadoras digitales y sistemas. Una memoria es necesaria para el almacenamiento de
instrucciones (programas de computadoras), datos (operandos) y resultados obtenidos durante
el procesamiento de datos.
En la Tabla 3.2 se muestra un resumen de las memorias que serán estudiadas en este
capítulo. Se han dividido en dos grupos, siendo estos el de las memorias ROM (Read Only
Memory), es decir las memorias de solo lectura y las memorias RAM (Random Access
Memory) Memoria de acceso aleatoria, las cuales se refieren a las memorias de lectura y
[Link]
escritura. JOSÉ ARMANDO
la ROM, LARAseGONZÁLEZ
los datos escriben una sola vez y no pueden ser cambiados después.
Este tipo de memoria, por ejemplo, se puede utilizar para almacenar un programa de
computadora. La información almacenada en la RAM se puede modificar fácilmente en el
procesamiento de los datos.
Se iniciará comentando que la memoria ROM es una memoria diseñada para almacenar
información que no cambia durante la operación normal del sistema o que casi no cambia con
mucha frecuencia. Generalmente lo que se guarda en este tipo de memorias son programas que
M.C. JOSÉ ARMANDO
las computadoras LARA GONZÁLEZ
deben ejecutar y que se guardan antes de la operación normal de una
computadora.
En la Figura 3.4 se muestra el símbolo de una memoria ROM genérica, es decir, todas
las ROM tendrán esta misma estructura externa y solo cambiara la organización interna de cada
una de ellas.
CS
Como se muestra en el símbolo de la Figura 3.4 la memoria cuenta con cuatro líneas de
dirección A3, A2, A1 y A0, por lo que puede direccionar 16 registros o posiciones de memoria,
por otro lado la memoria tiene su bus de datos de 8 bits desde D0 hasta D7 y cuenta también con
M.C. JOSÉ ARMANDO LARA GONZÁLEZ ̅̅̅̅
una entrada de selección de chip denominada 𝑪𝑺 .Para tener una idea más clara de la operación
y estructura se una memoria ROM en la Figura 3.5 se muestra un diagrama de bloques de la
estructura interna de una memoria ROM.
SELECTOR DE FILA
0
A0 1
DECODER
REGISTRO 0 REGISTRO 4 REGISTRO 8 REGISTRO 12
1A4 2
A1 LSB E E E E E E E E
E E E E E E E E
E E E E E E E E
SELECTOR DE COLUMNA
0
A2
DECODER
1 M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1A4 2
A3 MSB
3
CS BUFFERS DE SALIDA
D7 D6 D5 D4 D3 D2 D1 D0
Por otro lado en el decodificador inferior (MSB) se introducen las direcciones A2=“0” y
A3=“1”, lo que provoca que se active con un “1” la salida 2 del decodificador, haciendo
que se habiliten los registros 8, 9, 10 y 11. En estas condiciones el único registro que
tiene las dos habilitaciones activas es el registro 8, por lo tantos los datos contenidos
dentro de dicho registro se depositarán en el bus de datos interno de la memoria.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
2. La CPU coloca un “0” en la entrada de control 𝑪𝑺 ̅̅̅̅ para habilitar los buffers de salida y
permitir que los datos que se encuentran el bus de datos interno provenientes del registro
8 salgan hacia el bus de datos externos de la memoria
3. La CPU lee el dato presente en el bus de datos externo de la memoria para que este sea
transferido hacia la CPU.
En la Figura 3.6 se muestra la arquitectura de una pequeña MROM tipo MOS que tiene
la capacidad de almacenar 4 palabras de 4 bits. Como se puede ver se utiliza un MOSFET de
canal N con conexión en emisor común (entrada en la compuerta y salida en la fuente) para
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
cada uno de los bits almacenados, en otras palabras, una celda de memoria está formada por un
MOSFET.
Q0 Q1 Q2 Q3
A1
Q7
A0
M.C. JOSÉ ARMANDO
FILA 1
LARA GONZÁLEZ
Q 4 Q5 Q6
DECODER
1A4
FILA 2
EN
Q8 Q9 Q10 Q10
D3 D2 D1 D0
De esta forma durante el proceso de fabricación se guardan los datos, dejando sin
conexión las terminales de la fuente de los transistores donde se desea guardar los ceros lógicos
y a través de una “mascarilla” se deposita metal de silicio en las conexiones de las fuentes donde
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
se requiere hacer una conexión y por ende almacenar un “1”.
La “mascarilla” es muy precisa y costosa y se debe fabricar una para cada programa
específico de los clientes con la información binaria correcta, por esta razón solo se utiliza
cuando se requieren una gran cantidad de memorias idénticas por ejemplo para dispositivos
electrodomésticos o calculadoras. La mayoría de las MROM cuentan con salidas triestado lo
que las hace compatibles con microprocesadores y son fabricadas en ambas tecnologías: Bipolar
y MOS.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
M.C.
En JOSÉ ARMANDO
la Figura LARA GONZÁLEZ
3.7 se muestra el símbolo de una memoria MROM de 32KB, el triangulito
dentro de la memoria, indica que el dispositivo cuenta con salida triestado.
A14
A13
MROM
A12
A11 32K X 8 D7
A10
D6
A9
A8 D5
A7 M.C. JOSÉ ARMANDO
D LARA GONZÁLEZ
4
A6 D3
A5
D2
A4
A3 D1
A2 D0
A1
A0
CE (PWR DWN)
OE
Debido a que la memoria MROM tiene salidas triestado, las cuales se pueden habilitar o
deshabilitar, requiere de una entrada de control ̅̅̅̅
𝑂𝐸 (habilitación de entrada) y seguirá contando
con la señal de control 𝐶𝐸 (habilitación de chip). Con esta señal ̅̅̅̅
̅̅̅̅ 𝐶𝐸 se deshabilita el
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
decodificador de direcciones para que no responda a las entradas de dirección, pero además
cuando cuándo esta desactivada, todas las funciones del circuito integrado están deshabilitadas,
incluyendo las salidas tirestados y coloca al chip en un modo de bajo consumo de energía, con
lo que consume menor corriente de la fuente de alimentación.
Memorias PROM
Las memorias PROM son memorias ROM programables, se llaman así debido a que
pueden ser programadas por el usuario para bajos de volúmenes de utilización, no como en el
caso de las memorias MROM que solo se usan en M.C. JOSÉ ARMANDO
grandes masas y queLARA GONZÁLEZ por el
son programadas
fabricante. Sin embargo una vez que se han programado las PROM se parecen a las MROM en
que ya no pueden ser ni borradas ni reprogramadas otra vez. Por eso muchas veces se hace
referencia a estas memorias como dispositivos OTP (programables una sola vez).
Las celdas de las memorias PROM tienen una estructura muy semejante al de la ROM
pero un una conexión fusible en la terminal de la fuente de los transistores como se muestra en
la Figura 3.8.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
VCC/Vpp
FILA 0
Q0 Q1 Q2 Q3
0 1 0 1
Figura 3.8. Arquitectura de una memoria PROM.
Por otro lado, los transistores que tengan un uno lógico en su terminal dren, no
permitirán el paso de mucha corriente lo que hará que la conexión fusible quede intacta,
guardando por ende un uno. Una vez que se hayan programado todas las localidades de dirección
de esta forma los datos quedarán almacenados de forma permanente en la memoria y podrán ser
M.C. JOSÉ
leídos las veces que la CPU lo requiera. Es conveniente ARMANDO
recalcar que enLARA
esta GONZÁLEZ
memoria los datos
no se pierden aun cuando se desconecte la fuente de alimentación de la memoria.
Existen diverso circuitos integrados de memoria PROM comerciales por ejemplo una de
las más populares es la TMS27PC256 la cual es de tipo CMOS con una capacidad de 32KB con
tiempos de acceso de entre 100 y 250 ns.
M.C. JOSÉ
Memorias ARMANDO LARA GONZÁLEZ
EPROM
Las memorias EPROM son memorias ROM Programables y Borrables, se llaman así
debido a que pueden ser programadas por el usuario para bajos de volúmenes y además pueden
ser borradas para después ser programadas otra vez. Una vez programada, la EPROM no volátil
ya que almacena los datos guardados en forma indefinida. El proceso de programación de la
EPROM es el mismo que el de la memoria PROM.
La diferencia entre ambas memorias radica en que la memoria EPROM tiene como celda
M.C. de
de memoria un transistor MOS con una compuerta JOSÉ ARMANDO
silicio LARAconexión
que no tiene GONZÁLEZeléctrica, es
decir tienen una compuerta flotante pero con un electrodo muy cercano. En la Figura 3.9 se
muestra una representación de una celda de memoria EPROM.
Por otra parte el borrado de la memoria se realiza mediante la exposición del dispositivo
a rayos ultravioleta durante un tiempo aproximado de 10 a 30 minutos. Este tiempo depende del
tipo de fabricante y para realizar el borrado, el circuito integrado dispone de una ventana de
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
cuarzo transparente, la cual permite a los rayos ultravioleta llegar hasta el material
fotoconductivo presente en las compuertas aisladas y de esta forma lograr que la carga se disipe
a través de este material apagando el transistor, en cuyo caso todas las celdas de memoria quedan
en “1”.
VCC
G Q0
Compuerta
flotante Dato de
salida
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Figura 3.9. Celda de memoria de una EPROM.
Memorias EEPROM
Las memorias EEPROM también llamadas E 2 PROM son memorias ROM Programables
M.C. JOSÉ
y Borrables ARMANDO LARA
Eléctricamente, GONZÁLEZ
se llaman así debido a que pueden ser programadas por el usuario
para bajos de volúmenes y además pueden ser borradas a través de pulsos eléctricos los cuales
permiten borrar los datos existentes en la memoria, para que ésta pueda ser reprogramada las
veces que sea necesario.
Por otra parte cuando se aplica un alto voltaje (21V) entre la compuerta y el DREN del
MOSFET pero con la polaridad inversa que para programar la celda, se eliminarán las cargas
almacenadas en la compuerta del MOSFET y se borrará la celda. En la Figura 3.11 se muestra
una representación de una celda de memoria EEPROM.
FILA0
Delgada capa
G Q0
De óxido
S
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Compuerta
flotante Dato de
salida
Figura 3.11. Celda de memoria EEPROM.
+5V
Memorias Flash
La memoria Flash es un derivado de laM.C. JOSÉ ARMANDO
memoria [Link] GONZÁLEZ
Se llaman Flash debido a
los tiempos rápidos de borrado y escritura. Es una memoria que tiene gran capacidad como las
EEPROM y es borrable dentro del mismo circuito a través de pulsos eléctricos.
Una celda de memoria Flash es muy semejante a la celda simple de memoria EPROM,
por lo que difiere un poco más de la EEPROM. Tiene una capa de óxido en la compuerta más
delgada, lo que le permite la capacidad de borrarse con electricidad pero puede construirse con
capacidades mucho mayores que la EEPROM.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Tiene un alto nivel de integración de tal manera que se encuentra orientada a realizar el
almacenamiento de grandes cantidades de datos en un espacio reducido, permitiendo la lectura
y escritura de múltiples posiciones de memoria en la misma operación.
Todo esto gracias a impulsos eléctricos, lo que además le otorga una velocidad de
funcionamiento superior a la que presentaban las memorias del tipo EEPROM, que actuaban
sobre una celda única de memoria por vez. Las memorias Flash comunes tienen tiempos de
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
escritura 10µs por byte, en comparación con los 100µs de las EPROM más avanzadas y los 5ms
de las EEPROM.
En la Figura 3.13 se muestra el símbolo lógico de una memoria Flash CMOS 28F256A
de Intel Corporation, con una capacidad de 32 X 8. La memoria tiene 15 entradas de dirección
lo que le permite direccionar 215 =32K=32768 localidades de memoria de 8 bits, es decir puede
almacenar 32KB.
A14
A13 DQ7
.
. DQ6
. DQ5
.
MEMORIA FLASH
DQ4
32K x 8
M.C. JOSÉ ARMANDOA2LARA GONZÁLEZ
28F256A DQ3
A1
A0 DQ2
DQ1
OE
DQ0
CE
WE
Por otra parte en la Tabla 3.4 se muestran los modos de operación de la memoria Flash
de la Figura 3.12.
Memorias RAM
Las memorias RAM (memoria de acceso aleatorio) toman su nombre debido a que se
puedeM.C. JOSÉcon
acceder ARMANDO
la mismaLARA GONZÁLEZ
facilidad a cualquier localidad de memoria del dispositivo. En este
sentido, muchas memorias se pueden llamar memorias RAM, pero cuando se hace referencia a
una memoria semiconductora de acceso aleatorio por lo general se refiere una memoria de
lectura y escritura (RWM). De esta forma en lo subsecuente llamaremos RAM a la memoria
de lectura y escritura (RWM).
I3 I2 I1 I0
R/W
BUFFERS DE ENTRADA E
0
REGISTRO 0
A5
1
[Link]
JOSÉ1 ARMANDO LARA GONZÁLEZ
2
REGISTRO 2
A4
.
A3 DECODIFICADOR .
DE 6 A 64 . cs
A2 LÍNEAS .
.
.
A1 .
.
A0 62
REGISTRO 62
63
REGISTRO 63
03 02 01 00
Generalmente las memorias RAM tienen capacidades de 1K, 4K, 8K, 16K, 64K, 128K,
256K y 1024K, con tamaños de palabras de 1, 4 y 8 bits aunque tanto el tamaño de palabra como
la capacidad de palabras pueden extenderse mediante la interconexión de varias memorias
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
RAM. En el caso de la RAM de la Figura 3.13 se puede afirmar que tienen una capacidad de 64
palabras de 4 bits, ya que cuenta con seis líneas de dirección, de tal manera que tendrá 26 = 64
registros para direccionar.
Memorias SRAM
Las memorias SRAM (memoria de acceso aleatorio estática) toman su nombre debido a
que siempre y cuando se mantenga la alimentación de la memoria, los datos no requieren ser
refrescados con cierta frecuencia. La SRAM es una memoria volátil como todas las RAM ya
que los datos almacenados en la memoria seM.C. JOSÉ cuando
pierden ARMANDO LARA GONZÁLEZ
se desconecta la fuente de
alimentación de la memoria. Las celdas de memoria SRAM son en esencia Flips-Flops los
cuales almacenas los datos en la memoria.
A12
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
A 11 I/O 7
.
. I/O 6
SRAM
. 8 K x8 I/O 5
.
I/O 4
A1
A0 I/O 3
I/O 2
WE MCM6264C
I/O 1
CS1
I/O 0
CS2
M.C. JOSÉ ARMANDO LARA
OE GONZÁLEZ
La señal ̅̅̅̅̅
𝑊𝐸 es la misma que 𝑅/𝑊 ̅ que se ha venido empleando en los otros ejemplos,
de tal manera que un nivel bajo en esta entrada, indica que se escribirán datos en la memoria,
mientras que un nivel alto indicará que se leerán datos de la memoria. En cuanto a las entradas
M.C. JOSÉ
̅̅̅̅̅1ARMANDO LARA GONZÁLEZ
de selección 𝐶𝑆 y 𝐶𝑆2, ambas deben estar activas para que el chip opere correctamente, siempre
y cuando los buffers de salida estén activos también, mediante la entrada ̅̅̅̅ 𝑂𝐸 = 𝑏𝑎𝑗𝑜. En la
Tabla 3.5 se muestran los modos de operación de la memoria SRAM MCM6264C.
M.C.
La JOSÉ ARMANDO
aplicación LARA GONZÁLEZ
de las Memorias SRAM tienen lugar en diseños donde la velocidad sea un
factor determinante, aun considerando los altos costos, alta disipación de potencia y baja
densidad de integración. Generalmente esta memoria es aplicada donde se requiere pequeñas
cantidades de memoria o donde se requiere una alta velocidad. Algunos osciloscopios de alta
velocidad, como los osciloscopios de almacenamiento digital y los analizadores lógicos,
requieren una memoria de muy alta velocidad y en pequeñas cantidades, para aplicaciones tales
como estas, se utilizan las memorias SRAM.
Memorias SRAM
Las memorias DRAM (memoria de acceso aleatorio dinámica) toman su nombre del
hecho de que requieren ser refrescadas periódicamente para que no se pierda la información
M.C. JOSÉ
almacenada ARMANDO
en ellas. LARA GONZÁLEZ
Estas memorias se fabrican en tecnología MOS y tienen las características
de una alta densidad de integración, bajo consumo de energía y velocidades moderadas de
operación.
Las celdas de memoria de este dispositivo, son básicamente pequeños capacitores MOS,
generalmente de unos cuantos pico-Faradios. Como es de suponer con el paso del tiempo estos
capacitores tienden a descargarse, razón por la cual se requiere refrescar el dato presente en la
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
celda de memoria, ya sea un “0” o un “1”.
A6 A5 A4 A3 A2 A1 A0
Decodificador 1 de 128
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
A7 A8 A9 A10 A11 A12 A13
Decodificador 1 de 128
Entradas de dirección de fila
128 Filas
Como ya se había mencionado, las memorias DRAM almacenan los “ceros” y “unos”
en pequeños capacitores MOS, donde se tendrá un uno lógico cuando el capacitor este cargado
hacia el valor del voltaje de alimentación (Vcc) y un cero lógico cuando el capacitor este
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
descargado hacia un valor de voltaje de referencia (Vref) muy cercano a 0 volts. En la Figura
3.16 se muestra una representación de una celda de memoria DRAM.
SW4
DATO DE
ENTRADA
SW1 SW2 SW3
C DATO DE
VREF
Los interruptores SW1, SW2, SW3 y SW4, son MOSFET que son controlados por la CPU
̅ y por supuesto el
a través de las salidas de los decodificadores de direcciones y la señal 𝑅/𝑊
capacitor C guarda el dato en la celda de memoria DRAM.
Para escribir un dato, las salidas del decodificador de direcciones y la señal de control
𝑅/𝑊 M.C. JOSÉ ARMANDO
̅ cierran los interruptores SW1 y SW2, manteniendo abiertos losLARA GONZÁLEZ
interruptores SW3 y SW4
lo que hará que se conecte el dato de entrada con el capacitor. Si el dato de entrada es “1” el
capacitor se cargará, mientras que si el dato de entrada es un “0” el capacitor se descargará.
Posteriormente los interruptores SW1 y SW2 se abren quedando aislado el capacitor del resto
del circuito.
Por otra parte, para leer un dato almacenado en la celda, se cierran los interruptores SW2,
SW3 y SW4, manteniendo abierto a SW1, lo que hace que se conecte el voltaje presente en el
capacitor con la entrada no inversora del amplificador operacional, el cual compara dicho voltaje
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
con el valor del voltaje de referencia, generando un valor de voltaje de salida de 0 volts o 5 volts,
dependiendo del valor del voltaje en el capacitor. El voltaje de salida es retroalimentado al
capacitor con lo que además de leerse el dato se refresca la memoria.
Las memorias ROM son de gran utilidad en el desarrollo de diseños en VHDL ya que es
en estas memorias donde se almacenan datos que son necesarios para la operación del programa,
estos datos son almacenados de forma permanente y no cambian dentro de la ejecución del
programa.
address7
address6 dato11
. .
. . dato10
. . . .
. . . .
. . MEMORIA ROMARMANDO
M.C. JOSÉ .
LARA
.
GONZÁLEZ
address0 . .
255 X 12 . .
dato1
dato0
clk
M.C. JOSÉde
A partir ARMANDO LARAseGONZÁLEZ
la Figura 3.17 puede iniciar la construcción en VHDL de la memoria ROM
ya que conocemos todos los puertos de entrada y salida de la memoria. Se iniciara el proyecto
con la entidad de la memoria ROM, esta quedaría descrita en VHDL como se muestra en el
siguiente listado.
entity ROM_255 is
Port ( clk : in STD_LOGIC;
address : in STD_LOGIC_VECTOR (7 downto 0);
dato
M.C. JOSÉ : out LARA
ARMANDO STD_LOGIC_VECTOR
GONZÁLEZ (11 downto 0));
end ROM_255;
begin
process(clk)
M.C. JOSÉvariable
ARMANDO
begin
direc : integer range 0 to 255;
LARA GONZÁLEZ
direc := conv_integer (address);
if clk'event and clk='1'
then dato <= rom(direc);
end if;
end process;
end Behavioral;
entity ROM_255 is
Port ( clk : in STD_LOGIC;
address : in STD_LOGIC_VECTOR (7 downto 0);
dato : out STD_LOGIC_VECTOR (11 downto 0));
end ROM_255;
constant rom:memoria:=(
X"000",X"001",X"002",X"003",X"004",X"005",X"006",X"0
07",X"008",X"009",X"010",………………………………………………………………………
……………………………………X"244",X"245",X"246",X"247",X"248",X"2
49",X"250",X"251",X"252",X"253",X"254",X"255");
begin
process(clk)
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
variable direc : integer range 0 to 255;
begin
direc := conv_integer (address);
if clk'event and clk='1'
then dato <= rom(direc);
end if;
end process;
end Behavioral;
M.C. RAM
Memoria JOSÉ ARMANDO
en VHDL LARA GONZÁLEZ
A continuación se llevará a cabo el desarrollo en VHDL de una memoria RAM de 4 x 4,
es decir la memoria tendrá 2 líneas de dirección para direccionar 22 =4 registro de 4 bits.
address0
address1
din0 dout0
din1 MEMORIA RAM dout1
din2 4X4 dout2
din3
M.C. JOSÉ ARMANDO
dout
LARA GONZÁLEZ
3
clk
we
entity Memoria_Ram is
generic(n: integer range 2 to 16 := 4; --número de bits
m: integer range 2 to 10 := 2); --líneas de dirección
Port( clk, we : in STD_LOGIC;
din : in STD_LOGIC_VECTOR (n-1 downto 0);
address : in STD_LOGIC_VECTOR (m-1 downto 0);
dout : out STD_LOGIC_VECTOR (n-1 downto
M.C. JOSÉ ARMANDO 0));
LARA GONZÁLEZ
end Memoria_Ram;
En esta declaración a una matriz que se le ha puesto el nombre de arreglo tipo array de
0 a 4 por el tamaño de los registros 3 hasta 0. Se ha declarado también una señal llamada direc
con un tamaño de 0 a 3.
begin
direc <= conv_integer(address);
process(clk)
variable memoria : arreglo;
M.C. JOSÉbegin
ARMANDO LARA GONZÁLEZ
if clk'event and clk='1'
then if we='1'
then memoria(direc) := din;
end if;
dout <= memoria(direc);
end if;
end process;
end Behavioral;
entity Memoria_Ram is
generic(n: integer range 2 to 16 := 4; --número de bits
m: integer range 2 to 10 := 2); --líneas de dirección
M.C. JOSÉPort( clk, LARA
ARMANDO we : GONZÁLEZ
in STD_LOGIC;
din : in STD_LOGIC_VECTOR (n-1 downto 0);
address : in STD_LOGIC_VECTOR (m-1 downto 0);
dout : out STD_LOGIC_VECTOR (n-1 downto 0));
end Memoria_Ram;
begin
direc <= conv_integer(address);
process(clk) M.C. JOSÉ ARMANDO LARA GONZÁLEZ
variable memoria : arreglo;
begin
if clk'event and clk='1'
then if we='1'
then memoria(direc) := din;
end if;
dout <= memoria(direc);
end if;
end process;
end Behavioral;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Capítulo 4
Arquitectura de Procesadores
=============================================================
Introducción.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En el presente capítulo se estudian los conceptos básicos sobre la arquitectura interna
de los microprocesadores, destacando las arquitecturas de Von Neumann y la Harvard.
Todas las computadoras constan principalmente de dos partes, la CPU que procesa los
datos, y la MEMORIA que guarda los datos. Cuando hablamos de memoria, manejamos dos
parámetros, los datos en sí, y el lugar donde se encuentran almacenados (o dirección). Los dos
son importantes para la CPU, pues muchas instrucciones frecuentes se traducen a algo así como
"Toma los datos de ésta dirección y añádelos a los datos de ésta otra dirección", sin saber en
realidad qué es lo que contienen los datos.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Por esta razón en necesario que el lector conozca la diferencia entre la memoria de datos
y la memoria de programas, conociendo a detalle el funcionamiento de cada una de ellas, lo que
podrá lograr estudiando el presente capítulo.
Area de datos
10111011100
10010111001
Un ordenador con esta arquitectura realiza o emula los siguientes pasos secuencialmente:
2.M.C.
Aumenta el contadorLARA
JOSÉ ARMANDO de programa
GONZÁLEZen la longitud de la instrucción para apuntar a la
siguiente.
4. Se ejecuta la instrucción. Esta puede cambiar el valor del contador del programa,
permitiendo
M.C. así operaciones
JOSÉ ARMANDO repetitivas. El contador puede cambiar también cuando se
LARA GONZÁLEZ
cumpla una cierta condición aritmética, haciendo que el ordenador pueda “tomar
decisiones”, que pueden alcanzar cualquier grado de complejidad, mediante la aritmética
y lógica anteriores.
5. Vuelve al paso 2.
M.C.
El JOSÉ ARMANDO
término provieneLARA
de GONZÁLEZ
la computadora Harvard Mark I, que almacenaba las
instrucciones en cintas perforadas y los datos en interruptores. La arquitectura Harvard ofrece
una solución particular al problema de la limitación de la velocidad de la memoria. Las
instrucciones y los datos se almacenan en cachés separadas para mejorar el rendimiento.
Por otro lado, tiene el inconveniente de tener que dividir la cantidad de caché entre los
dos, por lo que funciona mejor sólo cuando la frecuencia de lectura de instrucciones y de datos
es aproximadamente la misma.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Como es lógico suponer la arquitectura cuenta con dos buses distintos, ambos buses son
totalmente independientes lo que permite que la CPU pueda acceder de forma independiente y
simultánea a la memoria de datos y a la de instrucciones. Como los buses son independientes
estos pueden tener distintos contenidos en la misma dirección y también distinta longitud.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
También la longitud de los datos y las instrucciones puede ser distinta, lo que optimiza el uso
de la memoria en general.
Esta arquitectura suele utilizarse también en los DSPs (Procesador Digital de Señales),
usados habitualmente en productos para procesamiento de audio y video. En la Figura 4.2, se
muestra la Arquitectura Harvard para un Microcontrolador o Computadora.
Memoria
Memoria Memoria de
Registros Programas
de Datos
10111011100 10111011100
10010111001 Unidad de 10010111001
ALU Control
El tamaño de las instrucciones no está relacionado con el de los datos, y por lo tanto
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
puede ser optimizado para que cualquier instrucción ocupe una sola posición de
memoria de programa, logrando así mayor velocidad y menor longitud de programa.
Todo microprocesador cuenta con una ALU dentro del chip para realizar las operaciones
que el dispositivo necesite. En la Figura 4.3 se muestra el símbolo de una ALU típica. En esta
ALU M.C.
se pueden observar las
JOSÉ ARMANDO entradas
LARA de los operandos A y B, mientras que R representa el
GONZÁLEZ
resultado de salida, S representa los pines de selección de la función que la ALU deberá realizar
ya sea de suma, resta o cualquiera otra operación y C es el acarreo de salida.
Los operandos A y B pueden tener un ancho variable dependiendo del tamaño de la ALU
pudiendo ser de cuatro u ocho bits por ejemplo. En la Figura 4.4 se muestra un ejemplo de una
ALU de cuatro bits para entender mejor la estructura y la operación de la ALU.
S C
R
Figura 4.3.- Símbolo de una ALU típica
En este ejemplo de una ALU de cuatro bits de la Figura 4.4 se puede apreciar que se
tienen un operando A de entrada, el cual corresponde al número 10, mientras que el número que
se está introduciendo en el operando B corresponde al número 7. Por otra parte la entrada de
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
selección de función se está introduciendo el numero 0 equivalente a una suma, por lo que la
ALU deberá sumar los operandos 10+7=17 en binario el resultado sería 10001.
0 1 ACARREO
SUMA DE SALIDA
0
Por otra parte en Figura 4.5 se muestra el diagrama eléctrico de una ALU de dos bits. En
esta ALU se tienen dos operandos de entrada, siendo estos A1A0 y B1B0. Se tiene además una
entrada de acarreo etiquetada como Cin y tres entradas de selección de modo de operación S 2
S1 y S0. Por otra parte la ALU tiene la salida o resultado de las operaciones en los pines R1 y R0
y una salida de acarreo marcado como COUT que vendría representando el bit más significativo
del resultado, es decir vendría representando COUT=R2.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Cada bit de la ALU se procesa de manera idéntica, con la excepción del direccionamiento
del bit del acarreo. El manejo de este bit es explicado más adelante.
Las entradas A y B van hacia las cuatro puertas de la derecha, de arriba a abajo, XOR, AND,
OR. Las tres primeras compuertas realizan las operaciones XOR, AND, y OR sobre los datos A
y B. La última puerta XOR es la puerta inicial de un sumador completo.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
CIN S2 S1 S0
A0
B0 D0
D1 R0
D2
D3
R1
A1
B1 D0
D1
D2
D3
OP = 000 → XOR
OP = 001 → AND
OP = 010 → OR
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
OP = 011 → Adición
Claramente se ve que las otras cuatro entradas del multiplexor están libres para otras
operaciones (sustracción, multiplicación, división, NOT A, NOT B, entre otras). Aunque S2
actualmente no es usada en este montaje (a pesar de estar incluida y conectada), ésta sería usada
en el momento de realizar otras operaciones además de las 4 operaciones listadas arriba.
M.C. de
Los datos de acarreo de entrada y acarreo JOSÉ ARMANDO
salida, LARA
llamados GONZÁLEZ
flags (banderas), son
típicamente conectados a algún tipo de registro de estado.
Cada modelo de procesador tiene sus propios registros de estados, pero en la Figura 4.6 se
muestra uno de los más comunes.
- Z N - V P I C
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Figura 4.6.- Representación de un registro de estado
A continuación se desglosa el significado de cada una de las literales que componen el registro
de estado de la Figura 4.6.
Una vez que se han ejecutado todas las instrucciones del listado anterior, el resultado
está disponible en el registro AL y el valor que tendrá dicho registro, será el resultado de sumar
el contenido de la posición de memoria NUM con el contenido de la posición de memoria
NUM+1.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
4.3.3 Operaciones con punto flotante y fijo.
Una Unidad de Punto Flotante (Floating Point Unit) es un componente de la CPU
especializado en el cálculo de operaciones en coma flotante. Las operaciones básicas que toda
FPU puede realizar son las aritméticas (suma y multiplicación), si bien algunos sistemas más
complejos son capaces también de realizar cálculos trigonométricos y/o exponenciales.
No todas las CPUs tienen una FPU dedicada. En ausencia de FPU, la CPU puede utilizar
M.C. JOSÉ
programas ARMANDO LARA
en microcódigo GONZÁLEZ
para emular una función en coma flotante a través de la Unidad
Aritmético Lógica (ALU), la cual reduce el costo del hardware a cambio de una sensible pérdida
de velocidad.
Un número con punto flotante está formado por dos partes, una mantisa o fracción y un
exponente. En la Figura 4.7 se muestra el formato de 4 bits de los números reales como se
almacenan en un sistema computacional. A formato se le conoce como de precisión simple.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
31 30 23 32 0
S EXPONENTE MANTISA
Por otra parte en la Figura 4.8 se muestra el formato de 8 bits de los números reales como
M.C. JOSÉ
se almacenan en un sistema computacional. A formato ARMANDO
se le conoce comoLARAdeGONZÁLEZ
doble precisión.
63 62 52 51 0
S EXPONENTE MANTISA
M.C.
La JOSÉ ARMANDO
aritmética simpleLARA
indicaGONZÁLEZ
que se requieren 33 bits para almacenar las tres piezas de
datos lo cual es erróneo ya que la mantisa de 24 bits contiene un bit oculto o implícito que
permite almacenar números de 24 bits en un espacio de 23 bits. El bit oculto es el primer bit del
número con punto flotante normalizado. Al normalizar un número, se ajusta de tal forma que su
valor sea por lo menos 1, pero menos de 2.
M.C.
De la misma forma que con otros tipos de JOSÉ
datos seARMANDO
puede usar LARA GONZÁLEZ
el lenguaje ensamblador
para definir números con punto flotante en formatos de precisión simple o de doble precisión.
Como los números de precisión simple son de 32 bits se utiliza la directiva DD o la directiva
DQ para definir números de doble precisión de 64 bits. En el siguiente listado se muestra un
ejemplo de números con punto flotante descritos en lenguaje ensamblador.
NUM1 DD 1.234
NUM2 DD -23.4
M.C.
NUM3JOSÉ ARMANDO LARA
REAL4 GONZÁLEZ
4.2E2
En la primera línea del listado se define el numero 1.234 utilizando la directiva DD,
mientras que en la segunda línea se define el -23.4 y finalmente en la línea tres se define el
número 420 utilizando unas de las directivas para números con punto flotante las cuales son
REAL4, REAL8 y REAL10.
B3
B2
B1
ALU
B0 R3
R2
R1
M.C. JOSÉ ARMANDO
S2
LARA GONZÁLEZ R0
S1
S0
La ALU es de cuatro bits ya que el bus de los operandos son de cuatro bits (A0, A1, A2,
A3 y B0, B1, B2, B3). Así mismo la salida correspondiente al resultado es de cuatro bits (R0, R1,
R2 y R3) complementado con un bit de acarreo de salida (COUT). El COUT se activara en las sumas
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
con y sin acarreo de entrada, cuando el resultado sobrepase los cuatro bits del bus de resultados.
Finamente V se activara cuando el resultado en una resta sea negativo (A-B con B>A).
Una vez que se conoce el número de pines de entrada y de salida de la ALU es posible
describir la entidad en VHDL como se muestra en el siguiente listado.
entity alu is
Port (A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0);
M.C. JOSÉ ARMANDO LARA
S : in GONZÁLEZ
STD_LOGIC_VECTOR (2 downto 0);
R : out STD_LOGIC_VECTOR (3 downto 0);
COUT,V : out STD_LOGIC);
end alu;
Cuando se seleccione la primera función marcada con el numero “000” la ALU realizara la suma
de los dos operandos A y B y la bandera de acarreo M.C.
COUT JOSÉ ARMANDO
se activará LARA
en caso de que GONZÁLEZ
el resultado sobrepase
los cuatro bits del resultado R.
Con la selección de “001” se llevará a cabo la acción de restar el operando B del operando A y
la bandera V se activará en caso de que el resultado de la resta sea negativo, lo que sucederá únicamente
cuando B sea mayor que A.
Por otro lado, cuando la entrada de selección de operación sea “010”, la ALU desarrollará la
M.C.lógica
operación de A AND B
JOSÉ ARMANDO y ambas
LARA banderas tendrán un cero en su salida. De esta manera
GONZÁLEZ
cuando la entrada de selección de operación sea “011” se llevará a cabo la operación lógica A
OR B y ambas banderas tendrán un cero en su salida.
Finalmente cuando la entrada de selección sea “111” la ALU realizara la suma de los dos
operandos A y B más un bit de acarreo de entrada y la bandera de acarreo C OUT se activará en caso de
que el resultado sobrepase los cuatro bits del resultado R.
Una vez definida la Tabla 4.2 con las operaciones que desarrollará la ALU es posible describir,
con esta información, el comportamiento de la ALU. El programa se explicará parte por parte para
entender mejor su estructura comportamental. La M.C. JOSÉ
primera ARMANDO
parte LARAque
del programa GONZÁLEZ
se muestra en el
siguiente listado corresponde a la definición de señales y asignación de valores y será explicado a
continuación.
La siguiente parte del programa la constituye un process cuyas variables sensibles son
A, B, ACA, SAL, A1, B1 y S, es decir este process se ejecutará cada vez que haya un cambio
en alguna de las variables sensibles. En el siguiente listado se muestra el inicio del process, así
como la subrutina para la operación de suma (A+B) seleccionada con la entrada de selección
de operación S=“000”.
process(A,B,ACA,SAL,A1,B1,S)
begin
if S="000" then
M.C. JOSÉA1(4) <= '0';
ARMANDO LARA GONZÁLEZ
A1(3 downto 0) <= A;
B1(4) <= '0';
B1(3 downto 0) <= B;
R1 <= A1 + B1;
R<= SAL;
COUT <= ACA;
V <='0';
Por otra parte, cuando la entrada de selección de operación S sea igual a “001” se llevará
a cabo a operación de resta de A-B. En el siguiente listado se describe dicha operación,
iniciando
M.C. por
JOSÉverificar
ARMANDO con un if que
LARA S sea igual a “001”. En caso de ser cierta esta aseveración,
GONZÁLEZ
se procede a verificar con otro if, si el sustraendo es mayor que el minuendo y en caso de ser
cierto se activará la bandera de salida V para denotar que el resultado R es negativo.
En otras palabras, si B>A al bit más significativo de la señal A1 se le asigna cero y a los
cuatro bits menos significativos de A1 se le asigna el valor del operando A.
Finalmente la señal SAL que tiene el valor de los cuatro bits menos significativos de R1
se saca por la salida R y a través de COUT se saca un cero indicando que no existe acarreo y se
activa la bandera de V para indicar que el resultado de la sustracción es negativa.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
else
A1(4) <= '0';
A1(3 downto 0) <= A;
B1(4) <= '0'; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
B1(3 downto 0) <= B;
R1 <= A1 - B1;
R<= SAL;
COUT <= '0';
V <='0';
end if;
Note que en este listado se sigue exactamente la misma lógica de programación que en
M.C. JOSÉ ARMANDO
el listado anterior, LARA GONZÁLEZ
con la salvedad de que a través de la bandera V se saca un “0” en vez de un
uno lógico.
Para el caso donde la entrada de selección de operación S sea igual a “010” se desarrolla
el siguiente código, en el cual se verifica si S=“010” y en caso de ser afirmativo, al resultado
R se le asigna directamente la operación lógica AND de los operando, además de sacar un cero
lógico a través de COUT y desactivar la bandera V
M.C.
De JOSÉ
igual ARMANDO
manera en elLARA
casoGONZÁLEZ
cuando S=“110” se ejecutará el código del siguiente listado
en el cual se sigue la misma lógica descrita anteriormente con la diferencia que la operación
lógica que se realiza es la de invertir el operando B.
Finalmente cuando S=“111” se realizará una suma con acarreo de entrada. Es decir a la
suma normal de A+B se le sumara un “1”. En el siguiente listado, se puede observar como
primeramente al bit más significativo de la señal A1 se le asigna cero, mientras que a los cuatro
bits menos significativos de A1 se le asigna el valor del operando A.
De igual forma, al bit más significativo de la señal B1 se le asigna cero, mientras que a
los cuatro bits menos significativos de B1 se le asigna el valor del operando B. Acto seguido a
R1 seM.C. JOSÉ el
le asigna ARMANDO
valor de laLARA
sumaGONZÁLEZ
de los operandos A1+B1+1. Finalmente la señal SAL que
tiene el valor de los cuatro bits menos significativos de R1 se saca por la salida R y la señal
ACA que es el valor del bit más significativo de R1 se saca por la salida de acarreo de salida
COUT.
else
A1(4) <= '0';
A1(3 downto 0) <= A;
M.C. JOSÉB1(4) <= '0';
ARMANDO LARA GONZÁLEZ
B1(3 downto 0) <= B;
R1 <= A1 + B1 + 1;
R<= SAL;
COUT <= ACA;
V <='0';
end if;
end process;
end Behavioral;
entity alu is
Port (A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0);
S : in STD_LOGIC_VECTOR (2 downto 0);
R : out STD_LOGIC_VECTOR (3 downto 0);
COUT,V
M.C. JOSÉ ARMANDO : out
LARA STD_LOGIC);
GONZÁLEZ
end alu;
if S="000" then
A1(4) <= '0';
A1(3 downto 0) <= A;
B1(4) <= '0';
B1(3 downto 0) <= B;
R1 <= A1 + B1;
R<= SAL;
COUT <= ACA;
V <='0';
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
elsif S="001" then
if B>A then
A1(4) <= '0';
A1(3 downto 0) <= A;
else
A1(4) <= '0';
A1(3 downto 0) <= A;
B1(4) <= '0';
B1(3 downto 0) <= B;
R1 <= A1 - B1;
R<= SAL;
COUT <= '0';
V <='0';
end if; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
elsif S="010" then
R<= A and B;
COUT <= '0';
V <='0';
else
A1(4) <= '0';
A1(3 downto 0) <= A;
B1(4) <= '0';
B1(3 downto 0) <= B;
R1 <= A1 + B1 + 1;
R<= SAL;
M.C. JOSÉCOUT
ARMANDO LARA GONZÁLEZ
<= ACA;
V <='0';
end if;
end process;
end Behavioral;
Capítulo 5
5.1.1 Introducción
2. Sincronización del carácter: La información serie se transmite por definición bit a bit, pero
la misma tiene sentido en palabras o bytes.
Por otra parte La velocidad de transmisión de datos es expresada en bits por segundo o
baudios. El baudio es un concepto más general que bit por segundo. El primero queda definido
como el número de estados de la señal por segundo, si sólo existe dos estados (que pueden ser
representados por un bit, que identifica dos unidades de información) entonces baudio es
equivalente a bit por segundo. Baudio y bit por segundo se diferencian cuando es necesario más
M.C.
de un bit para representar más de dos estados de la JOSÉ
señ[Link] LARA GONZÁLEZ
M.C. JOSÉ se
Cuando ARMANDO
establece LARA GONZÁLEZes necesario implementar una base de tiempo que
la comunicación
controle la velocidad. En un Microcontrolador, se utilizaría la base de tiempos del reloj del
sistema, si bien, en términos genéricos se utilizaría uno de los siguientes métodos:
a. Mediante la división de la base de reloj del sistema, por ejemplo mediante un contador
temporizador programable.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
b. A través de un oscilador TTL. Para cambiar frecuencia hay que cambiar el cristal.
a. Simplex
b. Semi duplex (Half duplex)
c. Totalmente duplex (Full duplex)
Simplex: En esta técnica, la comunicación serie usa una dirección y una línea de comunicación.
Siempre existirá un transmisor y un receptor, no ambos.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
La ventaja de este sistema consiste en que es necesario sólo un enlace a dos hilos. La
desventaja radica en que el extremo receptor no tiene ninguna forma de avisar al extremo
transmisor sobre su estado y sobre la calidad de la información que se recibe. Esta es la razón
por la cual, generalmente, no se utiliza.
M.C. JOSÉ
Full duplex: EnARMANDO
esta formaLARA GONZÁLEZ serial, se utilizan dos líneas, una transmisora y
de comunicación
otra receptora y se transfiere información en ambos sentidos. La ventaja de este método es que
se puede transmitir y recibir información de manera simultánea.
Por otra parte, es necesario mencionar, que existen dos modos básicos para realizar la
transmisión de datos y son:
Modo asíncrono.
Modo síncrono.
Transmisión asíncrona
Cuando se opera en modo asíncrono no existe una línea de reloj común que establezca
la duración de un bit y el caracter puede ser enviado en cualquier momento. Esto conlleva que
cada dispositivo tiene su propio reloj y que previamente se ha acordado que ambos dispositivos
transmitirán datos a la misma velocidad.
El tiempo por bit en una línea en que se transfiere la información a 2400 bps es de unos
416 microsegundos (1 seg/2400). Una frecuencia de muestreo de 2400 veces por segundo nos
permitirá muestrear el principio o el final del bit. En ambos casos detectaremos el bit, sin
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
embargo, no es extraño que la señal cambie ligeramente, y permanezca la línea con una duración
un poco más larga o más corta de lo normal.
Por todo ello, una frecuencia de muestreo lenta no sería capaz de detectar el cambio de
estado de la señal a su debido tiempo, y esto daría lugar a que la estación terminal no recibiera
los bits correctamente.
Durante el intervalo de tiempo en que no son transferidos caracteres, el canal debe poseer
un "1" lógico. Al bit de parada se le asigna también un "1". Al bit de inicio del carácter a
transmitir se le asigna un "0". Por todo lo anterior, un cambio de nivel de "1" a "0" lógico le
M.C.
indicará alJOSÉ ARMANDO
receptor LARA carácter
que un nuevo GONZÁLEZserá transmitido, como se muestra en la Figura 5.1.
a. Cuando no se envían datos por la línea, ésta se mantiene en estado alto (1).
b. Cuando se desea transmitir un carácter, se envía primero un bit de inicio que pone la
línea a estado bajo (0) durante el tiempo de un bit.
c.M.C.
Durante la transmisión,
JOSÉ ARMANDO LARAsi la línea está a nivel bajo, se envía un 0 y si está a nivel alto se
GONZÁLEZ
envía un 1.
d. A continuación se envían todos los bits del mensaje a transmitir con los intervalos que
marca el reloj de transmisión. Convencionalmente se transmiten entre 5 y 8 bits.
Los datos codificados por esta regla, pueden ser recibidos siguiendo los pasos siguientes:
d. Leer un bit más de la línea y comprobar si es 1 para confirmar que no ha habido error en
la sincronización.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
CARACTER TRANSMITIDO
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Para tener una idea más clara de lo explicado anteriormente, se determinará cuántos bits
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
de datos y caracteres son transmitidos de manera asíncrona en 1 segundo si se transmite a una
velocidad de 2400 baudios con 1 bit de inicio, 2 bits de parada, 1 bit de paridad y 6 bits de datos
por carácter.
Con esta información se puede determinar que para transmitir un caracter se necesitarán:
1 bit inicio + 6 bits datos + 1 bit paridad + 2 bits parada =10 bits.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Como la velocidad de transmisión es 2400 baudios y cada caracter consume 10 bits, se
transmitirán 240 caracteres por segundo (2400/10). Como cada caracter posee 6 bits de datos
serán transmitidos 240 * 6 = 1440 bits de datos por segundo.
Por otro lado en la Figura 5.4 se muestra la mayor velocidad asíncrona posible con el bit
de paridad en una transmisión.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BIT DE
BIT DE
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
PARO BITS DE DATOS (5 a 8)
PARO
Figura 5.4.- Transmisión asíncrona con la velocidad máxima posible
Transmisión síncrona
Es un método más eficiente de comunicación en cuanto a velocidad de transmisión. Ello
vieneM.C.
dadoJOSÉ ARMANDO
porque no existe LARA
ningúnGONZÁLEZ
tipo de información adicional entre los caracteres que serán
transmitidos.
M.C. RELOJ
JOSÉ ARMANDO LARA GONZÁLEZ
Figura 5.5.- Transmisión síncrona.
Los caracteres de sincronismo deben diferenciarse de los datos del usuario para permitir
al receptor detectar los caracteres "sync". Por ejemplo, el código ASCII utiliza el octeto
10010110. Existen ocasiones en que son definidos dos caracteres de sincronismo, ello puede ser
necesario si, por cualquier motivo el caracter "sync" original se desvirtuara, el siguiente
permitirá la reinicialización del receptor.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En segundo lugar, puede ocurrir que el equipo receptor necesite un tiempo adicional para
adaptarse a la señal entrante. Cuando se transmite de forma síncrona, es necesario mantener el
sincronismo entre el transmisor y el receptor cuando no se envían caracteres, para ello son
insertados caracteres de sincronismo de manera automática por el dispositivo que realiza la
comunicación, como se muestra en la Figura 5.6.
DATOS SINCRONIZACIÓN
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SYNC CAR1 CAR2 ... CARN SYNC SYNC SYNC SYNC CAR1 CAR2
Se pueden detectar errores de acuerdo a la forma de transmisión, siendo uno de los más
útiles a través del control de la paridad, debido a que un error en una transmisión serial solo
afecta a un solo bit.
1. Transmisión asíncrona:
a. Paridad.
b. Sobre escritura.
[Link]É ARMANDO
Error LARA
de encuadre GONZÁLEZ
(framing).
2. Transmisión síncrona:
a. Paridad.
b. Sobre escritura.
Debido a que uno de los métodos más comunes para detectar errores es el control de la
paridad, a continuación se explica este método.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
El control de paridad consiste en añadir un bit, denominado de paridad, a los datos que
se envían o escriben, como se muestra en la Figura 5.7 donde aparte de los cuatro bits del bus
de datos se tienen una línea en el bus. La paridad puede ser par o impar
D0
D1 DATOS
D2
D3
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BIT DE PARIDAD
GENERADOR DETECTOR
ERROR
DE PARIDAD DE PARIDAD
El bit de paridad será cero, cuando el número de bit "unos" que contienen los datos a
transmitir sea un número par, y el bit de paridad será uno cuando los datos que se mandan
contienen un número impar de unos, como se muestra en la Tabla 5.1.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
RA1
CIRCUITO
DISPOSITIVO DE
CONVERTIDOR
MICROCONTROLADOR ENTRADA/SALIDA
TTL, 20 mA o
SERIE
RS232
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
RA0
Para ilustrar más a detalle este tipo de conversión, se realizará el ejemplo de una rutina
de conversión para la comunicación asíncrona con 1 bit de inicio y 2 bits de parada con una
velocidad de 300 bauds.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
La rutina debe en primer lugar colocar la línea a cero (que debe previamente estar en
"1") durante el tiempo de un bit para establecer el bit de inicio, posteriormente el acumulador
será enviado a puerto RA0, lo que transmitirá el bit menos significativo de datos a través de
RA0.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Después de haberse asegurado la presencia del bit de inicio, se espera el tiempo de duración de
1 bit para encuestar la primera unidad de información del dato a recibir en la mitad de su
intervalo. Posteriormente, un contador es establecido con el número de bits de datos que serán
recibidos, el cual se decrementará con cada bit recibido.
El bit leído en PA1 pasa al acumulador y se rota a la izquierda a través del acarreo,
M.C. JOSÉ
posteriormente se realiza una rotación a la derecha conARMANDO
el acarreo LARA GONZÁLEZ
al registro donde debe
almacenarse el resultado de la recepción. Esta operación de doble rotación permite que un bit
sea recibido sin que el bit previo sea destruido. El acarreo actúa como almacenador intermedio
entre el acumulador y el registro.
Después que el primer bit de dato es recibido, el contador será decrementado después de
una demora de un bit, que permitirá comprobar el próximo bit de dato a recibir en la mitad del
intervalo. Este proceso continúa hasta que los 8 bits de datos queden almacenados en el registro.
CuandoM.C.
el JOSÉ ARMANDO
proceso LARA GONZÁLEZ
se ha completado, el primer bit recibido estará almacenado en el bit menos
significativo del registro y el último dato en el bit más significativo del registro.
Después de que los bits de datos han sido recibidos, el programa debe chequear los bits
de parada. Para ello el valor presente en RA1 será rotado dos veces a la izquierda con acarreo,
si en algún momento el acarreo no vale "1", habrá existido un error de encuadre (framing) y
deberá ser abortada la recepción. Si los dos bits están presentes, el dato presente en el registro
debe ser salvado por el microcontrolador y retornar al programa principal.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
A la rutina se le puede añadir una sección que compruebe un bit de paridad. Después de
aceptar los 8 datos, se puede tomar un noveno (con información de paridad) y comprobar su
estado de manera tal que si es detectada una paridad incorrecta, sea generado un mensaje de
error y el dato se ignore.
Los datos paralelos a ser convertidos por la sección de transmisión entran al registro
bufferM.C.
y son transferidos
JOSÉ ARMANDO al registro para la transmisión de datos. Los datos son desplazados a la
LARA GONZÁLEZ
salida a través de la línea de salida serie a una velocidad determinada por el reloj y la sección
de control. Los bits de inicio, parada y bit de paridad serán añadidos automáticamente por la
UART.
ENTRADA PARALELO
D7 D6 D5 D4 D3 D2 D1 D0
SECCIÓN DE TRANSMISIÓN
SECCIÓN DE RECEPCIÓN
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
REGISTRO PARA LA ENTRADA SERIE
RECEPCIÓN DE DATOS RXD
RELOJ DEL ESTADO/CONTROL
RECEPTOR DE LA
RXC RECEPCIÓN
REGISTRO BUFFER
RECEPTOR
Los datos a ser convertidos en paralelo entrarán a través de la línea de entrada serie al
registro para la recepción de datos. Los datos serie serán desplazados en este registro a una razón
determinada por el reloj del receptor y la sección de control. Los bits de inicio y de parada serán
discriminados de los datos asíncronos recibidos y la palabra recibida será transferida al registro
buffer de salida paralelo.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
RELOJ DEL
RECEPTOR
RXD Tc CADA BIT SE LEE CADA 16 PERIODOS
DE TC A PARTIR DE ESTE PUNTO
LA NORMA RS232
Esta norma de comunicación es una de las más populares que se utilizan en la
comunicación serie, y es la que se utiliza en lasM.C. JOSÉ ARMANDO
computadoras LARAsiGONZÁLEZ
personales, bien hoy día está
ampliamente superada por la transmisión serie a través de USB, de manera que está remitiendo
su uso (por ejemplo, ya no se implementa en ordenadores portátiles). Se desarrolló en la década
de los 60 para gobernar la interconexión de terminales y MODEM.
3. Descripción funcional de las señales usadas: Las señales están básicamente divididas
en dos grupos:
M.C. JOSÉ ARMANDO
a. Señales primarias, que son normalmente utilizadas LARA GONZÁLEZ
para la transferencias de
datos.
b. Señales secundarias, utilizadas para el control de la información que será
transferida.
La norma RS232 está definida tanto para la transmisión síncrona como para la asíncrona,
pero cuando se utiliza esta última, sólo un conjunto de terminales (de los 25), es utilizado.
+15V SPACE
LSB MSB
START 1 1 0 1 0 0 1 0 STOP
+3V
START B0 B1 B2 B3 B4 B5 B6 B7 STOP
-3V
TIME
-15V MARK
TXD (Transmit Data, transmisión de datos, salida, pat. 2): Señales de datos que se
transmiten del DTE al DCE. En principio, los datos no se pueden transmitir si alguno de los
terminales RTS, CTS, DSR ó DTR está desactivado.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
RXD (Receive Data, recepción de datos, entrada, pat. 3): Señales de datos transmitidos desde
el DCE al DTE.
DTR (Data Terminal Ready, terminal de datos preparado, salida, pat. 20): Señal del DTE
que indica que está conectado, generalmente en "0" indica que el DTE está listo para transmitir
o recibir.
DSR (Data Set Ready, dispositivo preparado, entrada, pat. 6): Señal del DCE que indica
M.C.
que el dispositivo está en modo de transmisión de JOSÉ ARMANDO LARA GONZÁLEZ
datos.
RTS (Request To Send, petición de envío, salida, pat. 4): Señal del DTE al DCE, notifica al
DCE que el DTE dispone de datos para enviar. Se emplea en líneas semiduplex para controlar
la dirección de transmisión. Una transición de 1 a 0 avisa al DCE que tome las medidas
necesarias para prepararse para la transmisión.
CTS (Clear To Send, preparado para transmitir, entrada, pat. 5): Señal del DCE al DTE
indicando que puede transmitirle datos.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
CD (Carrier Detect, detección de portadora, entrada, pat. 8): Señal del DCE que ha
detectado la señal portadora enviado por un modem remoto o que la línea telefónica está abierta.
RI (Ring Indicator, timbre o indicador de llamada entrante, entrada, pat. 22): Señal del
DCE indicando que está recibiendo una llamada por un canal conmutado.
SG (GND) (System Ground ó Signal Ground, masa de señal, pat. 7): Masa común para todas
las líneas.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
FG (GND) (Shield ó Protective Ground, tierra de protección, pat. 1): El conductor esta
eléctricamente conectado al equipo.
2. El DTE pregunta al DCE si este está listo. El DTE activa la línea RTS. El DCE si está
listo, responde activando la línea CTS. Puestos de acuerdo ambos equipos, se puede
entrar a comunicar.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
3. Los datos son transferidos en ambos sentidos. El DTE envía información al DCE a través
del terminal TXD. El DCE envía información al DTE a través del terminal RXD.
TXD
COMPUTADORA
RXD FPGA
PERSONAL
GND DCE
DTE
M.C.
SinJOSÉ ARMANDO
embargo LARAtípica
una interfaz GONZÁLEZ
RS232 requiere al menos 7 señales, tal como se muestra
en la Figura 5.13.
TXD
RXD
RTS
COMPUTADORA
CTS
FPGA
PERSONAL
DCE
DTE DSR
M.C.
DTR JOSÉ ARMANDO LARA GONZÁLEZ
GND(SG)
Las líneas adicionales se utilizan para la puesta de acuerdo entre el DTE (por ejemplo
un PC) y el DCE (por ejemplo una FPGA).
TXD
COMPUTADORA
RXD FPGA
PERSONAL
GND DCE
DTE
Para cumplir con este enunciado se desarrolla un programa en VHDL el cual será
descargado a la FPGA para que esta reciba los datos provenientes de la computadora personal,
los procese y los despliegue en la LCD conectada a la misma.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entity SERIAL_LIBRO is
PORT( CLK: IN STD_LOGIC;
RS : OUT STD_LOGIC; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
RW : OUT STD_LOGIC;
ENA : OUT STD_LOGIC;
DATA_LCD: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
RX: IN STD_LOGIC;
TX: OUT STD_LOGIC);
end SERIAL_LIBRO;
Así mismo se describe como salida RS que sirve para especificar a la LCD si están
enviando datos o comandos. Por otra parte la señal de salida ENA sirve para la habilitación del
LCD,M.C. JOSÉ que
mientras ARMANDO
la salidaLARA GONZÁLEZ
DATA_LCD de cuatro bits es el medio a través del cual serán
enviados los datos y los comandos a la LCD. Los pines RX y TX sirven para la recepción y
transmisión de datos entre la PC y la FPGA respectivamente y son de un solo pin.
Posteriormente se describen algunas señales que servirán para llevar a cabo el programa,
las cuales se enlistan a continuación.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SIGNAL TX_INI_S : std_logic ;
SIGNAL TX_FIN_S : std_logic ;
SIGNAL RX_IN_S : std_logic ;
SIGNAL DATAIN_S : std_logic_vector(7 downto 0);
SIGNAL DOUT_S : std_logic_vector(7 downto 0);
SIGNAL ESTADO : INTEGER RANGE 0 TO 1 := 0;
SIGNAL DATO : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL FILA,COLUMNA : INTEGER RANGE 1 TO 16 := 1;
COMPONENT RS232 IS
port (CLK : in std_logic ;
RX : in std_logic ;
TX_INI : in std_logic ;
TX_FIN : out std_logic ;
TX : out std_logic ;
RX_IN : out std_logic ;
DATAIN : M.C. JOSÉ ARMANDO
in std_logic_vector(7 downto 0);LARA GONZÁLEZ
DOUT : out std_logic_vector(7 downto 0)
);
end COMPONENT RS232;
En este listado, en el pin CLK se aplicará la señal de reloj de la FPGA, mientras que RX
será el pin para la recepción de los datos desde la FPGA. El pin TX_INI deberá ponerse a “1”
para iniciar la transmisión, mientras que TX_FIN se pondrá a “1” cuando termina la transmisión.
Finalmente los buses de ocho bits DATA_IN y DOUT son los puertos de entrada para
la transmisión y de salida para la recepción respectivamente.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Para continuar con el programa se hace el mapeo de puertos del componente para la
comunicación serial, el cual se ha etiquetado como U3 y que se muestra en el siguiente listado.
En este listado se puede ver como a los pines CLK, RX y TX se les ha asignado el mismo valor,
mientras que el valor de los otros pines se ha asignado a señales con el mismo nombre con una
“s” para identificarlas como señales.
PROCESS(CLK)
BEGIN
IF RISING_EDGE(CLK) THEN
CASE ESTADO IS
WHEN 0 =>
IF RX_IN_S = '1' THEN
ESTADO <= 1;
ELSE
M.C. JOSÉ ARMANDO LARA
ESTADO <= GONZÁLEZ
0;
END IF;
También se limpia la LCD con DATO <= X"00" y se incrementa el valor de columna en
1 y si columna ha llegado a 16 se cambia de renglón con la instrucción FILA <= FILA+1.
WHEN 1 =>
IF BLCD = X"05" THEN
ESTADO <= 0;
DATO <= X"00"; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
COLUMNA <= COLUMNA+1;
IF COLUMNA = 16 THEN
FILA <= FILA+1;
END IF;
ELSE
DATO <= DOUT_S;
ESTADO <= 1;
END IF;
El programa total finaliza con las instrucciones utilizadas para el manejo de la LCD, que
se refiere al envío de comandos para la inicialización de la LDC y envío de datos que serán
escritos en la misma. En el siguiente listado se muestran dichas instrucciones.
COMPONENT RS232 IS
port (CLK : in std_logic ;
RX : in std_logic ;
TX_INI : in std_logic ;
TX_FIN : out std_logic ;
TX : out std_logic ;
RX_IN : out std_logic ;
DATAIN : in std_logic_vector(7 downto 0);LARA GONZÁLEZ
M.C. JOSÉ ARMANDO
DOUT : out std_logic_vector(7 downto 0)
);
end COMPONENT RS232;
PROCESS(CLK)
BEGIN
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IF RISING_EDGE(CLK) THEN
CASE ESTADO IS
WHEN 0 =>
IF RX_IN_S = '1' THEN
ESTADO <= 1;
ELSE
ESTADO <= 0; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
END IF;
WHEN 1 =>
IF BLCD = X"05" THEN
ESTADO <= 0;
DATO <= X"00";
COLUMNA <= COLUMNA+1;
IF COLUMNA = 16 THEN
M.C. JOSÉFILA
ARMANDO LARA GONZÁLEZ
<= FILA+1;
END IF;
ELSE
DATO <= DOUT_S;
ESTADO <= 1;
END IF;
end Behavioral;
10KΩ
VCC
VCC
SDA
SDA
MAESTRO SCL
GND
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SCL
GND
La operación de la comunicación I2C es simple ya que esta formada por dos partes, por
un lado la parte del MAESTRO y por otra parte el ESCLAVO, este tipo de comunicación
permite el intercambio de información entre muchos dispositivos a una velocidad aceptable, de
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
unos 100 Kbits por segundo, aunque hay casos especiales en los que el reloj llega hasta los 3,4
MHz. En este esquema tanto el maestro como los esclavos tienen la capacidad de enviar y recibir
datos, la diferencia radica en que el maestro decide en que momento los esclavos van a enviar o
recibir datos.
De esta forma, mientras que el maestro no de la orden a los esclavos de enviar o recibir
información, estos no podrán hacer ninguna acción. Por esta razón el maestro puede
comunicarse con múltiples periféricos, ya que controla el flujo de los datos. En la Figura 5.15
se muestran las señales que intervienen en laM.C. JOSÉ ARMANDO
comunicación I2C lasLARA GONZÁLEZ
cuales se describen a
continuación.
SCL (System Clock) es la línea de los pulsos de reloj que sincronizan el sistema.
SDA (System Data) es la línea por la que se mueven los datos entre los dispositivos.
GND (Masa) común de la interconección entre todos los dispositivos "enganchados"
al bus.
M.C.
Las JOSÉ
líneasARMANDO
SDA y SCL LARA
sonGONZÁLEZ
del tipo drenaje abierto, es decir, un estado similar al de
colector abierto, pero asociadas a un transistor de efecto de campo (FET). Se deben polarizar
en estado alto (conectando a la alimentación por medio de resistores "pull-up") lo que define
una estructura de bus que permite conectar en paralelo múltiples entradas y salidas.
Las dos líneas del bus están en un nivel lógico alto cuando están inactivas. En principio,
el número de dispositivos que se puede conectar al bus no tiene límites, aunque hay que
observar que la capacitancia máxima sumada de todos los dispositivos no supere los 400 pF. El
M.C. crítico
valor de los resistores de polarización no es muy JOSÉ ARMANDO LARA GONZÁLEZ
y puede ir desde 1.8KΩ a 47KΩ. Un
valor menor de resistencia incrementa el consumo de los integrados pero disminuye la
sensibilidad al ruido y mejora el tiempo de los flancos de subida y bajada de las señales.
Habiendo varios dispositivos conectados sobre el bus, es lógico que para establecer una
comunicación a través de él se deba respetar un protocolo. Digamos, en primer lugar, lo más
importante es que el dispositivo maestro es el único que puede iniciar una comunicación. La
condición inicial, de bus libre, es cuando ambas señales están en estado lógico alto. En este
estado cualquier dispositivo maestro puede ocuparlo, estableciendo la condición de inicio
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
(start). Esta condición se presenta cuando un dispositivo maestro pone en estado bajo la línea
de datos (SDA), pero dejando en alto la línea de reloj (SCL). En la Figura 5.16 se muestra la
condición de inicio.
SECUENCIA
DE INICIO
SDA
SCL
El primer byte que se transmite luego de la condición de inicio contiene siete bits que
componen la dirección del dispositivo que se desea seleccionar, y un octavo bit que corresponde
[Link]É
a la operación que se quiere realizar con él (lectura ARMANDO LARA GONZÁLEZ
escritura).
Si el dispositivo cuya dirección corresponde a la que se indica en los siete bits (A0-A6)
está presente en el bus, éste contesta con un bit en bajo, ubicado inmediatamente luego del
octavo bit que ha enviado el dispositivo maestro. Este bit de reconocimiento (ACK) en bajo le
indica al dispositivo maestro que el esclavo reconoce la solicitud y está en condiciones de
comunicarse. Aquí la comunicación se establece en firme y comienza el intercambio de
información entre los dispositivos, lo cual se muestra en la Figura 5.17.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SCL 1 2 3 4 5 6 7 8 9
Si el bit de lectura/escritura (R/W) fue puesto en esta comunicación a nivel lógico bajo
M.C.
(escritura), el dispositivo maestro envía datos al JOSÉ ARMANDO
dispositivo esclavo. LARA
Esto seGONZÁLEZ
mantiene mientras
continúe recibiendo señales de reconocimiento, y el contacto concluye cuando se hayan
transmitido todos los datos.
En el caso contrario, cuando el bit de lectura/escritura esta a nivel lógico alto (lectura),
el dispositivo maestro genera pulsos de reloj para que el dispositivo esclavo pueda enviar los
datos. Luego de cada byte recibido el dispositivo maestro (quien está recibiendo los datos)
genera un pulso de reconocimiento.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
El dispositivo maestro puede dejar libre el bus generando una condición de parada
(stop), como se ilustra en la imagen de la Figura 5.18.
SECUENCIA
DE PARO
SDA
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SCL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity IIC is
M.C. JOSÉ
generic (FREC_IIC :INTEGER := 250-1 ; ARMANDO LARA GONZÁLEZ
MAX_IIC_BYTES :INTEGER := 10
);
Port (CLK :IN STD_LOGIC ;
IIC_INI :IN STD_LOGIC ;
IIC_FIN :OUT STD_LOGIC ;
SCL :OUT STD_LOGIC ;
SDA :INOUT STD_LOGIC ;
SDA_X :OUT STD_LOGIC ;
IIC_REG_IN_UP :OUT STD_LOGIC ;
IIC_ADDRESS :IN STD_LOGIC_VECTOR(7 DOWNTO 0) ;
IIC_REG_IN :IN STD_LOGIC_VECTOR(7 DOWNTO 0) ;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IIC_REG_OUT :OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ;
IIC_BYTES :IN INTEGER RANGE 0 TO MAX_IIC_BYTES := 1
);
end IIC;
begin
process(edo_iic, IIC_INI, IIC_ADDRESS,iic_proceso_fin, tsu_fin)
begin
--ESPERA BIT DE INICIO Y REINICIA TODAS LAS SEÑALES
M.C. JOSÉifARMANDO
edo_iic LARA GONZÁLEZ
= 0 then
if IIC_INI = '1' then
edo_iic_f <= 1;
else
edo_iic_f <= 0;
end if;
IIC_FIN <= '0';
tsu_ini <= '0';
iic_op <= '0';
M.C. JOSÉiic_proceso <= '0';
ARMANDO LARA GONZÁLEZ
iic_reg_up <= '0';
iic_bytes_sig <= 0;
st_repeat <= '0';
Dado el bit de inicio, revisa el bit 0 de la dirección para saber si se trata de una operación
de escritura o de lectura.
En esta sección del programa se describe la operación de escritura, esta inicia procesos
de control de IIC poniendo iic_proceso a '1'. La señal iic_bytes_sig se usa para decir cuántos
bytes se quieren escribir, para esta versión, está amarrado a 1 byte, pero se puede usar junto con
el puerto iic_bytes para escribir en más de un byte consecutivamente. Por otra parte, iic_op se
pone a '1' para indicar que se trata de una escritura en los procesos.
Para el proceso de lectura se describe el siguiente listado del programa, este proceso de
lectura es más largo. Se debe enviar un proceso de escritura para indicarle al dispositivo a que
registro se quiere acceder y después se debe enviar una condición de repetición de inicio.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Finalmente, se envía nuevamente la dirección junto con el bit de lectura para que sea el
esclavo el que envía la información de vuelta al igual que la operación de escritura, iic_proceso
se debe poner a '1'. Así mismo, se usa iic_op a '1' para iniciar con una operación de escritura,
pero se pone st_repeat a '1' para indicar que termine la escritura con una condición de repetición
de inicio en vez de la condición de paro de la comunicación.
Seguido del tiempo de 5 us, inicia el proceso de lectura, poniendo iic_op a '0'. La señal
iic_bytes indica cuantos bytes debe leer. Esta versión solo soporta la lectura de un byte, a
diferencia del proceso de escritura, no se puede usar iic_bytes para incrementar el número de
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
bytes que se van a leer.
Cuando el tiempo de espera ha terminado, entonces solo espera a que iic_ini sea '0' y
pone a '1' iic_fin. La finalidad es que no se reenvíe la información si el usuario no pone iic_ini
a '0' antes de que termine el proceso
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
else
iic_op <= '0';
iic_bytes_sig <= 0;
tsu_ini <= '0';
iic_proceso <= '0';
M.C. JOSÉiic_reg_up <= '0';
ARMANDO LARA GONZÁLEZ
st_repeat <= '0';
IIC_FIN <= '1';
if IIC_INI = '1' then
edo_iic_f <= 7;
else
edo_iic_f <= 0;
end if;
end if;
end process;
process(CLK)
begin M.C. JOSÉ ARMANDO LARA GONZÁLEZ
if rising_edge(CLK) then
edo_iic <= edo_iic_f ;
end if;
end process;
Por otra parte en el siguiente listado se muestra la máquina de estados para procesos de IIC, esta
es a través de un process, con las variables sensibles que se muestran a continuación.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
process(edo, iic_proceso, SCL_gen_fin,IIC_ADDRESS, IIC_REG_IN, b,
iic_op, conta_bytes, iic_bytes_sig, st_repeat)
begin
if edo = 0 then
SCL <= '1';
sda_esc <= '1';
sda_en <= '0';
sda_ack <= '0';
scl_gen <= '0';
b_inc <= '0';
b_restart <= '1'; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
conta_bytes_up <= '0';
conta_bytes_reini <= '1';
iic_proceso_fin <= '0';
iic_data_up <= '0';
if iic_proceso = '1' THEN
edo_f <= 1;
else
edo_f <= 0;
end if;
M.C. JOSÉedo
elsif ARMANDO LARA GONZÁLEZ
= 6 then
SCL <= '0';
b_inc <= '0';
b_restart <= '0';
conta_bytes_up <= '0';
iic_proceso_fin <= '0';
iic_data_up <= '0';
conta_bytes_reini <= '0';
sda_ack <= '0';
sda_en <= '1';
if b = 8 then
edo_f <= 4; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
sda_esc <= IIC_REG_IN(0);
SCL_gen <= '0';
else
sda_esc <= IIC_REG_IN(7-b);
if SCL_gen_fin = '1' then
SCL_gen <= '0';
edo_f <= 7;
else
SCL_gen <= '1';
edo_f <= 6;
end if;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
end if;
elsif edo = 7 then
sda_esc <= IIC_REG_IN(7-b);
sda_en <= '1';
SCL <= '1';
Por otra parte en el listado siguiente se describe la condición de paro (stop condition).
La condición de paro consiste en poner a '1' scl del iic mientras sda es '0' y posteriormente se
pone sda a '1' mientras scl sigue siendo '0'.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
process(CLK)
begin
if rising_edge(CLK) then
process(CLK)
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
begin
if rising_edge(CLK) then
if SCL_gen = '1' then
SCL_conta <= SCL_conta + 1;
SCL_gen_fin <= '0';
if SCL_conta = FREC_IIC-1 then
SCL_conta <= FREC_IIC-1 ;
SCL_gen_fin <= '1';
end if;
else
SCL_conta <= 0;
SCL_gen_fin <= '0'; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
end if;
end if;
end process;
En esta parte del programa se genera un contador, el cual es usado en los registros de
corrimiento de entrada y salida, para incrementar la posición de entrada-salida a nivel bit.
process(CLK)
begin
if rising_edge(CLK) then
if conta_bytes_up = '1' then
conta_bytes <= conta_bytes + 1;
M.C. JOSÉelsif
ARMANDO LARA GONZÁLEZ= '1' then
conta_bytes_reini
conta_bytes <= 0;
end if;
end if;
end process;
process(CLK)
begin
if rising_edge(CLK) then
if sda_ack = '1' then
SDA_X <= SDA ;
end if;
end if;
M.C.
endJOSÉ ARMANDO LARA GONZÁLEZ
process;
En esta pequeña parte del programa se realiza el control de puerto de tres estados sda
como salida
process(CLK)
begin
if rising_edge(CLK) then
if sda_en = '1' then M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SDA <= sda_esc ;
else
SDA <= 'Z';
end if;
end if;
end process;
Aquí se describe un puerto usado para actualizar informacion de escritura en iic y finaliza
la descripción
M.C. JOSÉcomportamental
ARMANDO LARA delGONZÁLEZ
programa.
DISPLAY(0:7)
SDA F1
Las direcciones de los registros de inicialización del acelerómetro para entender que fue
lo queM.C.
se desarrolla en el programa
JOSÉ ARMANDO en VHDL. En la Tabla 5.2 se muestran las DIRECCIONES
LARA GONZÁLEZ
ESCLAVAS del acelerómetro, sin bit de lectura y escritura, siendo esta la dirección 0x1D.
Con estas condiciones se procede al desarrollo del programa iniciando por la entidad de
dicho programa como se muestra en el siguiente listado.
entity TOP is
PORT( CLK : IN STD_LOGIC;
M.C. JOSÉSDA
ARMANDO
: INOUTLARA GONZÁLEZ
STD_LOGIC;
SCL : OUT STD_LOGIC;
LEDS : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
end TOP;
En esta entidad llamada TOP se agrega como pin de entrada la señal CLK que es la señal
que sincroniza la operación de los módulos del programa. Por otra parte la señal SDA se declara
como un pin de entrada-salida a través del cual entrarán y saldrán los datos desde la FPGA hasta
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
el acelerómetro y desde el acelerómetro hasta la FPGA.
Por otra parte la señal SCL se declara como pin de salida, esta corresponde a una señal
de reloj de sincronización de los esclavos conectados a la FPGA. Finalmente la señal LEDS de
ocho bits se ha declarado como salida y es la señal que proviene del acelerómetro y será
empleada para alimentar un decodificador de BCD a siete segmentos para que el valor del
acelerómetro sea desplegado en los displays de siete segmentos.
COMPONENT IIC is
PORT (CLK : IN STD_LOGIC ;
IIC_FIN : OUT STD_LOGIC ;
SCL : OUT STD_LOGIC ;
SDA : INOUT STD_LOGIC ;
M.C. JOSÉ ARMANDO LARA
BUS_IIC : GONZÁLEZ
IN STD_LOGIC_VECTOR(23 DOWNTO 0) ;
IIC_DATA_OUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
IIC_ERROR : OUT STD_LOGIC
);
end COMPONENT IIC;
Es este componente se ha descrito la señal de entrada de reloj CLK, así como la señal
IIC_FIN, la cual indica el fin de operación. De igual manera las señales SDA y SCL las cuales
ya se han explicado a detalle anteriormente. Por otro lado la señal BUS_IIC con una longitud
M.C.
de 24 bit es la que contienen la información para laJOSÉ ARMANDO
operación que se LARA
va ha GONZÁLEZ
llevar a cabo.
Para continuar con el programa se has descrito cinco señales las cuales serán empleadas
en la elaboración de una máquina de estado que básicamente programará el acelerómetro.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SIGNAL EDO : INTEGER RANGE 0 TO 50 := 0;
SIGNAL IIC_FIN : STD_LOGIC := '0';
SIGNAL BUS_IIC : STD_LOGIC_VECTOR(23 DOWNTO 0):= (OTHERS => '0');
SIGNAL IIC_ERROR : STD_LOGIC := '0';
SIGNAL CONTA : INTEGER RANGE 0 TO 4_999 := 0;
Una vez que se ha descrito las señales mostradas anteriormente, se hace el mapeo de
puertos del componente U1 como se puede observar en el siguiente listado.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
U1: IIC PORT MAP(
CLK,
IIC_FIN,
SCL,
SDA,
BUS_IIC,
LEDS,
IIC_ERROR
);
Como se puede ver en este listado, se inicia un process del reloj donde se verifica
M.C. JOSÉsiARMANDO
primeramente LARA GONZÁLEZ
existe un flanco de transición positiva en el pulso de reloj y en caso de que
exista ese flanco, se verifica si la máquina de estado se encuentra en el estado cero y de ser así
se verifica sí se indica un fin de operación para pasar la máquina de estado al estado uno, en
caso de que no exista un fin de operación la maquina se quedará en el estado cero y
posteriormente se envía los datos en X"3A", X"2A" y X"30" al acelerómetro con la finalidad
de programar el primer registro del mismo.
PROCESS(CLK)
BEGIN M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IF RISING_EDGE(CLK) THEN
IF EDO = 0 THEN
IF IIC_FIN = '1' THEN
EDO <= 1;
ELSE
EDO <= 0;
END IF;
BUS_IIC <= X"3A" & X"2A" & X"30";
M.C. JOSÉ24
El dato ARMANDO LARAalGONZÁLEZ
bits enviados acelerómetro (X"3A" & X"2A" & X"30") corresponde a la
configuración del primer registro del acelerómetro. Donde X"3A" corresponde a la dirección
esclava del acelerómetro X“1D” más el corrimiento del bit de escritura, quedando X"3A".
Por otra parte el número X"2A" corresponde a la dirección del registro a configurar y
finalmente el número X"30" es el dato que se debe mandar a dicho registro de acuerdo con la
hoja de datos técnicos del acelerómetro.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Una vez que se ha enviado ese primer comando de programación del acelerómetro, se
requiere de la elaboración de una subrutina de retardo con la finalidad de que los datos enviados
al acelerómetro se estabilicen dentro de los registros del mismo, antes de mandar los otros
comandos de programación. En el siguiente listado se muestra dicho retardo.
De manera semejante a los casos anteriores se hará uso de la subrutina de retardo creada
anteriormente para estabilizar la programación de los registros del acelerómetro y que tienen un
tiempo de retardo de 100µs, la cual se enlista a continuación.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
CONTA <= 0;
ELSE
CONTA <= CONTA+1;
EDO <= 9;
END IF;
M.C. JOSÉBUS_IIC
ARMANDO LARA GONZÁLEZ
<= (OTHERS => '0');
Para finalizar con la programación, se evalúa la FSM en el estado 10, donde se verifica
sí se indica un fin de operación para pasar al estado 11, en caso contrario se quedará en el estado
10 y posteriormente se envía los datos en X"3A", X"2A" y X"31" al acelerómetro con la
finalidad de programar el sexto registro del mismo, como se muestra en el siguiente listado.
En el estado 12 de la FSM se establece obtener los datos del eje X del acelerómetro por
lo que se inicializa el registro correspondiente con el dato X"3B" & X"01" & X"00".
END IF;
END IF;
END PROCESS;
entity TOP is
PORT(
CLK : IN STD_LOGIC;
SDA : INOUT STD_LOGIC;
SCL : OUT STD_LOGIC;
M.C. JOSÉ
LEDS : OUT STD_LOGIC_VECTOR(7 ARMANDO
DOWNTO 0) LARA GONZÁLEZ
);
end TOP;
COMPONENT IIC is
PORT (CLK : IN STD_LOGIC ;
IIC_FIN : OUT STD_LOGIC ;
SCL : OUT STD_LOGIC ;
SDA : INOUT STD_LOGIC ;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BUS_IIC : IN STD_LOGIC_VECTOR(23 DOWNTO 0) ;
IIC_DATA_OUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
IIC_ERROR : OUT STD_LOGIC
);
end COMPONENT IIC;
begin
PROCESS(CLK)
BEGIN
M.C.
IF JOSÉ ARMANDO LARA
RISING_EDGE(CLK) GONZÁLEZ
THEN
IF EDO = 0 THEN
IF IIC_FIN = '1' THEN
EDO <= 1;
ELSE
EDO <= 0;
END IF;
BUS_IIC <= X"3A" & X"2A" & X"30";
END IF;
END IF;
END PROCESS;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
end Behavioral;
M.C. JOSÉ
Como ARMANDO LARA
inconveniente GONZÁLEZ
de la red cableada se puede mencionar que tiene un alcance máximo
de 100 metros, que habría que limitar en la práctica a 90 metros. La red WiFi puede llegar a
distancias de 300 metros pero con pérdida en la calidad de la señal a medida que nos vamos
alejando del router. Además tenemos que tirar el cable, algo que a muchas personas les puede
resultar incómodo o simplemente no quiere que se vean por la pared.
Se trata de un estándar que define no solo las características de los cables que deben
utilizarse para establecer una conexión de Red, sino también todo lo relativo a los niveles físicos
de dicha conectividad, además de brindar los formatos necesarios para las tramas de datos de
M.C. JOSÉ
cada nivel. ARMANDO
El estándar LARA
que rige GONZÁLEZ
algunas las conexiones Ethernet es el IEEE 802.3, de alcance a
nivel internacional, por lo que a veces es frecuente encontrar que éste es nombrado directamente
de esta forma, aunque difieren justamente en las tramas de datos y sus respectivos campos
aplicados.
Los equipos que son susceptibles a conectarse a Ethernet tienen que ser equipos que
permanezcan estáticos, o que siempre los utilicemos por lo general en el mismo sitio. A
continuación se muestra una lista de los equipos más exigentes en su ancho de banda por la
conexión Ethernet:
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Pc o portátiles que siempre vamos a utilizar en el mismo sitio. El portátil lo podemos mover,
pero más o menos, casi siempre lo utilizamos en los mismos sitios, en la mesa del comedor, en
nuestro cuarto de estudio o despacho, entre otros espacios. Aquí un cable amigo siempre será
recibido. Por supuesto, para los equipos de sobremesa no hay ningún problema, ya que en
principio no se van a mover.
NAS (Network Attached Storage) que al igual que los portátiles y sobremesas, será raro que
M.C. JOSÉ
lo estemos ARMANDO
moviendo de un LARA GONZÁLEZ
lado para otro. Si tenemos un disco duro de red, mejor conectado
por cable para sacarle todo el partido entre los diferentes equipos que tenemos conectados en la
misma.
Impresoras, aunque es cierto que la conexión WiFi se ha popularizado mucho, lo cierto es que
la velocidad de impresión merma si nos conectamos a través de WiFi. Lo más rápido es la
conexión directa USB, pero la conexión de red será muy fácil de configurar y facilitará el uso
de la impresora a todos los dispositivos de la red.
Las direcciones IP (Internet Protocol) son un número único e irrepetible con el cual se
identifica una computadora conectada a una red que corre el protocolo IP. Una dirección IP es
un conjunto de cuatro números del 0 al 255 separados por puntos. Por ejemplo, [Link]
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
tiene la dirección IP siguiente: [Link].
En realidad una dirección IP es una forma más sencilla de comprender números muy
grandes, la dirección [Link] es una forma más corta de escribir el número 3357835048.
Esto se logra traduciendo el número en cuatro tripletes.
En el presente trabajo se usan dos FPGA conectadas entre sí, se usa como transmisor
una Xilinx Spartan 6 (XC6SLX9) y como receptor M.C. JOSÉ
una ARMANDO
Xilinx Spartan LARA GONZÁLEZPara la
3E (XC3S100C).
conexión de las FPGA’s del presente trabajo se ha definido la IP [Link] a través de la cual
la FPGA conectada como transmisor tendrá comunicación con la FPGA conectada como
receptor.
TRANSMISOR RECEPTOR
FPGA XILINX SPARTAN 6 FPGA XILINX SPARTAN 3E
XC6SLX9 XCS100E
m13
p14
n14
e14
d13
b14
c14
f13
m5
n4
g1
p4
n5
p6
p7
BOTON6
BOTON5
BOTON1
BOTON7
BOTON4
BOTON3
BOTON2
BOTON0
LEDS0
LEDS7
LEDS6
LEDS5
LEDS4
LEDS3
LEDS2
LEDS1
dato
RS232
RELOJ CLK
ACTIVAR CLK RX_IN RX_in
RX RX DOUT(7:0) Salida(7:0)
BOTON(7:0) MENSAJE(7:0)
MSN_MENSAJE(7:0)
M.C. JOSÉ ARMANDOTX_FIN
DATO_IN(7:0)
LARA GONZÁLEZ
PERMITE
Esta información es recibida por otro ESP8266 configurado como receptor, el cual pasa
la información a un módulo de comunicación serial UART para convertirla en información
paralela y transferirla a otro módulo donde será desplegada en los LED’s de la FPGA receptora,
comoM.C.
se puede
JOSÉ observar
ARMANDO en la Figura
LARA 5.21. Esta figura muestra un diagrama esquemático de la
GONZÁLEZ
parte receptora del proyecto.
RS232
dato
RELOJ CLK TX_FIN
CLK
LEDS(7:0)
TX LEDS(7:0)
RX RX
RX_IN RECEPCION
TX_INI M.C. JOSÉ ARMANDO LARA GONZÁLEZ
DOUT(7:0) DATO(7:0)
DATAIN(7:0)
port
(CLK : in std_logic ;
RX : in std_logic ;
TX_INI: in std_logic ;
TX_FIN : out std_logic:='0';
TX : out std_logic ;
M.C. JOSÉ RX_IN
ARMANDO LARA
: out GONZÁLEZ
std_logic ;
DATAIN : in std_logic_vector(7 downto 0);
DOUT : out std_logic_vector(7 downto 0)
);
end RS232;
Una vez descrita la entidad se inicia con la arquitectura comportamental del programa,
donde se definen primeramente las constantes y señales que serán empleadas dentro del
programa.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
process(CLK)
begin
if rising_edge(CLK) then
rx_vector2 <= rx_vector;
end if;
end process;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En la siguiente línea se genera un flanco de bajada siempre que la condición "1100" se
cumpla.
RECEPCION: process(CLK)
begin
if rising_edge(CLK) then
if paralelo_paso = 0 then
n <= 0;
if flanco_bajada = '1' then
paralelo_paso <= 1;
else
paralelo_paso <= 0;
M.C. JOSÉend
ARMANDO
if; LARA GONZÁLEZ
RX_IN <= '0';
--RX_INS <= '0';
elsif paralelo_paso = 1 then
clk_ini
M.C. <= '1'; LARA GONZÁLEZ
JOSÉ ARMANDO
paralelo_paso <= 2;
elsif paralelo_paso = 2 then
if clk_flanco = '1' then
paralelo_paso <= 5 ;
else
paralelo_paso <= 2;
end if;
elsif paralelo_paso = 3 then
if clk_flanco = '1' then
paralelo_paso <= 4;
else
if n < 10 then M.C. JOSÉ ARMANDO LARA GONZÁLEZ
paralelo_paso <= 3;
else
n <= 10;
paralelo_paso <= 6;
end if;
end if;
elsif paralelo_paso = 4 then
if clk_flanco = '1' then
paralelo_paso <= 5 ;
else
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
paralelo_paso <= 4;
end if;
elsif paralelo_paso = 5 then
n <= n + 1;
dout_paralelo(n) <= RX; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
paralelo_paso <= 3;
else
TRANSMICION: process(CLK)
begin
if rising_edge(CLK) then M.C. JOSÉ ARMANDO LARA GONZÁLEZ
if tx_maquina = 0 then
TX <= '1';
clk_tx_ini <= '0';
tx_n <= 0;
TX_FIN <= '0';
Para iniciar la transmisión, se debe poner TX_INI a '1' manualmente o a través de otro
modulo. Cuando se pone TX_INI a '1' se carga la información que se necesita enviar en tx_data
usando el puerto DATAIN.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
TX <= '0';
clk_tx_ini <= '1';
tx_maquina <= 2;
elsif tx_maquina = 2 then
else
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
tx_maquina <= 5;
end if;
elsif tx_maquina = 4 then
M.C. JOSÉifARMANDO
TX_INI =LARA
'1' GONZÁLEZ
then
TX_FIN <= '1' ;
tx_maquina <= 5 ;
else
TX_FIN <= '0' ;
tx_maquina <= 0;
end if;
end if;
M.C. JOSÉend if;
ARMANDO LARA GONZÁLEZ
end process;
process(CLK)
begin
if rising_edge(CLK) then
if clk_tx_ini = '1' then
if clk_tx_baud < (BAUD_FPGA2-1) then
clk_tx_baud <= M.C. JOSÉ ARMANDO
clk_tx_baud + 1; LARA GONZÁLEZ
clk_tx_flanco <= '0';
else
clk_tx_baud <= 0;
clk_tx_flanco <= '1';
end if;
else
clk_tx_flanco <= '0';
clk_tx_baud <= 0;
end if;
end if;
M.C.
endJOSÉ ARMANDO LARA GONZÁLEZ
process;
end Behavioral;
Con esta parte se concluye la descripción del programa del esquemático RS232 el cual
es utilizado para las dos FPGA´s (FPGA Spartan 3E y FPGA Spartan 6).
entity dato is
Port (CLK : in STD_LOGIC;
PERMITE: in STD_LOGIC;
M.C. JOSÉHABILITAR: in STD_LOGIC;
ARMANDO LARA GONZÁLEZ
MENSAJE: in STD_LOGIC_VECTOR (7 DOWNTO 0);
ACTIVAR: out STD_LOGIC;
MSN_SALIDA: out STD_LOGIC_VECTOR (7 DOWNTO 0)
);
end dato;
PROCESS(CLK)
BEGIN
Después del inicio del process se verifica si existe un flanco de transición positiva en el
pulso del reloj y en cada flanco de subida incrementamos al contador para el retardo.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IF RISING_EDGE(CLK) THEN
CONTA_RETARDO <= CONTA_RETARDO+1;
IF CONTA_RETARDO < ESCALA_RETARDO THEN
PROCESS (CLK)
BEGIN
IF HABILITAR = '1' THEN
IF RISING_EDGE (CLK) THEN
IF EDO = 0 THEN M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IF OK = '1' THEN
msn_salida <= MENSAJE;
EDO <= 1;
ELSE
EDO <= 0;
END IF;
ELSIF EDO <= 1 THEN
IF PERMITE = '1' THEN
EDO <= 0;
ACTIVAR <= '0';
M.C. JOSÉ ARMANDO
ELSE LARA GONZÁLEZ
EDO <= 1;
ACTIVAR <= '1';
END IF;
END IF;
END IF;
END IF;
END PROCESS;
end Behavioral;
[Link]É
Finalmente se muestra el programa para ARMANDO
esquemático LARA GONZÁLEZ
denominado DATO para el
RECPTOR. Primeramente se muestra la entidad, con la descripción de los pines de entrada y
salida del módulo.
entity dato is
Port (CLK : in STD_LOGIC;
RECEPCION: in STD_LOGIC;
DATO: in STD_LOGIC_VECTOR(7 DOWNTO 0);
LED: out STD_LOGIC_VECTOR(7 DOWNTO 0)
);
M.C. JOSÉend
ARMANDO
dato; LARA GONZÁLEZ
Por otro lado y para finalizar con el programa de la parte de recepción, se tiene en el
código siguiente, la descripción comportamental del módulo. En esta descripción, se verifica
primeramente si existe un flanco de transición positiva y si se encuentra activada la recepción
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
se encenderán los LED’s de la tarjeta receptora con los digitos enviados desde los swiches de la
tarjeta transmisora.
PROCESS (CLK)
BEGIN
IF RISING_EDGE (CLK) THEN
IF RECEPCION = '1' THEN
LED <= DATO;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
END IF;
END IF;
END PROCESS;
end Behavioral;
Dentro de un automóvil, los dispositivos que se pueden conectar al bus son por ejemplo:
los elevadores de los vidrios eléctricos, el aire acondicionado, el cierre de puertas automático o
manual, el techo solar, los asientos eléctricos, el sistema de inyección electrónica y todos sus
[Link]
sensores, JOSÉ ARMANDO
panel LARA GONZÁLEZ
de instrumentos, los mandos en el volante, los sistemas multimedia, entre
otros dispositivos. En esta sección del trabajo se realiza a comunicación de dos FPGA’s a través
de este tipo de comunicación. Para esta razón es necesario conocer las bases de la comunicación
por Bus CAN
M.C. JOSÉCAN
El Bus ARMANDO LARA GONZÁLEZ
fue desarrollado inicialmente para aplicaciones en los automóviles y por lo
tanto la plataforma del protocolo es resultado de las necesidades existentes en el área del
automovilismo.
En la Figura 5.22 se muestra un diagrama esquemático simplificado del Bus CAN, como
se puede ver consta básicamente de una topología en forma de bus, donde únicamente se
requieren dos cables trenzados con una impedancia de 120Ω, mediante los cuales se
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
interconectan todos los dispositivos en una misma red. Estos cables de denominan CAN-H y
CAN-L y dependiendo del voltaje de los mismos, el bus puede encontrarse en modo recesivo,
lo que también se conoce como modo común, con ambos cables con el mismo nivel de tensión
o en modo dominante, con una diferencia de potencial entre los cables de 1.5 Volts por lo menos.
Este tipo de conexión tiene como objetivo brindar la mayor protección contra el ruido
electromagnético.
CAN-Hi
120Ω
120Ω
CAN-Low
Figura 5.22.- Diagrama esquemático simplificado del Bus CAN.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Esta protección tiene como soporte el hecho de que la lectura de los bits se basa en la
diferencia de potencial entre los dos cables trenzados, por lo que en caso de que ambos cables
sean sometidos a la misma interferencia electromagnética, seguirán manteniendo constante la
misma diferencia de potencial. En la Figura 5.23 se muestra un diagrama con los niveles de
voltaje del Bus CAN.
V
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1µs
3.5V
CAN-H
2.5V
CAN-L
1.5V
En lo que se conoce como modo común, el voltaje puede estar, en cualquier punto entre
-2 y 7V, según como se especifique. La tensión diferencial del bus, la cual sería la diferencia
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entre CAN_H y CAN_L, en modo dominante debe estar entre 1,5 y [Link] tiempo mínimo que
el bus debe estar activo es de 1µs . No se especifica, en cambio, que la tensión de modo común,
cuando el bus está en modo recesivo, deba estar comprendida entre la tensión de CAN_L y la
tensión de CAN_H cuando el bus está en modo dominante.
Por lo que hace a la sincronización de los bits, todos los nodos de un bus CAN deben
trabajar con la misma tasa de transferencia nominal. Dado que el bus CAN no usa una señal de
reloj separada, factores como la deriva de reloj y la tolerancia de los osciladores causan que
haya una diferencia entre la tasa de transferenciaM.C. JOSÉ
real de los ARMANDO LARAPor
distintos nodos. GONZÁLEZ
ello es necesario
un método de sincronización entre los nodos. La sincronización es especialmente importante en
la fase de arbitraje ya que durante el arbitraje cada nodo debe ser capaz de observar tanto los
datos por él como los datos transmitidos por los demás nodos.
El requisito mínimo para un bus CAN es que dos nodos, estando en sendos extremos de
la red con el máximo retardo de propagación entre ellos, y cuyos controladores CAN tienen unas
frecuencias de reloj en los límites opuestos de la tolerancia de frecuencia especificada, sean
M.C.
capaces deJOSÉ ARMANDO
recibir LARA GONZÁLEZ
y leer correctamente todos los mensajes transmitidos por la línea. Esto incluye
que todos los nodos muestreen el valor correcto de cada bit.
Para llevar a cabo lo anteriormente mencionado, el controlador CAN espera que una
transición del bus de recesivo a dominante ocurra en un determinado intervalo de tiempo. Si la
transición no ocurre en el intervalo esperado, el controlador reajusta la duración del siguiente
bit en consecuencia. Dicho ajuste se lleva a cabo dividiendo cada bit en intervalos o cuantos de
tiempo (del latín quantum) y asignando los intervalos a los cuatro segmentos de cada bit:
sincronización, propagación, segmento de fase M.C.
1 yJOSÉ ARMANDO
segmento LARA
de fase GONZÁLEZ
2. En la Figura 5.24 se
muestra un diagrama d tiempo de la sincronización de los bits del Bus CAN.
PUNTO DE MUETREO
Por otra parte, los segmentos de fase 1 y 2 e usan para llevar a cabo la resincronización
de los nodos. El segmento de fase 1 puede ser alargado o el 2 acortado para la resincronización.
El punto de muestreo del bit se encuentra inmediatamente después del segmento de fase 1. El
punto de muestreo se encuentra habitualmente cerca del 75 % de la duración total del bit.
El arbitraje se produce durante los primeros bits de una trama o mensaje, durante la
transmisión de lo que se conoce como identificador del mensaje. Al final del proceso de arbitraje
sólo debe quedar un nodo con el control del bus. Por ello cada nodo debe manejar identificadores
M.C.
únicos. JOSÉ ARMANDO
Cuando LARA
un nodo pierde el GONZÁLEZ
arbitraje aplaza la transmisión de su trama para intentarlo de
nuevo cuando finalice la trama actual.
Conociendo los identificadores de todas las tramas que intentan ser transmitidas, se
puede establecer de manera determinista el orden en el que son transmitidas. Así, una trama
CAN con identificador más bajo (mayor número de bits dominantes en las primeras posiciones)
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
tiene más prioridad que una trama con identificador más alto.
Es conveniente mencionar que existen cuatro tipos de tramas CAN, siendo estas: la trama
de datos conocida como data frame, la trama remota conocida como remote frame, la trama
de error también llamada error frame y la trama de sobrecarga llamada también overload
frame.
M.C.
Una trama de datos CAN puede ser de uno de los dosJOSÉ ARMANDO
siguientes LARA GONZÁLEZ
formatos:
El estándar dice que un controlador CAN debe aceptar tramas en formato base, y puede
o no aceptar tramas en formato extendido. Pero en cualquier caso debe tolerar tramas en formato
extendido. Es decir, que si un controlador está configurado para que sólo acepte tramas en
M.C.
formato JOSÉ
base noARMANDO
debe lanzarLARA GONZÁLEZ
un error cuando reciba una trama en formato extendido, sino que
simplemente no transmitirá el mensaje al procesador central.
Para el presente trabajo, se ha elegido el formato base de 11 bits, por lo cual en la Figura
5.25 se muestra la gráfica de la trama CAN en formato base.
11 4 8 15
DELIMITADOR ACK
BIT EXT. DE IDENT.
PETICION DE T. R.
INICIO DE TRAMA
BIT RESERVADO
HUECO ACUSE
CRC DEL.
CRC14
CRC13
CRC12
CRC11
CRC10
CRC9
CRC8
CRC7
CRC6
CRC5
CRC4
CRC3
CRC2
CRC1
CRC0
EOF6
EOF5
EOF4
EOF3
EOF2
EOF1
EOF0
IFS2
IFS1
IFS0
ID10
DL3
DL2
DL1
DL0
ID9
ID8
ID7
ID6
ID5
ID4
ID3
ID2
ID1
ID0
D7
D5
D4
D3
D2
D1
D0
D6
DATOS 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1
CAN Hi
RX RX
C10 L7
m13
p14
n14
e14
d13
b14
c14
f13
R1
R2
R5
R7
T4
T5
T8
T9
BOTON6
BOTON5
BOTON1
BOTON7
BOTON4
BOTON3
BOTON2
BOTON0
LEDS0
LEDS7
LEDS6
LEDS5
LEDS4
LEDS3
LEDS2
LEDS1
Figura 5.26.- Conexión de las FPGA’s para la comunicación CAN.
entity NODO_MAESTRO is
PORT(
CLK : IN STD_LOGIC;
RX : IN STD_LOGIC;
TX : OUT STD_LOGIC;
LEDS : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
);
end NODO_MAESTRO;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
COMPONENT LIBRERIA_CAN_INTESC_REVA
M.C. JOSÉ ARMANDO LARA GONZÁLEZ is
begin
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
U1: LIBRERIA_CAN_INTESC_REVA
En esta parte del programa se realiza el mapeo de los puertos de la entidades que se
incluyen en el programa top.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
PORT MAP(
CLK,
RX,
TX,
INI_TRANS,
ERROR_RX,
CAN_DATAIN,
CAN_DATAOUT,
RTR,
M.C. JOSÉDLC,
ARMANDO LARA GONZÁLEZ
NO_RESPUESTA,
OCUPADO,
TX_FIN,
RX_FIN
);
PROCESS(CLK)
BEGIN
M.C.
IF JOSÉ ARMANDO LARA
RISING_EDGE(CLK) GONZÁLEZ
THEN
IF EDO = 0 THEN
INI_TRANS <= '1';
EDO <= 1;
ELSIF EDO = 1 THEN
INI_TRANS <= '0';
IF TX_FIN = '1' THEN
EDO <= 2;
ELSE
EDO <= 1;
END IF;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Cuando la máquina de estado se encuentra en el estado 2, se verifica si ya se termino la
recepción y en caso de ser cierto, a la salida LEDS se le asigna el valor del dato guardado en
CAN_DATAOUT que es el puerto que muestra el valor de los datos que se recibieron.
Posteriormente la máquina de estado pasará al estado 3.
begin
U1: LIBRERIA_CAN_INTESC_REVA
En esta parte del programa se realiza el mapeo de los puertos de la entidades que se
incluyen en el programa top.
PORT MAP(
M.C. JOSÉCLK,
ARMANDO LARA GONZÁLEZ
RX,
TX,
INI_TRANS,
ERROR_RX,
CAN_DATAIN,
CAN_DATAOUT,
RTR,
DLC,
NO_RESPUESTA,
OCUPADO,
TX_FIN,
RX_FIN M.C. JOSÉ ARMANDO LARA GONZÁLEZ
);
Bibliografía
Morris Mano M. (2005) Fundamentos de Diseño Lógico y de Computadoras, Tercera edición, Pearson,
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
México.
Tocci R. J. (2007), Sistemas digitales Principios y Aplicaciones, 10ª edición, Pearson, México.
Wakerly, J. F. (2002), Diseño Digital Principios y Aplicaciones, segunda edición, Pearson, México.
Brown S. y Vranesic Z.G. (2006), Fundamentos de lógica digital con diseño VHDL, Segunda Edición, Mc
Graw Hill, México.
Ciletti, M. D. Advanced Digital Design with the Verilog HDL, Segunda edición, Ed. Prentice Hall.
Ashenden, P. J. (2008), The Designer's Guide to VHDL, Volume 3, Third Edition, Morgan Kaufmann
M.C. JOSÉ ARMANDO
Publishers, Australia. LARA GONZÁLEZ
Chu P. P. (2008), FPGA Prototyping by VHDL Examples: Xilinx Spartan-3, Primera Edición,Wiley &
Sons.
Douglas P. L, (2002), VHDL Programming by example, Cuarta Edición, McGraw Hill, USA.