Está en la página 1de 13

Departamento de Ingeniería Electrónica.

 Universidad de Sevilla 
Asignatura: Laboratorio de Microelectrónica Digital 
 

Escuela Superior de Ingenieros


Universidad de Sevilla 
Departamento de Ingeniería Electrónica 
Versión 1.2. 3 de Marzo de 2008 

Práctica 3

LABORATORIO DE
MICROELECTRÓNICA

Jonathan N. Tombs

Fernando Muñoz Chavero

Miguel A. Aguirre

Javier Nápoles

Práctica 3. Receptor de una línea serie 

Departamento de Ingeniería Electrónica. Universidad de Sevilla 
Asignatura: Laboratorio de Microelectrónica Digital 
 

Práctica 3. Comunicación
serie con la tarjeta S3
 

Este  práctica  es  la  tercera  de  un  grupo  de  tres  dedicada  a  entrenar  al 
alumno con el entorno de trabajo Xilinx ISE 9.2 y la tarjeta Digilent S3. 

Se diseñarán un sistema de comunicaciones entre un ordenador personal 
y  las  tarjeta,  basadas  en  la  utilización  de  un  enlace  serie  RS232.  Los 
objetivos de la práctica son los siguientes: 

1. Perfeccionar el entrenamiento con el entorno Xilinx ISE 9.2. 

2. Faciltar  un  mecanismo  de  comunicaciones  entre  un  PC  y  la  tarjeta 
S3 que sirva para transferencia de información entre ambos sistemas. 

Práctica 3. Receptor de una línea serie 

Departamento de Ingeniería Electrónica. Universidad de Sevilla 
Asignatura: Laboratorio de Microelectrónica Digital 
 
 

1. Objetivo propuesto
 

• Se trata de diseñar un enlace serie RS232 con una velocidad de transferencia y 
definición del enlace de comunicaciones fijo. 
• Proveer de un mecanismo de transferencia de información entre la tarjeta y el 
usuario para posibles aplicaciones en los proyectos. 
 

2. Enlace de Serie
 
Un  enlace  serie  es  una  comunicación  asíncrona  a  una  velocidad  determinada.  La 
comunicación se realiza diseñando una UART para la transmisión y para la recepción 
de mensajes. Las condiciones de diseño serán las siguientes: 
• 8 bits 
• Paridad par 
• 1 start y 2 de stop 
• 9600 baudios 
• Half‐duplex. No se permite envío y recepción simultáneos. 
 
Desde el PC utilizaremos la utilidad de Windows “hiperterminal”, que nos facilitará la 
transferencia a través del COM1. Una línea serie tiene dos líneas RX y TX,  RX recibe la 
información y TX la envía. 
Driver Displays
Registro Byte

Registro Byte
DataRec0

DataRec1

RECEPTOR
RX

DataOK

StTrans
DataRec1

TX TRANSMISOR

 
Por otra parte, representaremos la información recibida en los displays de la placa. En 
el  ejercicio  de  hoy  almacenaremos  cuatro  valores  en  sendos  registros  de  8  bits,  que 
forman una pequeña FIFO de dos bytes. A su vez estos registros se representan en el 

Práctica 3. Receptor de una línea serie 

Departamento de Ingeniería Electrónica. Universidad de Sevilla 
Asignatura: Laboratorio de Microelectrónica Digital 
 
display y luego se envían al PC por la línea de transmisión. En la consola hiperterminal 
se visualizarán los valores de la información retrasados un envío. 
 
Para  realizar  la  práctica  se  utilizará  el  puerto  RS232  de  la  placa,  conectado  al  PC 
mediante un cable serie. La norma RS232 obliga a transmitir mediante tensiones de 0 a 
‐15V.  Se  precisa,  pues,  de  un  chip  que  adapte  dichas  tensiones.  En  la  figura  se 
representa el esquema eléctrico de dicho puerto implementado en la placa S3. 
 

 
 

3. Realización de la práctica
Por  razones  didácticas  seguiremos  la  evolución  de  la  práctica  de  menor  a  mayor 
complejidad. Además se proporciona la parte del diseño relacionada con los drivers de 
los display, que pueden ser los mismos que se  utilizaron en la práctica 1. Se comenzará 
realizando un transmisor que envíe un valor fijo al PC. 
 

3.1 TRANSMISOR
El transmisor es un circuito bastante sencillo, en el que la información transmitida por 
la línea TX tiene una configuración fija. En este caso se trata de una carga en paralelo y 
una salida en serie, para enviar 8 bits de información y a los cuales que hay que añadir 
el bit de start y bit proveniente del generador de paridad. La línea de transmisión está 
en estado ‘1’  en  reposo. La transmisión se realizará a la velocidad de 9600 baudios. 
 

Práctica 3. Receptor de una línea serie 

Departamento de Ingeniería Electrónica. Universidad de Sevilla 
Asignatura: Laboratorio de Microelectrónica Digital 
 
Utilizaremos los siguientes elementos para realizar el tranmisor: 
• Contador de bits 
• Contados de baudios 
• Máquina de estados que controla la transmisión 
• Generador de paridad 
• Multiplexor de selector de bit. 
 
En esta práctica es  muy aconsejable utilizar un contador genérico en el que se adapte 
su  extensión  y  valor  de  saturación  a  cada  una  de  las  aplicaciones,  con  señal  de 
habilitación (enable) y señal de reset síncrono. 
 
La línea serie se comporta según la figura adjunta: 
 

Start B0 B7 Paridad Stop

Muestreo

9600 b.p.s.  
B0 es el bit menos significativo del Byte a transmitir, y el bit de paridad representa un 
valor que hace que el número de bits a 1 del byte, junto con el propio bit de paridad, 
sea  par.  Los  bits  de  stop  representan  un  tiempo  de  al  menos  dos  bytes  en  los  que  la 
línea TX está en reposo. 
 
La figura presenta un esquema de una posible solución al circuito. 
 
StSend
Maq Est Fin
Transmit Transm

resets

resets
Contador de Baudios Contador de Bits
(Mod 5208) S9600 (Mod 11)

Selector

0 0

Transmit
DataPar 1-8 TX

GenParidad 9

1 10
 
 

Práctica 3. Receptor de una línea serie 

Departamento de Ingeniería Electrónica. Universidad de Sevilla 
Asignatura: Laboratorio de Microelectrónica Digital 
 
 
3.1.1 Máquina de estados 
La máquina de estados de transmisión controla la transmisión, siguiendo el circuito del 
esquema anterior es: 
StSend=0

Reposo

Transmite=0

Fin=1 StSend=1

Fin=0
Transmision

Transmite=1

 
Donde  StSend  es  un  pulso  de  inicio  de  transmisión,  Fin  es  un  pulso  de  fin  de 
transmisión dado por el contador de bits.  Transmite tiene la misión de habilitar todo el 
tiempo del proceso durante el cual se transmite. 
 
La señal Transmite activará el contador de baudios de transmisión y el de bits, es decir, 
esta señal invertida mantiene a cero estos contadores cuando no hay transmisión.  
 
3.1.2. Contador de Bits de Transmisión 
 
Este contador debe contar al menos 11 bits, donde el bit 0 es el de start, que está a ‘0’, 
los bits 1 a 8 son la información transmitida, el bit 9 es el de paridad y el bit 10 debe 
estar a ‘1’. Este contador cambia cada 1/9600 segundos.  
 
Para  esta  parte  de  la  práctica  se  procederá  a  fijar  un  valor  al  dato  de  entrada.  Se 
propone que para este dato se utilice el carácter hexadecimal 0x45. 
 

3.2 RECEPTOR
En la figura 1 se muestra el esquema general del receptor. Podemos distinguir los 
siguientes bloques a diseñar en VHDL: 
• Desmultiplicador para ajustar la frecuencia de recepción 
• Registro de recepción, conversor de serie a paralelo 
• Generador de paridad 
• Máquina de estados de recepción 
 
En  la  figura  se  muestra  un  esquema  de  la  arquitectura  del  receptor  basado  en  los 
bloques anteriormente mencionados. 

Práctica 3. Receptor de una línea serie 

Departamento de Ingeniería Electrónica. Universidad de Sevilla 
Asignatura: Laboratorio de Microelectrónica Digital 
 
RX

Maq Est Fin


ByteOki Receptor

Contador de Baudios s19200


(Mod 2604)

Resets

Contador de Bits
SmplBit (Mod 10)

Registro Desplazamiento

prt b7 b0 st

DataRec (1 a 8) ByteOki
ByteOk
ByteOkp

Gen Paridad
ByteOkp

 
El  receptor  ha  de  muestrear  la  información  a  mitad  de  bit,  para  asegurar  que  la 
recepción  sea  correcta.  Por  ello  utilizaremos  un  contador  que  desmultiplica  a  doble  
velocidad, y muestreará la señal cada dos pulsos, tal y como se muestra en la figura. 
 

Start B0 B7 Paridad Stop

Muestreo

9600 b.p.s.  
La  velocidad  de  bits  se  ha  de  construir  a  partir  de  una  desmultiplicación  del  reloj  de 
50MHz. Se construye un contador desmultiplicador de 50Mhz a 19200 (2x9600) ciclos 
por segundo: 
50000000 / 19200=2604 
Este contador se utilizará para muestrear cada bit. Se realizará de la siguiente manera, 
mediante una máquina de estados: 
• Se recibe el bit de Start, en el que se pone la línea RX a cero. 
• El contador se pone a cero y utilizaremos una señal de  para muestrear cada dos 
pulsos de saturación. 
• Se han de contar 9 bits (8 + paridad) 
• El dato válido se genera a partir de la valoración de la paridad.  
 
La  necesidad  de  un  contador  de  velocidad  doble  se  justifica  para  garantizar  que  el 
muestreo  se  realizará  a  mitad  del  tiempo  de  un  bit  de  la  información  recibida,  tal  y 
como se muestra en la figura. 
 
3.2.1 Diseño de la máquina de estados de recepción 

Práctica 3. Receptor de una línea serie 

Departamento de Ingeniería Electrónica. Universidad de Sevilla 
Asignatura: Laboratorio de Microelectrónica Digital 
 

 
 
Esta máquina de estados controla el muestreo de señales activadas por el contador de 
baudios.  Se  activa  a  partir  del  bit  de  start  por  RX.  En  reposo  los  contadores  no  se 
mueven.  Una  vez  que  se  activa  el  contador  de  baudios,  se  atiende  a  su  bit  de 
saturación. Cada dos bits de saturación, se muestrea la señal de RX a través de SmplBit. 
El  mecanismo  se  detiene  cuando  el  número  de  bits  muestreado  es  igual  al  valor  de 
saturación del contador de bits ‘SatCtBits’. 
 
3.2.2. Registro de desplazamiento 
 
La información se guarda en un registro de desplazamiento que cuando se habilita, se  , 
transfiere  la  información  al  registro  adyacente,  y  si  no  está  habilitado,  se  retiene  la 
información. 
 
3.3. VERIFICACIÓN 
Para realizar la verficación de la información enviada se propone realizar dos acciones: 
1. Representar en el display de la placa la información de los bytes recibidos. LA 
representación  en  el  display  se  facilita  en  un  módulo  VHDL  ya  realizado  y 
disponible en la web de descargas. 
 
2. Reenvío  al  PC  de  la  información  de  los  bytes,  mediante  el  transmisor.  Los 
valores enviados aparecerían en la consola de la herramienta ‘hiperterminal’. 
 
3.3.1 Hiperterminal 

Práctica 3. Receptor de una línea serie 

Departamento de Ingeniería Electrónica. Universidad de Sevilla 
Asignatura: Laboratorio de Microelectrónica Digital 
 
Es una aplicación de Windows que permite realizar operaciones de comunicación por 
diferentes  canales,  y  en  particular  por  el  puerto  serie,  identificaci  por  COM1:.  Se 
encuentra en Inicio‐>Programas‐>Accesorios‐>Comunicaciones‐>Hyperterminal 

 
 
Con el programa desconectado (icono del teléfono descolgado), Archivo‐>Propiedades 

 
 
Debe  aparecer  conectar  usando  COM1.  Aquí  presionar  el  botón  ∙”Configurar”.  Aquí 
debe aparecer la configuración de la velocidad del puerto serie: 

Práctica 3. Receptor de una línea serie 

Departamento de Ingeniería Electrónica. Universidad de Sevilla 
Asignatura: Laboratorio de Microelectrónica Digital 
 

 
 
La figura muestra la configuración del puerto serie para realizar esta práctica. Una vez 
configurado  la  información  que  se  escriba  desde  teclado  en  la  consola  del 
hyperterminal se transfiere automáticamente al puerto serie, y la información recibida 
será  escrita  en  la  consola.  Los  caracteres  escritos  no  aparecen  en  la  configuración  por 
defecto de la consola. 
 

4. Desarrollo de la Práctica
Como  se  ha  comentado  comenzaremos  por  el  transmisor.  Realizaremos  una  primera 
versión que enviará al PC un valor fijo. 

4.1 Contador
 
CONT_BAUDIOS y CONT_BITS 
Descripción  Contador síncrono con habilitación y valor de saturación. Se llamará a 
esta instancia en cuatro ocasiones, para dos temporizar los baudios y 
dos para contar bits.  
Entidad  entity contador is
Generic (Nbit: INTEGER := 8;
ValSat: INTEGER := 100);
Port ( clk : in STD_LOGIC;
reset : in STD_LOGIC;--reset asíncrono
enable : in STD_LOGIC;
resets : in STD_LOGIC;--reset síncrono
Sat: out STD_LOGIC;
Q : out STD_LOGIC_VECTOR (Nbit-1 downto 0));
end contador;
Descripción de los puertos 
clk  Reloj 
reset  Reset asíncrono activo a nivel alto 
enable  Señal  de  habilitación  activa  a  nivel  alto.  Si  enable=’1’  el  contador 
avanzará uno en la cuenta en el flanco positivo de reloj. 
resets  Reset  síncrono  activo  a  nivel  alto.  Si  resets=’1’  el  contador  pasará  a 
cero en el siguiente flanco positivo de reloj. 
Sat  Pulso de salida que aparece cuando el contador alcanza ValSat. 

Práctica 3. Receptor de una línea serie 
10 
Departamento de Ingeniería Electrónica. Universidad de Sevilla 
Asignatura: Laboratorio de Microelectrónica Digital 
 
Q  Salida de Nbit igual a la valor de la cuenta. 

4.2 Paridad
 
GEN_PAR 
Descripción  Circuito totalmente combinacional para calcular el bit de paridad del 
byte. 
Entidad  entity paridad is
Port ( data : in STD_LOGIC_VECTOR (7 downto 0);
parity: out STD_LOGIC);
end paridad;
Descripción de los puertos 
dato  Byte para calcular la paridad 
Paridad  Valor de la paridad 

4.3 Máquina de estado de transmisión


 
FSM_TRANSMISOR 
Descripción  Circuito de control del proceso de transmisión 
Entidad  entity fsmTrns is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
StSend : in STD_LOGIC;
Fin : in STD_LOGIC;
Transmit : out STD_LOGIC);
end fsmTrns;
Descripción de los puertos 
clk  Reloj de sistema de 50MHz 
rst  Reset asíncrono activo a nivel alto 
StSend  Comienza el proceso de transmisión. Debe ser un pulso de un periodo 
de reloj 
Fin  Final del contador de bits de transmisión 
Transmit  Esta señal está a ‘1’ durante el periodo de tranmisión. 
 

4.4 Máquina de estado de recepción


 
FSM_RECEPTOR 
Descripción  Circuito totalmente combinacional para calcular el bit de paridad del 
byte. 
Entidad  entity fsmRec is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
RX : in STD_LOGIC;
satCtBits : in STD_LOGIC;
s19200 : in STD_LOGIC;
clrCtBits : out STD_LOGIC;
smplBit : out STD_LOGIC;
ByteOki : out STD_LOGIC);
end fsmRec;

Práctica 3. Receptor de una línea serie 
11 
Departamento de Ingeniería Electrónica. Universidad de Sevilla 
Asignatura: Laboratorio de Microelectrónica Digital 
 
Descripción de los puertos 
clk  Reloj de sistema de 50MHz 
rst  Reset asíncrono activo a nivel alto 
RX  Línea de recepción 
satCtBits  Señal indicadora del final del contador de bits 
S19200  Saturación del contador de baudios 
clrCtBits  Reset síncrono de los contadores de baudios y de bits 
SmplBit  Pulso  de  muestreo  de  un  bit.  Se  habilita  el  contador  de  bits  y  el 
registro de desplazamiento. Debe durar un periodo de reloj. 
ByteOk  Se alcanza el final de la cuenta de byte y se debe verificar la paridad. 
SmplBit  Muestreo de un bit 
 

4.5 Registro de Desplazamiento


 
REG_DESPL 
Descripción  Registro de desplazamiento que lee el valor de la información recibida 
en modo serie. Se lee el bit menos significativo primero. 
Entidad  entity SerialPar is
Generic (Nbits: INTEGER := 10);
Port ( clk : in STD_LOGIC;
reset : in STD_LOGIC;
enable : in STD_LOGIC;
RX: in STD_LOGIC;
DataPar: out STD_LOGIC_VECTOR (Nbits-1 downto
0));
end SerialPar;
Descripción de los puertos 
clk  Reloj de sistema 
reset  Reset asíncrono activo a nivel alto 
enable  Señal  de  habilitación  activa  a  nivel  alto.  Si  enable=’1’  cada  registro 
transferirá el contenido de cada uno de sus bits al siguiente. 
RX  Señals de recepción serie. 
DataPar  Valor de salida paralelo. 
 
El  registro  de  desplazamiento  ha  de  realizarse  siendo  el  Msb  el  registro  que  primero 
recibe la información. Puede realizarse utilizando el siguiente código concurrente: 
 
pData(Nbits‐2 downto 0)<=Data(Nbits‐1 downto 1) when(enable=ʹ1ʹ) else Data(Nbits‐2 
downto 0); 
pData(Nbits‐1)<=RX when(enable=ʹ1ʹ) else Data(Nbits‐1); 
 
 

4.6 Presentación de la información


 
PRES_INFO 

Práctica 3. Receptor de una línea serie 
12 
Departamento de Ingeniería Electrónica. Universidad de Sevilla 
Asignatura: Laboratorio de Microelectrónica Digital 
 
Descripción  Presenta  la  información  en  el  display  de  7  segmentos.  Se  trata  de  la 
práctica  1  adaptada  a  este  problema.  Se  entrega  como  parte  del 
enunciado. 
Entidad  entity PrDisplay is
Port ( clk : in STD_LOGIC;
reset : in STD_LOGIC;
data0: in STD_LOGIC_VECTOR (7 downto 0);
data1: in STD_LOGIC_VECTOR (7 downto 0);
siete_seg: out STD_LOGIC_VECTOR (6 downto 0);
select: out STD_LOGIC_VECTOR (3 downto 0));
end PrDisplay;
Descripción de los puertos 
clk  Reloj de sistema 
reset  Reset asíncrono activo a nivel alto 
Data0  Valor del registro 0 a representar 
Data1  Valor del registro 0 a representar 
select  Selector del display 
DataPar  Valor del display de siete segmentos 
 

4.7 Conexionado de pines de entrada/salida


El fichero “USER CONSTRAINTS FILE” debe contener la siguiente información: 
 
NET ʺSelector<0>ʺ  LOC = ʺE13ʺ  ; 
NET ʺSelector <1>ʺ  LOC = ʺF14ʺ  ; 
NET ʺSelector <2>ʺ  LOC = ʺG14ʺ  ; 
NET ʺSelector <3>ʺ  LOC = ʺD14ʺ  ; 
NET ʺclkʺ  LOC = ʺT9ʺ  ; 
NET ʺRXʺ  LOC = ʺT13ʺ  ; 
NET ʺrstʺ LOC = ʺL14ʺ ; 
NET ʺSiete_Seg<1>ʺ  LOC = ʺE14ʺ  ; 
NET ʺSiete_Seg<2>ʺ  LOC = ʺG13ʺ  ; 
NET ʺSiete_Seg<3>ʺ  LOC = ʺN15ʺ  ; 
NET ʺSiete_Seg<4>ʺ  LOC = ʺP15ʺ  ; 
NET ʺSiete_Seg<5>ʺ  LOC = ʺR16ʺ  ; 
NET ʺSiete_Seg<6>ʺ  LOC = ʺF13ʺ  ; 
NET ʺSiete_Seg<7>ʺ  LOC = ʺN16ʺ  ; 
NET ʺTXʺ  LOC = ʺR13ʺ  ; 
 
 
 
 

Práctica 3. Receptor de una línea serie 
13 

También podría gustarte