Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ing. Mecatrónica
2MM15
Este protocolo está disponible en los puertos seriales de la mayoría de las computadoras personales
(PC).
El primer puerto serial denominado comúnmente COM1 tiene asignada la interrupción IRQ4 y sus
registros empiezan en la dirección de la memoria %3F8, y de ahí en adelante hasta la %3FE. Para las
máquinas que tienen un segundo puerto serial este se denomina COM2, tiene asignada la interrupción
IRQ3 y sus registros se alojan en las direcciones %2F8 hasta la %2FE. Los puertos denominados
COM3 y COM4 a pesar de que se mapean en un espacio diferente de los puertos anteriores, comparten
las interrupciones, COM1 con COM3 y COM2 con COM4, por esto es muy difícil utilizar los cuatro
cuando se trata de hacerlos funcionar mediante interrupciones.
PuTTY
PuTTY es una aplicación de emulador de terminal que puede actuar como cliente para los protocolos
informáticos SSH, Telnet, rlogin y TCP sin procesar. La palabra "PuTTY" no tiene significado, [1]
aunque 'tty' a veces se usa para referirse a los terminales Unix, como un acrónimo de "teletipo".
PuTTY se escribió por primera vez para Microsoft Windows, pero se ha portado a otros sistemas
operativos, incluidas algunas plataformas similares a Unix. Mac OS y Mac OS X todavía se están
portando, mientras que los puertos no oficiales se han portado a los sistemas operativos Symbian y
Windows Mobile.
PuTTY es actualmente un software beta. Licenciado bajo la Licencia MIT, y es un software gratuito
y de código abierto.
En esta práctica, pudimos experimentar el protocolo de comunicación RS232, para esto se necesitó
de la implementación de tres módulos: Transmisión (TX), recepción (RX) y uno para visualizar los
datos en un display de 7 segmentos, así como la asistencia de un programa que permite leer los puertos
COM, de la computadora, en este caso se utilizó PuTTY.
A través de las terminales TX y RX de la Nexys, es enviada una cadena de caracteres, los cuales, bajo
el protocolo RS232, se mandan con un pulso que abarca los 9600 bits por segundo, así pues, esta
cadena es recibida a través del puerto COM y mostrada en PuTTY. Así mismo se envía al presionar
una tecla, el código binario correspondiente a una palabra de 8 caracteres (8 bits), los cuales,
representan una letra en código ascii , la cual se verá representada en el display de 7 segmentos.
Cabe aclarar que el proceso de transmisión y recepción se realizan paralelamente y con ayuda de la
estructura en TOP LEVEL, nos permite tener una visualización más certera de su funcionamiento, al
momento de programar.
A continuación, se anexarán los códigos correspondientes:
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 22.10.2019 07:55:09
// Design Name:
// Module Name: top_level
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
bounce u1(.clk(clk),.btn_in(btn_in),.btn_out(btn_out));
UART_TX_CTRL u2(.SEND(btn_out),.DATA(DATA),
.READY(READY),.UART_TX(UART_TX),.CLK(clk));
UART_RX u3(.clock_100Mhz(clk), .i_RX_Serial(i_RX_Serial),
.o_RX_DV(o_RX_DV),.o_RX_Byte(o_RX_Byte) );
seg
u4(.segm(segm),.anod(anod),.o_RX_Byte(o_RX_Byte),.o_RX_DV(o_RX_DV),.led(led),.led2(le
d2));
endmodule
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_unsigned.all;
entity UART_TX_CTRL is
Port ( SEND : in STD_LOGIC;
DATA : in STD_LOGIC_VECTOR (7 downto 0);
CLK : in STD_LOGIC;
READY : out STD_LOGIC;
UART_TX : out STD_LOGIC);
end UART_TX_CTRL;
begin
--Logica de estado
next_txState_process : process (CLK)
begin
if (rising_edge(CLK)) then
case txState is
when RDY =>
if (SEND = '1') then
txState <= LOAD_BIT;
end if;
when LOAD_BIT =>
txState <= SEND_BIT;
when SEND_BIT =>
if (bitDone = '1') then
if (bitIndex = BIT_INDEX_MAX) then
txState <= RDY;
else
txState <= LOAD_BIT;
end if;
end if;
when others=>
txState <= RDY;
end case;
end if;
end process;
end Behavioral;
library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.all;
entity UART_RX is
generic (
g_CLKS_PER_BIT : integer := 868 -- Needs to be set correctly
);
port (
clock_100Mhz : in std_logic;
i_RX_Serial : in std_logic;
o_RX_DV : out std_logic;
o_RX_Byte : out std_logic_vector(7 downto 0)
);
end UART_RX;
begin
-- Purpose: Control RX state machine
p_UART_RX : process (clock_100Mhz)
begin
if rising_edge(clock_100Mhz) then
case r_SM_Main is
end case;
end if;
end process p_UART_RX;
end RTL;
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 16.10.2019 09:29:14
-- Design Name:
-- Module Name: seg - Behavioral
-- Project Name:
-- Target Devices:
-- Tool Versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_unsigned.all;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
entity seg is
Port (o_RX_Byte: in std_logic_vector(7 downto 0);
segm:out std_logic_vector(7 downto 0);
o_RX_DV: in std_logic;
led: out std_logic_vector(7 downto 0);
led2: out std_logic_vector(7 downto 0);
anod: out std_logic_vector(7 downto 0) );
end seg;
begin
process(o_RX_DV)
begin
led<=o_RX_Byte;
anod<="10111111";
if (o_RX_DV'event and o_RX_DV='1') then
baff<= o_RX_Byte;
end if;
end process;
process(baff)
begin
case(baff) is
when "00110000" =>segm<="00000011";--0
when "00110001" =>segm<="10011111" ;--1
when "00110010" =>segm<="00100101" ;--2
when "00110011" =>segm<="00001101" ;--3
when "00110100" =>segm<="10011001" ;--4
when "00110101" =>segm<="01001001" ;--5
when "00110110" =>segm<="01000001" ;--6
when "00110111" =>segm<="00011111" ;--7
when "00111000" =>segm<="00000001" ;--8
when "00111001" =>segm<= "00001001"; --9
when "01100001" =>segm<= "00010001"; --A
when "01100101" =>segm<= "01100001"; --E
when "01101001" =>segm<= "10011110"; --I
when "01101111" =>segm<= "00000010"; --O
when "01110101" =>segm<= "10000011"; --U
when others =>segm<= "11111111"; --U
end case;
end process;
end Behavioral;
Conclusiones
Fajardo Aguirre José Ignacio:
Para la realización de esta práctica, considero que la complejidad radica, en el buen manejo del pulso,
pues, al este ser un sistema asíncrono, depende mucho de la cantidad de bits por segundo que envía
y al terminar los 8 bits, es importante enviar un bit de finalización de la cadena, para poder dar por
terminada la recepción, de otra forma, se estancará en este estado.
Castanedo Hernández Juan Eduardo:
Gracias a esta práctica se apreció y aprendió de la complejidad y la manera de establecer una
comunicación entre el FPGA y la computadora, siendo los datos tanto de transmisión como de
recepción, así mismo recibir los datos transmitidos por ambos casos para pasar a interpretarlos y
mostrarlos en su respectivo equipo. Así mismo se comprendió sobre la importancia de la transmisión
de datos de forma serial asíncrona pues con una sola señal de transmisión se pueden enviar y recibir
varias cantidades de datos de una manera más simplificada.
Terán León Fernando Rafael:
Mediante la comunicación serial, es posible tanto enviar como recibir datos entre la FPGA y nuestra
PC, lo cual es bastante útil para la lectura de sensores así como el almacenamiento de datos. Gracias
al desarrollo de esta práctica, nos fue posible el comprender que mediante el puerto RS232 de la
FPGA es posible enviar y recibir datos simultáneamente entre la PC y la tarjeta, así de cómo es posible
esta comunicación.
Mediante una señal de reloj, la FPGA Lee los bits de entrada a una velocidad en este caso de 9600
baudios (9600 bits por segundo) así como también es capaz de enviar datos simultáneamente a dicha
velocidad. Esto gracias a una serie de sentencia lógicas que almacenan la información recibida, la
analiza e interpreta en la FPGA