Está en la página 1de 8

PRACTICA III.

Comunicacin por
puerto serial RS232, en VHDL
Fonseca Badillo Anglica Rub
Divisin de Ingenieras Campus Irapuato Salamanca,
Universidad de Guanajuato
Salamanca, Mxico
rubi_fonsek@hotmail.com

Resumen: En este documento se aplican los conocimientos en


Vhdl, para el desarrollo y simulacin de un circuito de
transmisin de datos por medio de la comunicacin serial. Al
igual que el diseo jerrquico para la integracin de los
circuitos.

I. INTRODUCCIN
En esta prctica se har uso del programa Active HDL
para la realizacin del circuito de transmisin por
comunicacin serial, con el protocolo RS232. Se realizaran
las simulaciones indicadas para cada cdigo y se establecer
el diseo jerrquico para integrar los circuitos vistos en
clase.
II. CONCEPTOS BSICOS
El protocolo de comunicacin RS232 est
Formado por:

8 bits de datos.
Posibilidad de bit de paridad.
Uno, uno y medio o dos bits de stop, a 1
lgico.

III. DESARROLLO
Se presentan las simulaciones de lo de los 3 circuitos
necesarios para la transmisin por medio del protocolo
RS232.
CIRCUITO BAUDRATE
Por medio del circuito visto en clase, se realizaron las
simulaciones del comportamiento de este bloque, para las
siguientes velocidades de transmisin.
a)

110 Baudios

b) 1 200 Baudios
c)

9 600 Baudios

d) 57 600 Baudios
e)
Figura 1. Forma de onda de transmisin RS232

El estado de reposo implica un 1 lgico.


Un bit de start.

256 000 Baudios

Se muestran las simulaciones realizadas en Active HDL


en la figuras simulacin 1 a simulacin 5, donde se agreg
un zoom del primer pulso.

a)

b)

Simulacin 1. Velocidad de transmisin 110 Baudios

Simulacin 1. Velocidad de transmisin 1 200 baudios

c)

Simulacin 2. Velocidad de transmisin 9 600 Baudios

d)

Simulacin 3. Velocidad de transmisin 57 600 Baudios

e)

Simulacin 5. Velocidad de transmisin 256 000 Baudios

a)
En las simulaciones realizadas, se puede observar que en
base al nmero asignado a NBaud, se tiene en la salida
FBaud una serie de pulsos. Mientras ms pequeo sea la
velocidad en baudios, los pulsos estarn ms separados.

CIRCUITO RIGHTSHFT
Este circuito es el que se encarga de proporcionar a la
salida de este bloque un bit cada ciclo de transmisin, el
cul es determinado por la entrada de control CTRL. Para
los siguientes datos de entrada al Bloque, se realizaron sus
respectivas simulaciones:

000000002

b) 001100002
c)

011000012

d) 111111112

Las formas de onda de las simulaciones realizada son las


siguientes:

Simulacin 6. Dato 000000002 =010= carcter nulo ASCII

Simulacin 7. Dato 001100002 = 4810=0ASCII

Simulacin 8. Dato 011000012=9710=aASCII

Simulacin 9. Dato 111111112=25510=nbspASCII

En las simulaciones realizadas de este circuito, se puede ver


como en base a la seal de control, se van transmitiendo los
datos introducidos.

MQUINA DE ESTADOS.
Este circuito es el que se encarga de controlar el proceso
de la comunicacin serial de 8 bits. Dado el grafo que se
planteado en clase, se program la mquina de estados.
(ANEXO).
Para la simulacin se le asign a STR una seal de uno a
partir de los 50ns, y a FBaud una seal cuadrada a
frecuencia menor que la seal reloj.
Se observa que mientras STR no sea uno se permanece
en el estado 0, hasta que cambia a 1 pasa al siguiente estado

S1. Lo mismo pasa con la seal FBaud en los siguientes


estados, mientras es cero no se pasa al siguiente estado,
hasta que es uno.

La simulacin realizada aparece a continuacin:

Simulacin 10. Mquina de estados.

Descripcin del cdigo:


Se tiene las entradas de inicio de transmisin, que est
representada por STR, y la entrada de velocidad de
transmisin, FBAud, al igual que la seal de reloj, CLK y la
seal de reset, RST.
Se tienen como salidas; EOT, que indica el fin de
transmisin y la Salida de control CTR.
Inicialmente, el estado cero, S0, est en espera de la
seal de inicio, STR. Mientras sta seal sea 0, se
permanecer en este estado y EOT se le asigna el valor de
1, que indica que la transmisin se ha finalizado.
Una vez que STR sea 1, la maquina pasar a S1, EOT se
volver 0 para indicar que hay transmisin.
A partir de aqu, el cambio de estado depender solo de
la seal FBaud, mientras que sta sea 0, permanecer en el
estado actual, si es 1 pasara al siguiente estado
aumentando STR en uno. Esto suceder del estado S2 al
S10 donde se enviara el bit de inicio y los datos de manera
serial.
Posteriormente se pasa al estado S11, y finalmente se pasa
automticamente al estado inicial, S0.

IV. CONCLUSIN
En la realizacin de esta prctica, se logr la realizacin
de las simulaciones de los circuitos, as como el trmino del
cdigo de la mquina de estados, para la comunicacin
serial RS232; con lo cual se logr obtener mayor
comprensin del funcionamiento y se pusieron en prctica
los conocimientos adquiridos en clase y en asignaturas
anteriores.

V. ANEXO

Cdigo para la mquina de estados.


library IEEE;
use IEEE.std_logic_1164.all;
entity FSMWrite is
port(
RST: in Std_logic;
CLK: in Std_logic;
STR: in Std_logic;
FBaud: in Std_logic;
EOT: out Std_logic;
CTRL: out Std_logic_vector(3 downto 0)
);
end FSMWrite;
architecture operacion of FSMWrite is
signal Qn, Qp:std_logic_vector(3 downto 0);
begin
COMB:process(STR,FBaud,Qp)
begin
case Qp is
when "0000"=>
if(STR='0')then
Qn<=Qp;
else
Qn<="0001";
end if;
EOT<='0';
CTRL<="0000";
when "0001"=>
if(FBaud='0')then
Qn<=Qp;
else
Qn<="0010";
end if;
EOT<='0';
CTRL<="0000";
when "0010"=>
if(FBaud='0')then
Qn<=Qp;
else
Qn<="0011";
end if;

EOT<='0';
CTRL<="0001";
when "0011"=>
if(FBaud='0')then
Qn<=Qp;
else
Qn<="0100";
end if;
EOT<='0';
CTRL<="0010";
when "0100"=>
if(FBaud='0')then
Qn<=Qp;
else
Qn<="0101";
end if;
EOT<='0';
CTRL<="0011";
when "0101"=>
if(FBaud='0')then
Qn<=Qp;
else
Qn<="0110";
end if;
EOT<='0';
CTRL<="0100";
when "0110"=>
if(FBaud='0')then
Qn<=Qp;
else
Qn<="0111";
end if;
EOT<='0';
CTRL<="0101";
when "0111"=>
if(FBaud='0')then
Qn<=Qp;
else
Qn<="1000";
end if;
EOT<='0';

CTRL<="0110";
when "1000"=>
if(FBaud='0')then
Qn<=Qp;
else

end if;
EOT<='0';
CTRL<="0111";
when "1001"=>
if(FBaud='0')then
Qn<=Qp;
else
Qn<="1010";
end if;
EOT<='0';
CTRL<="1000";
when "1010"=>
if(FBaud='0')then
Qn<=Qp;
else
Qn<="1011";
end if;
EOT<='0';
CTRL<="0000";
when "1011"=>
Qn<="0000";
CTRL<="0000";
EOT<='1';

end case;
end process COMB;
SEC:process(RST,CLK)
begin
if(RST='1')then

CLK='1')then
Qp<=Qn;
end if;
end process SEC;
end operacion;

Qn<="1001";

when others=>
Qn<="0000";
EOT<='1';

Qp<=(others=>'0');
elsif(CLK'event and

También podría gustarte