0% encontró este documento útil (0 votos)
123 vistas14 páginas

Prototipaje RS232 para PC en VHDL

Comunicación RS232 y aplicaciones al campo de las telecomunicaciones e industria eléctrica. Interfaz de comunicación .

Cargado por

Andy Flores
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
123 vistas14 páginas

Prototipaje RS232 para PC en VHDL

Comunicación RS232 y aplicaciones al campo de las telecomunicaciones e industria eléctrica. Interfaz de comunicación .

Cargado por

Andy Flores
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

El protocolo de comunicacin serie full-dplex RS232 asncrona establece una comunicacin fcil entre

computador y perifrico.
El protocolo de comunicacin RS232 establece el formato de la figura XX de transmisin de datos. Est
formado por:

SISTEMA DE PROTOTIPAJE CON COMUNICACIN RS232 CON EL PC


El objetivo de este captulo es realizar una implementacin hardware del protocolo RS232 que se utilizar
para desarrollar una placa de desarrollo para sistemas digitales que interaccionan con el PC. Se va a describir,
pues, el diseo e implementacin una placa de desarrollo controlada por ordenador.
El sistema digital implementado es una placa de desarrollo que se comunica con el PC mediante
comunicacin serie RS232. En este captulo se describe la constitucin global del sistema y se implementa
totalmente el protocolo RS232 en lenguaje VHDL. En el anexo se detallan los componentes finales que
componen el sistema, se dan los esquemticos y layout de la placa de circuito impreso y se proporciona un
programa simple (en Visual Basic) de comunicacin entre el PC y el sistema digital de desarrollo.

Figura 1

El estado de reposo implica un 1 lgico.

Un bit de start a 0 lgico.

7 u 8 bits de datos.

Posibilidad de bit de paridad.

Uno, uno y medio o dos bits de stop, a 1 lgico.

La construccin que se realiza en este captulo de la transmisin asncrona serie se describe de forma topdown.

Durante la transmisin (recepcin) la duracin de cada bit es de 16 ciclos de reloj base. Por consiguiente, en
la realizacin de los drivers (transmisor y receptor) se tendr que contemplar la sincronizacin de la
transmisin / recepcin de datos con el reloj base.

Etapas de desarrollo del sistema digital.

Aunque computador y perifrico se programen para transmitir datos a una frecuencia determinada, es difcil
asegurar que las frecuencias base de los relojes estn perfectamente sincronizadas. Por ello la emisin y
recepcin de datos se realiza tomando como base una frecuencia 16 veces superior a la frecuencia de
transmisin de datos. Por otra parte, durante la recepcin de datos pueden producirse en la transmisin
glitches que, debido a interferencias, pueden introducir errores de recepcin. Para minimizar este efecto
suelen tomarse distintas muestras de la recepcin del bit, tomando como resultado bueno, el valor que ms se
sucede dentro de la recepcin del bit. Es por ello, que durante la recepcin se deber considerar circuitera
adicional para asegurar un comportamiento ms fiable de la transmisin.

Durante el desarrollo de un sistema digital deben sucederse un conjunto de etapas coherentes que permitan la
implementacin del sistema con el mximo de garantas funcionales. Estas etapas pueden dividirse en:
-

Especificaciones del sistema. Componentes de que consta el sistema. Descripcin de componentes.


Requerimientos hardware/software.
o

El protocolo de comunicacin se programar hardware en el circuito EPM7128S de Altera,


siendo el componente principal del sistema. Dentro del circuito programable tambin se
programar un divisor de frecuencia que permite elegir la velocidad de comunicacin con el
PC. La lgica programable restante del circuito puede aprovecharse para ampliaciones de
prestaciones de la placa de desarrollo.

Implementacin hardware.
o

El sistema que se va a implementar es una placa de desarrollo basada en un circuito


programable de Altera. El sistema se comunica con el PC mediante protocolo RS232, cuya
descripcin se realiza mediante lenguaje de alto nivel VHDL y se programa dentro del
circuito programable de Altera.

El sistema se fabricar sobre placa de circuito impreso. La placa ser el soporte fsico de
toda la circuitera de soporte en la comunicacin con el PC, regular la alimentacin, alojar
el circuito programable y contendr un conjunto de conectores y dispositivos para expansin.
La frecuencia base de funcionamiento se obtendr de un oscilador a 1.8432MHz.

Protocolo de comunicacin.
o

El protocolo de comunicacin se describir en lenguaje VHDL. El protocolo implementado


es un protocolo RS232 full-dplex, con bits de start, 8 bits de datos, sin paridad y un bit de
stop.
Se programar, utilizando un cable ByteBlaster de Altera sobre el circuito programable.

Interfase con el puerto serie.


Protocolo RS232
Para detalles ms precisos del puerto serie se recomienda consultar el estndar EIA RS232-c. (expandir....)

En nuestro caso se va a utilizar un formato simple de comunicacin asncrona: se elige una comunicacin
full-dplex basada en un bit de start, 8 bits de datos sin paridad, y un bit de stop. Aunque la implementacin
del protocolo en todas sus opciones tan slo exige un registro de control de operacin adicional, para
simplicidad, se ha optado por fijar las caractersticas de transmisin.
En una comunicacin simple mediante protocolo RS232 (sin control de recepcin) tan slo son necesarias
tres lneas de conexin entre el PC y el perifrico: RxD o recepcin, TxD o transmisin, y tierra.
Puerto serie.
Aunque el puerto serie puede tener un tamao de 25 pines, el formato ms utilizado es el de 9 pines. La tabla
del pinout para ambos conectores es:
Pinout 9 pines

Pinout 25 pines

Transmit Data

Seal
TxD

Salida serie

Funcin

Receive Data

RxD

Entrada serie

Request to Send

RTS

Informa al mdem que la UART est


preparada para intercambiar datos

Clear to Send

CTS

Mdem
datos

intercambiar

Data Set Ready

DSR

Inidica a la UART que el mdem est


preparado para establecer conexin

Signal Ground

GND

Carrier Detection

CD

Se activa cuando el mdem recibe una


portadora del otro mdem

Data Terminal Ready

DTR

Informa al mdem que la UART est

20

preparado

par

preparada para establecer conexin


Ring Indicator

RI

Se activa cuando el mdem detecta una


seal indicadora de sonido.

22

Tabla 1

En sistemas de prototipado con el PC o en comunicaciones serie dedicadas con microcontroladores en los


que los errores de comunicacin son prcticamente nulos existen dos conexionados tpicos simples que
eliminan el protocolo de conexin: el null modem y la conexin loopback.
Null modem
Se establece el conexionado de la figura YYY, en el que slo se requieren tres conexiones: TxD, RxD y
GND. Las conexiones dan a entender al computador que est conectado con un mdem. La transmisin del
PC se recibe en la UART por la seal de entrada. Y viceversa, la transmisin de la UART se enva al bit de
recepcin del PC.

Figura 4. Diagrama de bloques del circuito RS232 programado.

El conexionado de entrada/salida est formado por las seales:

Figura 2. Comunicacin RS232 en modo Null Modem.

La conexin Null modem es la que se utiliza en el ejemplo. Es una conexin simple que slo requiere las tres
conexiones mostradas en la figura.
Conexin loopback
La conexin loopback es til cuando se realiza un programa de debugging en el PC. La seal de datos de
salida del PC se conecta a la de entrada. De esta forma, toda seal enviada por el PC es recibida en la lnea
de entrada como si fuera un eco del mdem.

Frecuencia base de trabajo del circuito: ck.

Seal de reset del circuito: nReset.

Seal de inicio de transmisin: start

Dato a transmitir: dTxD[7..0]. Es un byte que el circuito de transmisin serializa.

Seal de transmisin: qTxD.

Seal de actividad en la transmisin: trans. Su valor se mantiene a uno lgico mientras se est
transmitiendo.

Seal de recepcin: RxD.

Dato transmitido: qRxD[7..0]. Es la paralelizacin del dato transmitido.

Seal de actividad en la recepcin: fi. Su valor es uno lgico cuando no se recibe transmisin alguna.

Los bloques de transmisin/recepcin contienen otras seales internas que pueden observarse, si es necesario,
en situaciones de debugging del sistema.
Debido a la simplicidad del driver de comunicacin RS232, y puesto que no aporta ninguna innovacin al
diseo, se ha implementado a nivel esquemtico. El diseo de los mdulos de transmisin y recepcin se
facilita utilizando una descripcin mediante lenguaje de alto nivel. La figura AAA muestra la jerarqua de
componentes utilizada en la implementacin del driver.

Figura 3. Comunicacin RS232 en modo LoopBack.

Descripcin del protocolo RS232 hardware.


El driver RS232 realiza la comunicacin full-dplex. Consta de dos partes totalmente diferenciadas: el
circuito transmisor y el circuito receptor. El circuito receptor es el responsable de la recepcin de los datos
que se envan desde el computador al perifrico: la lnea TxD de salida del computador se conecta al pin
RxD del perifrico. De forma similar, el circuito transmisor es el responsable del envo de datos al
computador: la lnea de salida TxD del perifrico se conecta al nodo de entrada RxD del computador.
La figura TTT muestra el esquema de conexin (a nivel de esquemtico) de los mdulos transmisor (TxD) y
receptor (RxD).

Figura AAA. Jerarqua del driver RS232.

Aunque el driver RS232 puede implementarse utilizando nicamente mdulos secuenciales, para mejor
claridad se han diseado los drivers de transmisin y recepcin como mquinas algortmicas compuestas por
una unidad de proceso y una unidad de control. Las unidades de proceso estn formadas por mdulos
secuenciales descritos a nivel comportamental. La unidad de control es la encargada de secuenciar las
operaciones en cada driver. Para cada operacin se especificar el valor de cada seal de control de los
mdulos secunciales que componen la unidad de proceso.
Los mdulos que forman el nivel ms bajo estn descritos a nivel comportamental. Las unidades de control
(maquinas de estado finito) controlan el funcionamiento del respectivo driver actualizando, a cada ciclo, el

registro de control. El ejemplo muestra la potencia de la descripcin VHDL de sistemas digitales complejos
por combinacin de las distintas descripciones (comportamental, funcional y estructurada) que permite el
lenguaje.
Para mejorar la respuesta del sistema se ha establecido que la sincronizacin de la unidad de proceso se
realice durante el flanco de subida del reloj, mientras que la unidad de control se realiza por flanco de bajada.

El conjunto unidad de proceso unidad de control que configura el driver transmisor es autnomo y
responsable de la transmisin serie del perifrico. La descripcin VHDL estructurada del driver transmisor es
la siguiente (los tipos de datos utilizados se encuentran definidos en el fichero tipoRS232.vhd del directorio
de trabajo work):
--Driver transmisor
--Consta de unidad de proceso y unidad de control

Circuito transmisor.

-- Tipos ... definidos como ...

La figura CCC muestra un ejemplo de cmo se debe enviar la trama a travs de la lnea de salida TxD del
driver. En el momento en que se recibe la orden de enviar trama, el driver transmisor empieza a serializar el
dato previamente cargado en el registro de desplazamiento y al que se le ha aadido el bit de start y el bit de
stop. Cada dato se enva cada 16 pulsos de la seal base de reloj.

--

bits4:

--

byte:

std_logic_vector (7 downto 0);

--

dato:

std_logic_vector (9 downto 0);

std_logic_vector (3 downto 0);

Library ieee;
Library work;
Use ieee.std_logic_1164.ALL;
Use ieee.std_logic_unsigned.ALL;
Use work.tipoRS232.ALL;
Entity TxD is

Figura CCC. Trama de envo de datos.

port(clk, nReset, start: in std_logic;


d: in byte;

La seal de start indica el inicio de transmisin, cuyo primer paso es la carga en un registro de
desplazamiento de 10 bits, del dato (8 bits) ms los bits de inicio de transmisin y de final. En la figura CCC,
el dato transmitido es el 6D = 01101101, siendo los ltimos bits en transmitirse el bit ms significativo y el
de final de transmisin (que vale 1). El dato transmitido en el ejemplo permite ver adecuadamente los bits de
start y de stop. Durante la transmisin, la seal trans se mantiene a 1.
El driver transmisor (la figura CCC muestra su diagrama de bloques) consta de unidad de proceso y de
unidad de control.

trans: out std_logic;


status: out std_logic_vector(5 downto 0);
qc16, qc10: out bits4;
TxD: out std_logic);
end;
Architecture estruct of TxD is
component U_PTxD is
port(clk, nReset: in std_logic;
d: in byte;
qStat: in std_logic_vector(5 downto 0);
qc16, qc10: out bits4;--Senyal de simulaci
TxD: out std_logic);
end component;
component u_cTxD is
port (nclk, nReset, start: in std_logic;
qc16, qc10: in bits4;

Figura CCC

trans: out std_logic;

El conjunto de seales de que consta la unidad de proceso son:


-

El conjunto de seales clk, nReset, d[7..0], TxD, que se corresponden con el conjunto de seales de
entrada/salida globales ya comentadas en el apartado anterior. d[7..0] corresponde al byte a
transmitir, mientras que TxD es la seal serie que se transmite.
qStat[5..0] es el conjunto de seales de control que gobiernan el funcionamiento de los mdulos
secuenciales internos de la unidad de proceso. Estas seales son observables a la salida de la unidad
de proceso bajo el nombre de status[5..0].

status: out std_logic_vector(5 downto 0));


end component;
signal qStat_i: std_logic_vector(5 downto 0);
signal qc16_i, qc10_i: bits4;
begin
UP: U_pTxD port map (clk=>clk, nReset=>nReset, d=>d, qStat=>qStat_i, qc16=>qc16_i,
qc10=>qc10_i, TxD=>TxD);
UC: u_cTxD port map (nclk=>clk, nReset=>nReset, start=>start, qc16=>qc16_i, qc10=>qc10_i,

Tambin son observables las seales salida de los contadores de ciclos por bit y nmero de bits
transmitidos, denominados qc16[3..0] y qc10[3..0], respectivamente.

trans=>trans, status=>qStat_i);
status<=qStat_i;

Las seales que configuran la entidad de la unidad de control son:


-

El conjunto de seales, ya comentadas, nclk (gobierno por flanco de bajada del reloj), nReset, start y
trans.

El array de seales status[5..0], seales de control de la unidad de proceso.

Las salidas de los contadores de la unidad de proceso qc16[3..0] y qc10[3..0].

--Salidas de debugging
qc16<=qc16_i;
qc10<=qc10_i;
end;

Unidad de proceso.
En un driver RS232 de transmisin la unidad de proceso es responsable de la sincronizacin global del
proceso. Con ello, la unidad de proceso contiene:
-

Un contador que lleva la sincronizacin de los bits: cada 16 ciclos debe salir un bit.

Un contador para transmitir el nmero exacto de bits: exactamente 10.

Un registro de desplazamiento que, tras cargar el dato a enviar, le acopla los bits de inicio y parada y
serializa la transmisin.

Puesto que la unidad de proceso est formada por componentes secuenciales, la descripcin realizada de la
unidad corresponde a una descripcin estructurada.

--Unidad de proceso
Library ieee;
Library work;
Use ieee.std_logic_1164.ALL;
Use ieee.std_logic_unsigned.ALL;
Use work.tipoRS232.ALL;
Entity U_PTxD is
port(clk, nReset: in std_logic;

Figura vvv. Unidad de proceso del driver transmisor.

Los tres mdulos que conforman la unidad de proceso se especifican a partir de su descripcin de alto nivel.
Su descripcin es simple partiendo de ejemplos realizados en captulos anteriores. Son los mdulos contador
de envo de bit, contador de bits y registro de desplazamiento. La figura muestra como para los contadores se
emplea un mismo diseo (el contador c16).

d: in byte;
qStat: in std_logic_vector(5 downto 0);
qc16, qc10: out bits4;
TxD: out std_logic);
end;

Contador de envo de bit.


Es un contador binario ascendente de 0 a 15. Cada vez que llega al ltimo estado la unidad de control enva
orden de enviar un bit por la lnea de transmisin. La descripcin VHDL comportamental es:
--Contador binario ascendente de 16 estados.

Architecture estruct of U_PTxD is


component c16 is
port ( ck, nReset, enable, inici: in std_logic;
q: out bits4);

Library ieee;
Library work;
Use ieee.std_logic_1164.ALL;
Use ieee.std_logic_unsigned.ALL;

end component;

Use ieee.std_logic_arith.ALL;

component sr10ser is

Use work.tipoRS232.ALL;

port ( ck, nPreset, enable, ld: in std_logic;


d: in byte;

Entity c16 is
port ( ck, nReset, enable, inici: in std_logic;

TxD: out std_logic);


end component;

q: out bits4);
end;

signal qc16_i, qc10_i: bits4;

architecture bhr of c16 is

begin

signal estat: integer range 0 to 15;


count16: c16 port map (ck=>clk, nReset=>nReset, enable=>qStat(0), inici=>qStat(1), q=>qc16_i);

begin

count10: c16 port map (ck=>clk, nReset=>nReset, enable=>qStat(2), inici=>qStat(3), q=>qc10_i);

process (ck, nReset)

srSerie: sr10ser port map (ck=>clk, nPreset=>nReset, enable=>qStat(4), ld=>qStat(5), d=>d, TxD=>TxD);

begin

--Salidas

if nReset='0' then estat<=0;

qc10<=qc10_i;

elsif ck'event and ck='1' then

qc16<=qc16_i;

if inici='1' then estat<=0;

end;

elsif enable='1' then estat<=estat+1;


end if;

La figura vvv muestra la composicin del mdulo transmisor. La descripcin comportamental de cada uno
de los mdulos que componen el driver es simple.

end if;
end process;
process (estat)
begin
q<=conv_std_logic_vector(estat, 4);

La figura bbb muestra una posible implementacin del registro de desplazamiento.

end process;
end;

La figura hhh muestra una implementacin del contador.

Figura bbb. Registro de desplazamiento paralelo-serie.

Unidad de control
Figura hhh. Contador de envo de bit.

Contador de bits.
En la implementacin del contador de bits se utiliza el mismo contador diseado para el contador de envo de
bit. La unidad de control se encarga de controlar el conteo de 0 a 9. De esta forma, al llegar el contador de
bits a 10, puesto que se ha enviado el byte mas los bits de start y de stop, la unidad de control da la orden de
parada de transmisin.
Registro de desplazamiento paralelo-serie.

La unidad de control es la encargada de sincronizar todos los eventos de la unidad de proceso. Respecto a las
entradas, la unidad de control es receptiva a la seal de start, que indica inicio de transmisin. En el
momento de llegar el bit de inicio de transmisin, la unidad de control manda la carga del dato a transmitir,
momento a partir del que se entra en la sucesin de estados que llevan a la transmisin del byte. Las dems
entradas que recibe son el estado en el que se encuentran los dos contadores, el de envo de bit (qc16[3..0]) y
el de bits enviados (qc10[3..0]). Para el control del flujo de datos, la unidad de control enva a la unidad de
proceso (recogido como array de status) el conjunto de seales de control que la gobiernan. El diagrama de
flujo de la figura rrr muestra la operatividad de la unidad de proceso.

El registro de desplazamiento paralelo-serie acepta como entrada el byte a transmitir y lo transmite en serie
aadiendo los bits de start y de stop. Aparte, tiene una entrada de preset para inicializacin y una seal de
enable para realizar un desplazamiento a la derecha cada vez que se transmite un bit. El estado de reposo del
registro de desplazamiento es todo unos.
La descripcin comportamental del registro de desplazamiento paralelo-serie es la siguiente.
--Registro de desplazamientocon entrada paralelode 8 bits y salida serie con bits de start y de stop
Library ieee;
Library work;
Use ieee.std_logic_1164.ALL;
Use work.tipoRS232.ALL;
Entity sr10ser is
port ( ck, nPreset, enable, ld: in std_logic;
d: in byte;
TxD: out std_logic);
end;
architecture bhr of sr10ser is

Figura rrr. Diagrama ASM de la unidad de control.

signal estat: dato;


begin
process (ck, nPreset)
begin
if nPreset='0' then estat<= (others=>'1');
elsif ck'event and ck='1' then

La descripcin en lenguaje VHDL de la unidad de control es:

if ld='1' then estat<= '1' & d & '0';

--Unidad de control del driver de transmisin

elsif enable= '1' then

Library ieee;

estat<='1' & estat(9 downto 1);


end if;
end if;

end;

La unidad de control es fcil implementarla como mquina de estados finitos utilizando VHDL. De acuerdo
con las reglas de diseo de mquinas de estado finito, la descripcin de la unidad de control se ha realizado
en dos procesos, el primero dedicado a la transicin de estados, y el segundo a la actualizacin de las seales
de estatus, como funcin de la transicin de estado producida en la mef.

Library work;
Use ieee.std_logic_1164.All;
Use ieee.std_logic_unsigned.All;

end process;

Use work.tipoRS232.All;

TxD<=estat(0);

Entity u_cTxD is
port (nclk, nReset, start: in std_logic;
qc16, qc10: bits4;

La seal asncrona nReset inicializa la unidad de control y, acto seguido, la unidad queda en espera
de iniciar la transmisin.

Cuando se recibe la orden de transmitir, se carga en e registro de desplazamiento el dato a transmitir,


y empieza el conteo del contador c16.

Cada vez que el contador c16 llega a 15 se activa el conteo en una unidad del contador c10 y se
enva un bit por la lnea serie de transmisin.

constant rst: std_logic_vector(5 downto 0):="000000";

Cuando se transmite el ltimo bit se vuelve al estado de espera.

constant spr: std_logic_vector(5 downto 0):="001010";

Mientras se est transmitiendo el dato, la seal de transmisin de dato, trans, se mantiene a 1.

trans: out std_logic;


status: out std_logic_vector(5 downto 0));
end;
architecture me of u_cTxD is
type estados is (reset, espera, load, transm, bit, stop);
-- Las constantes siguientes indican el valor que toman las seales de control (en el orden)
-- qstat()=(ldSR10, enSR10, iniC10, enC10, iniC16, enC16)

constant ld: std_logic_vector(5 downto 0):="100000";


constant trnsm: std_logic_vector(5 downto 0):="000001";

Driver receptor.

constant bt: std_logic_vector(5 downto 0):="010101";

La construccin del driver receptor ha seguido pasos similares a los que se han sucedido en la construccin
del driver transmisor. En este caso, pero, el driver se mantiene a la espera de la llegada de un cero a travs de
la lnea serie de recepcin de dato, momento que se utiliza para iniciar el protocolo de recepcin de datos.

constant stp: std_logic_vector(5 downto 0):="001010";


signal s: estados;
begin

El circuito receptor (ver figura mmm), a similitud del circuito emisor, consta de una unidad de proceso que
contiene los mdulos de proceso de la recepcin y de una unidad de control como sincronizadora del driver.

cambio_estado:process (nReset, nclk)


begin
if nReset='0' then s<=reset;
elsif nclk'event and nclk='0' then
case s is
when reset=>

s<=espera;

when espera=>

if start='0' then s<=espera;


else s<=load;
end if;

when load=>

s<=transm;

when transm=>

if qc16="1111" then s<=bit;

Figura mmm. Driver receptor.

else s<=transm;
end if;
when bit=>

if qc10="1010" then

De acuerdo con la figura, las seales de entrada/salida del driver receptor son:
s<=stop;

Las seales de reloj y de inicializacin asncrona clk y nReset, respectivamente.

end if;

La entrada de datos serie RxD.

s<=espera;

Y las salidas de recepcin de datos que es paralelizada dRxD[7..0] y la de fin de recepcin fi.

Las dems salidas corresponden a seales de observacin internas al mdulo de receptor: qc16[3..0]
y qc10[3..0] que corresponden a las salidas de los contadores de recepcin, qsr10[9..0] que es la
salida del registro de desplazamiento en el que se almacena el valor recibido, maj que realiza la
funcin mayora (detallada a continuacin) y status[5..0] que corresponde al array de seales de
control de la unidad de proceso.

else s<=transm;
when stop=>
end case;
end if;
end process;
salidas:process (s)
begin
case s is
when reset=>

status<=rst; trans<='0';

A diferencia de la unidad de transmisin, la unidad de recepcin tiene que inicializarse cuando se reciba el
inicio de transmisin, y debe realizar un tratamiento mnimo del dato recibido en el que se considerar:

when espera=>

status<=spr; trans<='0';

when load=>

status<=ld; trans<='1';

Realizar la adquisicin del dato en medio de los 16 ciclos de reloj de cada bit que se recibe.

when transm=>

status<=trnsm; trans<='1';

Realizar la funcin mayora de tres adquisiciones seguidas en medio de la recepcin de cada bit.

when bit=>

status<=bt; trans<='1';

when stop=>

status<=stp; trans<='0';

Al final de la recepcin de todo el dato, el dato se cargar en un registro de dato recibido si y slo si
se han recibido 10 bits (incluidos los bits de start y de stop) y que el bit de start sea un 0 y el de stop
sea un 1.

end case;
end process;
end;

El funcionamiento de la unidad de control queda claro a partir del diagrama de estados y de la descripcin
VHDL de la unidad:

Unidad de proceso
Es la encargada de realizar las acciones de proceso de la entrada de datos por la lnea serie RxD, lo que
implica:
-

Contar la recepcin de diez bits.

La recepcin de cada bit es de 16 ciclos de reloj base.

andSR10<=qsr10_i(9) and not(qsr10_i(0)) and qStat(4);

Almacenar el byte transmitido en el registro de desplazamiento, siempre que el bit de start sea 0 y el
de stop sea 1.

r8: reg8 port map (d=>qsr10_i(8 downto 1), ck=>clk, nReset=>nReset, enable=>andSR10, q=>qRxD);

--Salidas
qc10<=qc10_i;

La deteccin del bit se realiza en los ciclos intermedios del conteo de 16 ciclos de reloj base.
Exactamente, se toman tres muestras en los ciclos 5, 6 y 7. El dato a almacenar es la funcin mayora
de los tres muestreos. El dato se transfiere al registro de desplazamiento en el ltimo ciclo del
contador de muestreo.

El proceso se realiza en la unidad de proceso mediante los contadores c16 (cuenteo de las 16 muestras por
bit) y c10 (cuenteo de 10 bits), el registro de desplazamiento de 10 bits (bits de start, stop y byte enviado),
calcular la funcin mayora y guardar el dato recibido en el registro de recepcin.

qc16<=qc16_i;
qsr10<=qsr10_i;
maj<=maj_i;
end;

La figura GGG muestra una implementacin de la unidad de proceso.

El cdigo VHDL estructurado de la unidad de proceso es:


Library ieee;
Library work;
Use ieee.std_logic_1164.ALL;
Use ieee.std_logic_unsigned.ALL;
Use work.tipoRS232.ALL;
Entity U_PRxD is
port(clk, nReset, RxD: in std_logic;
qStat: in std_logic_vector(5 downto 0);
qc16, qc10: out bits4;
qsr10: out dato;
maj: out std_logic;

Figura GGG. Unidad de proceso del driver de recepcin.

qRxD: out byte);


end;
Architecture estruct of U_PRxD is
component c16 is
port ( ck, nReset, enable, inici: in std_logic;
q: out bits4);
end component;
component reg8 is

La implementacin de contadores de la unidad de proceso es la misma de los contadores ya utilizados en el


driver de transmisin.
El registro de desplazamiento de 3 bits (sr3) muestrea durante tres ciclos consecutivos (en medio de cada bit)
el bit que se recibe. A final de recepcin del bit se carga en el registro de desplazamiento.
La puerta AND de la salida del registro de desplazamiento comprueba que el dato se ha recibido con los bits
de start y de stop correctos. Forma la seal de enable de carga del dato en el registro.

d: in byte;

Los contadores son las seales de estado que permiten que la unidad de control enve las seales de control
adecuadas a la unidad de proceso.

q: out byte);

La figura VVV muestra el sincronismo que se realiza durante la recepcin de un bit.

port ( ck, nReset, enable: in std_logic;

end component;
component sr10 is

Figura VVV. Sincronismo en la recepcin de un bit.

port ( ck, nPreset, enable, Il: in std_logic;


q: out dato);
end component;
component sr3 is
port ( ck, nPreset, enable, Il: in std_logic;
maj: out std_logic);
end component;

Registro de desplazamiento de muestreo.


El registro de muestreo en la recepcin de bit se encarga de tomar tres muestras del bit recibido y de realizar
la funcin mayora del bit recibido. El cdigo VHDL viene dado por:
--Registro de muestreo y funcin mayora
Library ieee;

signal andSR10, maj_i: std_logic;

Use ieee.std_logic_1164.ALL;

signal qc16_i, qc10_i: bits4;

Entity sr3 is

signal qsr10_i: dato;

port ( ck, nPreset, enable, Il: in std_logic;

begin

maj: out std_logic);


count16: c16 port map (ck=>clk, nReset=>nReset, enable=>qStat(0), inici=> qStat(5), q=>qc16_i);

end;

count10: c16 port map (ck=>clk, nReset=>nReset, enable=>qStat(1), inici=> qStat(5), q=>qc10_i);

architecture bhr of sr3 is

srmaj: sr3 port map (ck=>clk, nPreset=>nReset, enable=>qStat(2), Il=>RxD, maj=>maj_i);

signal s: std_logic_vector(2 downto 0);

srbyte: sr10 port map (ck=>clk, nPreset=>nReset, enable=>qStat(3), Il=>maj_i, q=>qsr10_i);

begin

process (ck, nPreset)


begin
if nPreset='0' then s<= (others=>'1');
elsif ck'event and ck='1' then
if enable='1' then
s<= Il & s(2 downto 1);

Figura VVV. Registro de desplazamiento de recepcin de dato.

end if;
end if;
end process;
maj<=(s(2) and s(1)) or (s(2) and s(0)) or (s(1) and s(0));

Registro de almacenamiento de dato.


Cdigo VHDL del registro de guarda de dato recibido:

end;

Library ieee;

La figura VVV muestra la implmentacindel registro de muestreo.

Library work;
Use ieee.std_logic_1164.ALL;
Use work.tipoRS232.ALL;
Entity reg8 is
port ( ck, nReset, enable: in std_logic;
d: in byte;
q: out byte);

Figura VVV. Mdulo de muestreo en la recepcin de bit.

Registro de desplazamiento de recepcin de dato.

end;
architecture bhr of reg8 is
begin

Cdigo VHDL del registro de desplazamiento de recepcin de dato:

process (ck, nreset)


begin

Library ieee;

if nreset='0' then q <= (others => '0');

Library work;

elsif ck'event and ck='1' then

Use ieee.std_logic_1164.ALL;

if enable= '1' then

Use work.tipoRS232.ALL;

q <= d;

Entity sr10 is
end if;

port ( ck, nPreset, enable, Il: in std_logic;


end if;

q: out dato);

end process;

end;
end;

architecture bhr of sr10 is


signal estat: dato;

La figura VVV muestra la implementacin del registro de desplazamiento de recepcin de dato.

begin
process (ck, nPreset)
begin
if nPreset='0' then estat<= (others=>'1');
elsif ck'event and ck='1' then
if enable= '1' then

Figura VVV. Registro de guarda de dato.

estat<= Il & estat(9 downto 1);


end if;
end if;
end process;
q<=estat;
end;

La figura VVV muestra la implementacin del registro de desplazamiento de recepcin de dato.

Unidad de control.
La clasificacin de contadores puede realizarse por la forma de contar y por el cdigo que utiliza en el conteo.
Por la forma de contar tenemos los contadores ascendente o up, de estado menor a mayor; descendente o
down, de estado mayor a menor; y ascendente/descendente o up/down, donde existe un seal que controla si
se cuenta de menor a mayor o de mayor a menor, respectivamente.
Si se atiende al cdigo de conteo utilizado, se tienen los contadores binarios, BCD (binario decimal, es decir,
del estado 0 al 9), Johnson, Gray, etc.
Centrando la discusin en un contador binario ascendente, el contador suele disponer de las entradas:

ck, o seal de reloj

Load o carga paralela. Los datos a cargar en el contador proviene de un bus de datos d.

Enable o capacitacin de conteo. El contador slo contar cuando Enable=1.

Y reset o preset sncronos o asncronos.

En la descripcin VHDL del contador se utiliza una seal interna, estado, para mejorar la legibilidad del
cdigo. Por otra parte, el uso de esta variable evita tener que considerar a como seal inout.
La figura 5 muestra el circuito correspondiente al contador en un formato RTL.

El contador suele disponer de las salidas:


-

q o estado actual.

Y la salida terminal, o terminal counter: TC.

La tabla 3 de estados corresponde a la de un contador binario ascendente de 2n estados (n flip-flops) con


reset asncrono, seal de reloj, carga paralela, enable y con salida terminal.
Estado actual (q)

Prximo estado (Q)

Inicializacin

nreset = 0

No operacin

Enable = Load = 0

Carga

Load = 1 y ck

Conteo

Enable = 1 y ck

q = (q + 1)mod 2n

Figura 5. Esquema RTL del circuito contador

En la figura 6 se puede observar el resultado de la simulacin del contador despus de sintetizarlo en el


programable EPM7032.

Tabla 3. Tabla de estados de un contador binario ascendente.

La descripcin VHDL del contador es inmediata a partir de su tabla de estados:


Library ieee;
use ieee.std_logic_1164.ALL;
use ieee.std_logic_unsigned.ALL;
Entity counter is

Figura 6. Diagrama temporal del contador binario ascendente.

generic(N: integer:=4);
port(ck, enable, nreset, load:in std_logic;
d: in std_logic_vector(N-1 downto 0);
tc:out std_logic;
q: out std_logic_vector(N-1 downto 0));
end counter ;

En un contador la inicializacin puede implementarse sncrona o asncrona. En el ejemplo realizado la seal


nreset inicializa el circuito de forma asncrona, puesto que la inicializacin se lleva a cabo tan pronto la seal
nreset se pone a 0-lgico, de acuerdo con la modelizacin realizada del mismo en la descripcin VHDL. El
ejemplo siguiente corresponde a un circuito contador con seal nreset sncrona, puesto que la activacin est
supeditada al evento cambio en flanco de subida en la seal seal de reloj.

Architecture bhr of counter is

--EXEMPLE COMPTADOR

signal estado:std_logic_vector(N-1 downto 0);

-- Contador divisor per 2^N con seal nreset asncrona

begin

Library ieee;
process(ck, nreset)

use ieee.std_logic_1164.ALL;

begin

use ieee.std_logic_unsigned.ALL;
if nreset = '0' then estado <= (others => '0');
else

Entity counter is

if ck'event and ck = '1' then

generic(N: integer:=4);

if load = '1' then estado <= d;


else

port(ck, enable, nreset, load:in std_logic;

if enable = '1' then estado <= estado +1;

d: in std_logic_vector(N-1 downto 0);

end if;

tc:out std_logic;

end if;
end if;
end if;

Architecture bhr of counter is

if (estado = 2**N-1) then tc <= '1';

signal estat:std_logic_vector(N-1 downto 0);

else tc <= '0';

begin

end if;
end process;
q <= estado;
end bhr;

q: out std_logic_vector(N-1 downto 0));


end counter ;

proper_estat: process(ck, nreset)


begin
wait until ck='1';
if nreset='0' then estat <= (others=>'0');
elsif load = '1' then estat <= d;
elsif enable='1' then estat<=estat+1;

q: inout std_logic_vector(N-1 downto 0));

end if;
end process;

end divisor;

sortida: process(estat)

Architecture bhr of divisor is

begin

begin
if (estat=2**N-1) then tc<='1';

process(ck, nreset)

else tc<='0';

begin

end if;

if nreset='0' then q <= (others=>'0');

q<=estat;

elsif ck'event and ck='1' then


if div= '1' then q <= (others=>'0');

end process;

else q <= q +1;

end bhr;

end if;

A diferencia del funcionamiento del contador asncrono (comparar los resultados de simulacin de las
figuras 6 y 7), en caso de resolverse una inicializacin durante el funcionamiento normal del circuito, el
contador sncrono salta al estado inicial en el momento en que se produce el flanco de reloj, por lo que
siempre los estados mantienen el mismo periodo.

end if;
if (q = m) then div <= '1';
else div <= '0';
end if;
end process;
end bhr;

La sntesis realizada contra el circuito de Altera EPM7032, da como resultado el circuito de la figura 7.

Figura 7. Resultado de simulacin de un contador con seal nreset sncrona.

Figura 7. Sntesis del divisor por m=10.

El divisor de frecuencia.
El divisor de frecuencia no es ms que un contador que cuenta un nmero de estados determinado, no
necesariamente igual a 2^n. En particular, un contador de n flip-flops puede considerarse como un divisor de
frecuencia de 2^n estados.

La figura 8 muestra el resultado de la simulacin a nivel temporal. Se comprueba fcilmente que el contador,
en cuanto llega al estado 10 reinicializa el circuito, realizando de esta forma un conteo de m = 11 estados.

Un divisor de m estados (m distinto a una potencia de 2) se construye a partir de un contador de 2^n estados,
con 2^n > m, en el que al llegar al estado m-1 se vuelve al estado inicial.
Existen dos formas clsicas de realizar el divisor de frecuencias. La primera es volviendo al estado inicial
por medio de la seal asncrona reset. El segundo mtodo utiliza la seal sncrona de carga. Siempre que sea
posible, se recomienda utilizar el segundo mtodo en tanto que garantiza un circuito ms inmune a glitches.
El cdigo VHDL siguiente corresponde a un divisor de frecuencia por m=11. Para ello se ha tenido que
utilizar un N=4. Para simplificar el ejemplo se ha considerado el mnimo nmero necesario de seales. Como
entradas slo son necesarias las seales de reloj y el reset asncrono. Como salidas se da el estado y la salida
div que corresponde a la salida terminal cuando se llega al estado deseado. Esta misma seal se utiliza para
devolver al divisor al estado inicial.
Library ieee;

Figura 8. Diagrama temporal del divisor de m = 11 estados.

Implementacin del hardware.


La placa de desarrollo se comunica con el computador utilizando el protocolo RS232. Consta de los
siguientes elementos:
-

Como circuito de control central se utiliza el circuito programable de Altera EPM7128S. El core del
circuito programable contiene el IP RS232 diseado.

La transmisin con el PC se realiza a travs de un circuito adaptador MAX232

La placa se alimenta a 5V y consta del correspondiente regulador de tensin.

La frecuencia base de trabajo se obtiene a partir de un cristal oscilador con frecuencia de


funcionamiento a 1.8432MHz. A partir del oscilador se obtienen (por divisor de frecuencias interno
programado- al circuito programable) las frecuencias de transmisin a la que se desee trabajar.

use ieee.std_logic_1164.ALL;
use ieee.std_logic_unsigned.ALL;
Entity divisor is
generic(N: integer:=4;
M: integer:=10);
port(

-- M = ltimo estado m = 11.

ck, nreset:in std_logic;


div: inout std_logic;

La frecuencia de transmisin se puede programar mediante el microswitch de 8 microinterruptores.

Las entradas/salidas no utilizadas del circuito programable son accesibles al usuario mediante una
serie de puertos para desarrollo de aplicaciones.

Finalmente la placa contiene dos pulsadores, uno de reset general del sistema y otro para envo
hardware de dato hacia el computador, lo que permite comprobar de forma simple el correcto
funcionamiento del sistema.

El pinout establecido para el circuito programable es el siguiente:


Funcin lgica

Identificador

Pines

Alimentacin
Tierra comn
Reset general
Reloj base

VDD (*)
GND (*)
nReset (in)
ckin (in)

3, 13, 26, 38, 43, 53, 66, 78


7, 19, 32, 42, 47, 59, 72, 82
1
83

Programacin
CPLD

Conexin Boundary-Scan

TDI (in)
TMS (in)
TCK (in)
TDO (out)

14
23
62
71

Comunicacin
RS232

Recepcin serie
Salida paralela (de recepcin)
Transmisin serie
Entrada paralela (a transmitir)

RxD (in)
qRxD[7..0] (out) (*)-leds
qTxD (out)
TxD[7..0] (in) (*)

5
52, 51, 50, 49, 48, 46, 45 ,44
4
41, 40, 39, 37, 36, 35, 34, 33

Control/status
de la
transmisin

Envo dato hacia el ordenador


Reenvo dato recibido al ordenador
Transmisin dato al ordenador
Final de recepcin de dato

nSend (in)
nTransp (in) (switch)
transm (out) (*)
Recepcio (out) (*)

6
8
12
11

Frecuencia de
trabajo

Divisor de frecuencia
Frecuencia de transmisin

div[7..0]
ck0 (out) (*)

81, 80, 79, 77, 76, 75, 74, 73


10

Puertos de
expansin

Pin libre
Switch externo sin conexin
Puerto A

pl
nc
A[0..13]

Puerto C

B[0..12]

9
15
70,69,68,67,65,64,63,61,
60,58,57,56,55,54
16,17,18,20,21,22,24,25,
27,28,29,30,31

Seales propias del circuito

OE2n
OE1n

Generales

Otras seales

2
84

(*) Adems de los puertos estas seales contienen pin de conexin externo

Tabla CCC: Pinout establecido para el EPM7128S

La figura ddd muestra el nivel jerrquico superior del circuito programable que contiene el driver transmisor
(de acuerdo con la figura 4). El circuito programable, permite introducir, adems del propio driver
emisor/transmisor RS232, lgica adicional de control de operacin. En concreto, se ha programado tambin:
-

Un multiplexor controlado por la seal nTransp que permite reenviar el dato recibido (a travs de la
lnea RxD) por la lnea TxD hacia el host.

El divisor de frecuencias. La entrada de reloj maestra es la seal de reloj suministrada por el circuito
oscilador. La frecuencia de trabajo se obtiene a travs de un divisor de frecuencias controlado por la
seal div[7..0]. Las frecuencias (admitidas) de trabajo del driver se obtienen mediante divisin por:
110
300

2.4576MHz

1.8432MHz

8392

6144

600
1200
2400
9600
14400
19200
28800
38400
56000
128000
256000

4196
2048
1024
256
128
64

3072
1536
768
192
128
96
64
48

Tabla www. Frecuencias de transmisin dependiente del oscilador.

Figura ccc. Jerarqua superior del circuito programable.

El dispositivo se integra en la placa de desarrollo de acuerdo con la figura vvv. La figura esquematiza los
distintos componentes de que consta la placa.

Figura ccc. Esquema de la placa de desarrollo.

La figura ccc muestra la fotografa de la placa de desarrollo final. El apndice A detalla el conexionado de
los distintos elementos de que consta la placa, los conectores de expansin, y la lista de componentes que
componen la placa de desarrollo. El apndice B contiene el programa Visual Basic que contiene el driver de
comunicacin con la placa de desarrollo.

APNDICE A
HARDWARE DE LA PLACA DE DESARROLLO.
Composicin de la placa.
La placa de desarrollo se compone de los siguientes elementos:

Figura ccc. Placa de desarrollo.

La figura ttt muestra un detalle de la pantalla de comunicacin con el sistema de desarrollo.

Figura ttt. Comunicacin con la placa de desarrollo.

Los aspectos ms concretos de la placa de desarrollo y de sus componentes se exponen en el apndice A.

Driver de comunicacin RS232 implementado en el circuito integrado de Altera EPM7128S.

Adecuacin de seales RS232-TTL mediante el circuito integrado MAX232.

Regulador de tensin de la placa de 5V. La entrada de alimentacin al circuito se controla mediante


un interruptor.

Oscilador a 1.8432MHz.

Divisor de tensin. Mediante el interruptor Microswitch 1 se controla el divisor de tensin. Para una
transmisin a 9600 baudios debe realizarse una divisin por 192. Para frecuencias ms bajas de
transmisin debe incorporarse un divisor interno adicional.

Para la recepcin y la transmisin el sistema contiene un conjunto de leds y un microswitch,


respectivamente, que facilita la comunicacin.

Aparte, el sistema dispone de un conjunto de puertos y conexiones de expansin que facilitan la


comunicacin con sistemas externos. El circuito programable tambin dispone de cierta capacidad de
integracin adicional de hardware para expansin de su capacidad de proceso de la placa de
desarrollo.

El sistema dispone del conector para programacin mediante Boundary-Scan del EPM7128S.

Finalmente, se dispone de las conexiones:

ck0: Salida de reloj correspondiente al reloj base de transmisin de datos.

trans: Seal activa al realizar la transmisin de un dato.

fiRec: Seal activa cuando no se recibe transmisin alguna.

nSend: Pulsador de activacin de transmisin.

nTransp: Interruptor de transparencia en la transmisin. Cuando se activa, el dato que se


enva desde el host se puede retransmitir al host. Puesto que el dato es devuelto al circuito
programable, es posible modificar el dato recibido antes de ser retransmitido. Permite, pues,
comprobar de forma fcil la comunicacin establecida entre host y perifrico.

El interruptor noop no se utiliza. Su uso est a disposicin del usuario. Est conectado a una entrada
del circuito programable.

Esquemtico.
La figura A.1 muestra el circuito esquemtico de la placa de desarrollo.

Lista de componentes.
El sistema est compuesto por los siguientes componentes:
Componente

Cdigo

Altera EPM7128SLC84
Conector programacin
Resistencias pull-up
2 pin setup Altera

U1
C1
RP3
L1

1
1
1
1

Driver RS232

Driver MAX232ACPE
Capacidad 100nF
Conector DB9

U2
C2, C3, C4, C5, C7
J1

1
5
1

Alimentacin/regulacin

Regulador LM7805
Interruptor
Conector alimentacin
Capacidad 4.7uF tantalio
Capacidad 22uF
Capacidad 100nF
Conector test 2-pin

U3
U4
J2
C6
C19
C18
C13

1
1
1
1
1
1
1

Oscilador

Oscilador 1.8432MHz
Microswitch divisor frec.
Resistencias pull-up 8

U4
I4
RP2

1
1
1

Circuitera configuracin

Bi-interruptor
Pulsador
Capacidad 100nF
Resistencias 10Ko
Diodos flyback
Resistencias 1Ko
Diodos led rojo
Diodo led verde
Diodo led naranja
Conector status 4 pin+vdd+gnd

B1
B2, B3
C8, C9
R1, R2, R3, R4
D1, D6
R5, R6, R7
D5
D4
D3
C1

1
2
2
4
2
3
1
1
1
1

Circuitera comunicacin

Microswitch 8 interrupt.
Resistencias 8 pull-up
Conector test 8 pins
Barra 8 leds
Circuito 8 resistencias

I1
RP1
C10, C11
I2
I3

1
1
2
1
1

Conectores expansin

Conector 15 pin +vdd +gnd


Conector 13 pin +vdd +gnd

C12
C13

1
1

Placa de circuito impreso.


Las siguientes figuras muestran las impresiones de la placa de desarrollo:

Figura A.1

# componentes

Circuito programable

APNDICE B
SOFTWARE DEL SISTEMA DE DESARROLLO
Driver de comunicacin

Especificacin del software de comunicacin

Figura nnn. Impresin cara componentes.

Figura nnn. Impresin cara soldadura.

Figura nnn. Impresin de disposicin de componentes.

También podría gustarte