Transmisión de información con el puerto PCI express x1

Anuncio
1
Encuentro de Investigación en IE, 25 — 26 de Marzo, 2010
Transmisión de información
con el puerto PCI express x1
Gustavo Moreno Domínguez1, Ernesto Castellanos Velasco1, Isaac Campos Cantón1, Raul
Balderas Navarro2
1
Facultad de Ciencias, Universidad Autónoma de San Luis Potosí (UASLP), San Luis Potosí,
S.L.P.- MEXICO, CP-78290. 2 IICO – UASLP, S.L.P. - MEXICO.
TEL: +(444)8262387, ext. 2909, correo-e: [email protected], [email protected]
Resumen — Se muestra la arquitectura y puesta en
marcha de un puerto expreso de periféricos, conocido
por sus siglas en inglés como “PCI-express o PCIe”.
Las capas del modelo de referencia OSI que son
cubiertas con este diseño son: la capa física, la capa de
datos, la capa de transacciones y la capa de aplicación.
Con base a éste modelo de referencia se realiza el diseño
del arreglo lógico re-configurable (FPGA), que permite
escudriñar los paquetes que transitan por el enlace de
“Recepción - Transmisión”, del canal de transacciones
PCIe.
Abstract — In this paper, it is shown the architecture
and the implementation of one configuration for the
Peripheral Communication Interface, “PCI-express or
PCIe”.
The ISO layers covered with this design are the
following: physic, data, transport and application. With
the ISO reference model given for a PCIe port, the
designer can configure a Field Programmable Gate
Array (FPGA), which improve the way of scan all the
bits inside of a link on the transaction packet, TLP
“Receipt and Transmit”.
Descriptores — puerto de entrada/salida, periféricos de
computadora: PCI, PCI-express, diseño digital con
Verilog.
D
I.INTRODUCCIÓN
entro de la arquitectura que conforma al puerto
PCIe, se sabe que se utilizan principalmente 3
capas de procesamiento [1], que están definidas en el
modelo OSI [2]. Las capas de la información son: la

capa física, la capa de protocolo y la capa de
aplicación.
El procesamiento de la capa física se realiza mediante
el circuito NPX1011A de Philips Semiconductor. La
especificación 1.1 del estándar PCIe tiene las
siguientes características: codificación de 8 ó 10 bits
de datos, transmisión y recepción de señales
diferenciales de voltaje, tasa de transferencia de
2.5Gbits/s, y la programación de 4 capas de
información.
A través de la capa física están definidos los canales
de transmisión y recepción (en dos vías), la velocidad
de transferencia depende del número de canales que
se tenga. Las señales digitales que se reciben en el
canal de Recepción (RxD), son procesadas por un
arreglo lógico reconfigurable, la FPGA XC3S1000.
La configuración del experimento se encuentra dada
por una tarjeta de desarrollo de la serie Spartan 3PCIexp de Xilinx.
Además, a través de la capa de transacciones, es
donde se hace uso del núcleo lógico de configuración
(LogiCORE, PIPE PCI-exp), para que proporcione los
bits de datos que se tendrán en la memoria RAM de la
FPGA.
Una vez que el núcleo lógico proporciona los datos
provenientes de las capas de datos, y de transacciones,
se procede a manejar apuntadores de memoria que
permitan realizar el escudriñamiento de las tramas de
bits que se encuentren localizados en el registro base
de direcciones BAR0.
70
Encuentro de Investigación en IE, 25 — 26 de Marzo, 2010
En este punto es donde se configuran las tramas de los
bits de acuerdo a las necesidades que se demanden de
la siguiente capa superior, que en este caso
corresponde a la capa de aplicación.
Esta flexibilidad en el diseño, permite al usuario
utilizar cualquier lenguaje de alto nivel (Basic, Pascal,
C, Java, etc.), para crear una interfaz gráfica, que será
el interprete entre el usuario y el enlace de
comunicación.
Algunas características de la aplicación que se ha
creado para el puerto PCIe son:
•Programación de la aplicación bajo el sistema
operativo Linux,
•Creación y manejo de apuntadores de memoria en
lenguaje C,
•Aplicación gráfica hecha en el entorno gráfico
Lazarus que compila con lenguaje Pascal,
•Consulta de los valores almacenados en cualquiera
de los registros de direcciones (BAR – Base Address
Registers).
A continuación son descritas las secciones del
presente trabajo. En la sección 2, se muestra un
resumen del desarrollo previo en el área referente al
diseño de interfaces de periféricos para computadora.
En la sección 3, se muestra de forma breve la
arquitectura que define a la especificación del puerto
PCIe y se hace mención a las capas del modelo OSI.
En la sección 4, se muestra la especificación técnica
que tiene un enlace del tipo x1. En la sección 5, se
introduce la noción del núcleo de configuración
lógica, que define a la plataforma donde se procesará
la información a nivel de hardware. Se muestra una
tabla con el listado de las partes que permiten
alambrar al experimento. En la sección 6, se muestra
la aportación principal de éste trabajo, pues es donde
se hace mención al manejador y a la interfaz gráfica
del sistema que controla la información a través del
puerto PCIe. Finalmente, se presentan las
conclusiones en donde se mencionan algunas de las
muchas áreas de aplicación que tiene este tipo de
puertos tipo PCIe.
II. DESARROLLO Y EVOLUCIÓN DE LOS
PERIFÉRICOS DE COMPUTADORA
Aquí se presentan varias arquitecturas que han
aparecido con el paso del tiempo.
Uno de los primeros canales de datos que tenía la
computadora personal IBM, fue el canal ISA.
El canal ISA procesa datos y comandos en paralelo,
con 8 o 16 bits. Para obtener una configuración se
requería de que el usuario configurase una serie de
conexiones (jumpers), los cuales asignan recursos
como interrupciones, puertos de entrada - salida y el
canal DMA.
Una de las principales necesidades de computo, existe
con el despliegue de gráficos, por tal motivo han
aparecido canales de datos con mejoras. Entre los
canales de datos se encuentra el estándar VESA y
MCA.
El siguiente avance que se presentó, correspondió al
canal de datos PCI de 32 bits [3], el cual fue creado
por Intel, donde fueron establecidas una serie de
mejoras que facilitaban la instalación de periféricos.
Entre sus características destacó que es un bus
paralelo de 32 bits, tiene una conexión de dispositivos
Plug and Play, establece un espacio de memoria para
la configuración, tiene 2 bloques de memoria por
separado de 32-bit y 64-bits que corresponden a la
memoria y al puerto de direcciones de entrada y salida
de la familia de microprocesadores X86.
Algunas de las características del canal de datos PCI
paralelo de 32 bits son las siguientes:
Reloj de 33.33 MHz con transferencias
síncronas,
Canal de datos de 32 bits o 64 bits,
Tasa de transferencia máxima de 133Mbs con
32 bits (33.33MHz × 32 bits ÷ 8 bits = 133
MB/s),
Tasa de transferencia máxima de 266Mbs con
64 bits,
Registros de direcciones de 32 bits,
Puertos de entrada y salida de 32 bits,
256 bytes con registros de configuración,
Canal de datos compartido es decir, un sólo
dispositivo a la vez puede mandar o recibir datos,
por lo que teóricamente el ancho de banda total se
distribuye,
Las líneas de transmisión en un circuito impreso
deben medir la misma distancia,
Al aumentar la frecuencia de operación,
también aumenta la posibilidad de recibir señales
parásitas.
Después de haberse propuesto el canal de 32 bits en
paralelo, surge el canal PCI-X de 64 bits [4], el cual
presenta casi el doble de capacidad y ventajas, pero al
mismo tiempo el doble de limitaciones y desventajas.
Si se continuara en esta misma dirección del
procesamiento de canales de datos, se tendría que
Encuentro de Investigación en IE, 25 — 26 de Marzo, 2010
diseñar otro canal de 128 bits, lo cual haría imposible
su implementación física debido al exceso de pistas o
canales, el manejo de la sincronía con el reloj, los
tiempos de espera para transmitir o recibir tramas de
datos y principalmente los efectos parásitos eléctricos
que se suman al manejo de muchas líneas de bits en
paralelo.
III. PROCESAMIENTO DE DATOS
CON EL PCI EXPRESS
La aparición de este nuevo canal de datos para
periféricos, permite el uso de un ancho de banda más
grande y que pueda escalar de manera sencilla la
velocidad en la conexión.
Algunas de las principales características son:
Frecuencia de trabajo 2.5 Ghz, versión 1.0a,
Empleo de señales diferenciales de voltaje,
Cada canal de datos (LANE), ofrece un ancho
de banda de 250MB/s,
Múltiplos de posibles velocidades: x1, x4, x8,
x16 y x32,
Ancho de banda máximo 8 GB/s,
Un canal sencillo es full duplex es decir, admite
transmisión y recepción en forma simultánea,
Compatibilidad con el estandar PCI a nivel de
software.
La arquitectura PCIe – Estación de trabajo, tiene
cuatro capas que permiten hacer la comunicación:
Capa física,
Capa de datos,
Capa de transacciones, y
Capa de aplicación (propia de la estación de
trabajo).
El proceso de la información que se envía o recibe,
está ligada con la arquitectura del puerto de
comunicaciones y también con el número de capas
que la arquitectura tiene [1] y [2].
Para entender mejor la forma en la que se procesan
los datos, es necesario saber lo que ocurre en cada una
de las tres capas del PCIe.
71
De la terminal TX del dispositivo A, hasta la terminal
RX del dispositivo B y de la terminal TX del
dispositivo B, hasta la terminal RX del dispositivo A,
se genera y define lo que es un enlace.
En cada enlace son empleados 4 hilos de cobre, donde
cada dos hilos contiene a una señal de transmisión o
de recepción que están basadas en señales
diferenciales.
En la Figura 1, se muestra la configuración de un
canal x1 (LANE).
Figura 1: Descripción del canal x1
CAPA DE DATOS
En esta capa se reciben o envían los paquetes de la
capa física. Los paquetes son enviados en bloques de
8 ó 10bits, todos los bloques se unen, para conformar
la información que se recibirá o se transmitirá.
En la Figura 2 se muestra a cada uno de los bloques
que conforman al paquete que es procesado en la
capa de datos.
Figura 2: Descripción y contenido del paquete de datos.
CAPA DE TRANSACCIONES
CAPA FÍSICA
Esta capa es la encargada de leer o escribir a los bits
por un medio físico, por ejemplo: las pistas de cobre
en una placa impresa y el acoplamiento de impedancia
para el manejo eléctrico de las señales bipolares de
voltaje.
En ésta capa son definidos 4 tipos de protocolos que
permiten definir transacciones de: memoria,
entrada/salida, configuración y mensajes. A
continuación se resume cada uno.
Memoria. Tipos de transacción: lectura de memoria
(solicitud y relleno), escritura de memoria (solicitud).
72
Encuentro de Investigación en IE, 25 — 26 de Marzo, 2010
Las direcciones de memoria que corresponden a
cualquiera de dos formatos; corto (32 bits) o largo(64
bits).
Configuración. Son las transacciones que permiten
presentar toda la información acerca del modelo de la
tarjeta, fabricante, revisión del hardware, número de
serie y las regiones de memoria que se utilizarán.
Tipos de transacción: lectura de configuración
(solicitud y relleno), escritura de configuración
(solicitud y relleno).
Entrada/Salida (E/S). Tipos de transacción: lectura
de E/S (solicitud y relleno), escritura de E/S (solicitud
y relleno) y se utiliza el formato de direccionamiento
corto (32 bits).
Mensajes. Son las transacciones que permiten
manejar: los señalamientos de interrupción, los
señalamientos de error, y el consumo eléctrico de
energía.
IV. CONFIGURACION DEL ENLACE X1
Los circuitos FPGA tienen un número considerable de
terminales de entrada y salida. También se permite la
re-configuración del sistema, que incluso pueda
contar con versiones de desarrollo [3].
El lenguaje de descripción de hardware (HDL) que se
emplea es Verilog, el cual permite configurar el
núcleo lógico y agregarle todas aquellas funciones
que se requieran para el control del puerto PCIe.
La plataforma del núcleo lógico, contiene un entorno
flexible para el desarrollo de prototipos. Físicamente
la plataforma tiene leds indicadores, interruptores, un
conector para puerto serie, memoria flash y PROM,
un conector VGA, y un acoplamiento eléctrico para
conector PCIe x1, un FPGA Spartan-3 XC3S1000 de
Xilinx y dos conectores con 120 terminales tipo QTE,
para expansión de periféricos de entrada y salida que
se denominan módulos hijos.
Con estas especificaciones se cuenta con lo necesario
para diseñar la configuración del puerto PCIe a nivel
de un sistema mínimo de hardware.
Para lograr el acoplamiento de la interfaz eléctrica, la
capa física utiliza amplificadores operacionales que
soportan las altas frecuencias de transmisión del
puerto PCIe. Como alternativa se tiene el circuito
integrado de Phillips, el NPX1011A. Sus
características principales son:
 Especificación 1.1 de PCIe,
 Canal de enlace PCIe de 2.5Gbit/s,
 El reloj, las interrupciones y los datos se
obtienen del canal de datos, es una
comunicación en serie diferencial,
 Codificación y de-codificación de 8b/10b,
 Se basa en Intel PHY para arquitectura PCIe
v1.0 (PIPE),
 Transmisión y recepción a 250 Mhz,
 Reloj externo de 100 Mhz para referencia con
tolerancia de +300 ppm,
V. NÚCLEO DE CONFIGURACIÓN LÓGICA
CON UART
Las capas de datos y transacciones son las que
manejan todo el protocolo dentro del puerto PCIe. El
módulo de desarrollo de Xilinx cuenta con un núcleo
de propiedad intelectual (IP LogiCore), llamado
LogiCORE Endpoint PIPE v1.7. Mediante éste núcleo
se puede configurar el FPGA para que se puedan
incluir algunas configuraciones básicas que se tienen
marcadas en la especificación PCIe v1.1.
La Figura 3 muestra las operaciones que se hacen para
entablar la comunicación con el puerto PCIe.
Figura 3: Diagrama a bloques del núcleo (LogiCore)
Para la aplicación hecha, se decidió introducir y
configurar al módulo de comunicaciones seriales
asíncronas, que también se le conoce como UART
[5].
En la Tabla I, se muestra el listado de todos los
módulos (en formato RTL), que se configuran para
que el núcleo lógico permita incluir el funcionamiento
de la comunicación serial.
Encuentro de Investigación en IE, 25 — 26 de Marzo, 2010
TABLA I. MÓDULOS
POR EDITAR CON EL
PCIE
Descripción
NÚCLEO LÓGICO
Nombre del
Función
módulo
Agregada
1_lane_epi Código RTL donde Terminales:
pe_epse alambran las
Tx y Rx de la
XC3S1000- terminales del circuito UART
FG676-4.ucf y del FPGA.
Diseño del
pci_exp_1
Terminales:
alambrado.
_lane_epipe
Tx y Rx de la
Interconexión interna
_ep.v
UART
con el FPGA
pci_exp_3
Asignación de los
2b_app.v
registros de 32 bits.
Módulos
programables de
entrada salida.
PIO.v
Comunicación serial:
UART
Comunicación serial:
UART. Se
agregan dos
registros de 32
bits para una
entrada, una
salida.
Módulos
Comuniprogramados de
cación serial:
entrada y salida.
UART. Se
PIO_EP.v
Definición del
agregan dos
registro BAR0.
registros de 32
bits.
Conexiones entre
Comuniel registro BAR0 con cación serial:
las terminales de
UART. Se
bar0_io_d
entrada y salida.
agregan los
evices.v
Asignación de
registros que
terminales con el
almacenan los
FPGA.
tramas de bits.
Código generado
async_rec por el usuario o
eiver.v
diseñador de la
interfaz.
73
Se definen
las tareas a
realizar con la
UART serial.
La importancia de la re-configuración del núcleo
lógico, consiste en que se pueden añadir todas
aquellas funciones que el diseñador necesite para
enviar o recibir paquetes de información a través del
puerto PCIe.
En la Figura 4, se muestra el código en RTL-Verilog
que configura al registro base de direccionamientos,
BAR0, para que se alambre y se asigne a un espacio
dentro de la memoria del FPGA.
Diseño de los
módulos de 32 y 64
bits.
8Kbytes de
memoria
programable de
entrada y salida.
Módulo de los
registros de control
del mapeo de
memoria de entrada y
bar0_regis salida. Aqui se define
ters.v
el enlace x1 con las
líneas Tx, Rx.
Contenido
de los
registros que
llevan los
paquetes.
Se agregan
los dos
registros de
TX y RX.
Figura 4: Código Verilog del registro BAR0
del puerto PCIe.
En la Figura 5, se muestra el código en RTL-Verilog
que configura a las terminales y las conexiones de
entrada y salida para el registro BAR0, dentro del
espacio de memoria RAM de 8Kbytes del FPGA.
Figura 5: Configuración del espacio de memoria
de 8Kbytes
74
Encuentro de Investigación en IE, 25 — 26 de Marzo, 2010
VI. APLICACIÓN PARA ENVIAR Y RECIBIR
DATOS
Para establecer la comunicación con el puerto PCIe, la
estación de trabajo a nivel del sistema operativo
requiere de un software especial, comúnmente
llamado manejador. En la arquitectura que se diseñó
se establece que al modificar la memoria interna se
interactúa con las funciones de las que se dotó al
hardware.
La interacción con dicha memoria se consigue
mediante un dispositivo especial con el que cuenta el
sistema operativo LINUX, este es “/dev/mem”, toda la
memoria física y de dispositivos se mapea en éste
espacio. Sólo se debe obtener la dirección base que
asigna el sistema operativo a la controladora del
puerto PCIe.
Para facilitar su manejo se diseñó una librería
(cpcixp.c) en lenguaje C, la cual proporciona las
funciones necesarias para manejar la aplicación desde
cualquier lenguaje de programación o directamente
con el lenguaje C.
En la Figura 6, se muestra el código del manejador de
memoria para el puerto PCIe.
más interesante, se encarga de controlar y manejar las
funciones especiales del puerto PCIe.
Cualquier cambio que se presente inmediatamente se
le informa al hilo de ejecución gráfica para que
realice los cambios correspondientes. Cabe aclarar
que este es uno de los puntos críticos en el diseño de
este proyecto, la arquitectura digital del puerto esta
completamente ligada al diseño de este software, en
ambas partes se debe estructurar como van a
interactuar cada una de las partes involucradas, un
mal diseño diseño digital provoca que sea muy difícil
programar aplicaciones que usen las
funciones
especiales que pueda contener el puerto.
Por otro lado, un mal diseño de software provocará
que el sistema se comporte muy lento o no se haga
buen uso de las funciones especiales que tenga el
hardware del puerto PCIe.
En resumen, a partir de la escritura y/o lectura de la
información en la memoria de la estación de trabajo,
se programa una interfaz gráfica que nos permite
desplegar los valores que se tienen en cualquier
posición del registro de direcciones BAR0.
En la Figura 7, se muestra la aplicación de la terminal
remota que transmite códigos ASCII a través del
puerto serial de la estación de trabajo o PC remota.
Figura 7: Terminal remota de la aplicación.
UART serial
En la Figura 8, se muestra la aplicación de la terminal
local, es decir, la interfaz hecha en la estación de
trabajo que tiene insertada la tarjeta PCIe.
Figura 6: Manejador de memoria PCIe
El desarrollo de la interfaz gráfica en LINUX se llevo
a cabo mediante el sistema RAD Lazarus (lenguaje
PASCAL orientado a objetos) que tiene una paleta de
funciones para interfaces gráficas.
Como puntos especiales en este programa se pueden
mencionar, el heccho de que se manejan 2 hilos de
ejecución. Esto beneficia a sistemas con 2
procesadores o núcleos, donde el primer hilo se
dedica al manejo y actualización de datos de la
interfaz gráfica, mientras que el segundo hilo es el
Figura 8: Terminal local de la aplicación.
Contenido del registro BAR0.
Encuentro de Investigación en IE, 25 — 26 de Marzo, 2010
75
VII.CONCLUSIONES
El resultado final del programa gráfico es bastante
interesante, porque permite el empleo de tecnologías
de vanguardia en el campo de la arquitectura de
computadoras. El primer aporte es con el uso del
puerto PCIe para desarrollo de electrónica de alta
velocidad, el segundo esta relacionado con el manejo
de hardware en un sistema operativo que se considera
de los más modernos y flexibles en cuanto a su
diseño, para terminar el manejo de varios hilos de
ejecución dentro de un sólo programa.
El puerto expreso de periféricos (PCIe), es una
arquitectura
que
permite
dos
tipos
de
direccionamientos (32 ó 64 bits) en un sólo esquema
El procesamiento de los paquetes de bits se puede
configurar para recibir la longitud de bits que se
necesite, gracias a los protocolos que se tienen en la
capa de transacciones.
Esto permite al diseñador una gran variedad de
aplicaciones como son: la instrumentación a nivel
microelectrónico (p.e. tarjetas de adquisición de
datos), control de procesos digitales, control de tráfico
en redes de datos y transmisión inalámbrica. También
se puede enfatizar su aplicación en el área del
procesamiento de señales: imágenes, audio y manejo
de enlaces de datos. Existe un campo abierto al
diseñador en lo que respecta a la creación de
aplicaciones, la capa de aplicación.
Para lograr el funcionamiento de una interfaz tipo
PCIe, se requiere de un trabajo multidisciplinal que
incluya programación de diseño digital (HDL),
conocimiento de la arquitectura de computadoras,
diseño y construcción del sistema electrónico que
haga la interfaz con la capa física, programación y
creación de aplicaciones y entornos gráficos para con
el usuario.
REFERENCIAS
[1]Wilen A.H., Schade J.P., Thornburg R., Introduction to
PCI Express: A hardware and software developer's guide,
Intel Press, E.U.A., (2003).
[2]Tanenbaum, A.S, Redes de computadoras, PrenticeHall, Pearson Educación, México, (2003).
[3]Shanley T., Anderson D., PCI System Architecture,
Addison Wesley - PC System Architecture Series , E.U.A,
(1999).
[4]Shanley T., PCI-X System Architecture, Addison
Wesley - PC System Architecture Series , E.U.A, (2004).
[5]Desarrollo rápido de aplicaciones, (RAD) - Wikipedia,
(1/Feb/2010), http://es.wikipedia.org/wiki/Desarrollo_r
%C3%A1pido_de_aplicaciones.
Descargar