Análisis
de la conversión serie-paralelo de una placa de red
Fecha: 22 de
marzo del 2020
Escenario
Analizando el escenario anterior apareció el interrogante: si los datos llegan por un cable uno detrás del otro, o sea en serie,
y los sistemas digitales trabajan con los datos en paralelo (bus de direcciones y datos), debe existir un mecanismo en las
placas de red que genere dicha conversión, y allá fuimos.
Cuando se transmite por ethernet nos imaginamos que un tren de ceros y unos van de una host a otro y allí queda, pero suele
ser mas complejo, por ejemplo que cada byte de transmite de derecha a izquierda (LSB to MSB) y no como lo leemos los humanos
de izquierda a derecha y entiendo que es justamente por el motivo que describiremos en este lab.
Esquema de bloques de una placa de red:
Fuente: Lund university
Una trama ethernet a su máxima capacidad de 1518 bytes se compone de aproximadamente 15200 bits llegando por el cable y debe
ser procesada por una placa de red para reenviarla a memoria a través del canal DMA y luego ser procesada por el sistema operativo.
Suponiendo una NIC con un sistema interno de 16 bits, una trama ethernet completa de 1518 bytes, luego de la decodificación 8B/10B son
12144 bits que se dividirán en 1518 bloques de un byte (8 bits) para ser “paralelizados”, puestos en un buffer (en 1518 partes), para analizar
la MAC destino y el CRC, y si está todo correcto, quitar la cabecera de layer 2 (12144-48-48-16-32 nos quedan 12000 bits), y para luego ser
enviados a una memoria (supongamos) de 32 bits, de a 32 bits por vez, o sea en 375 veces.
Suponiendo un sistema de 64 bits seran 188 operaciones de escritura en memoria.
Fuente: Lund university
Una vez en memoria, todo el trabajo es de la CPU principal del equipo, del sistema operativo y la aplicación afectada.
Serial Input Parallel
Output (SIPO):
Fuente: www.incb.com.mx
Para entender cómo funciona este circuito comenzaremos desde la situación inicial donde todos están desactivados o con sus salidas Q a bajo nivel.
Inicialmente, se aplicará a la entrada de datos un nivel alto (1). Como podemos ver, es a entrada es hecha por la entrada D del primer flip-flop (FF1).
Con la llegada del pulso del clock a este flip-flop, cambia de estado y con este "almacena" el pulso aplicada a la entrada, que aparece en su salida.
Veamos que esta señal es almacenada con el flanco positivo de la señal del clock, cuando el nivel alto debe estar presente en la entrada del flip-flop.
En el siguiente pulso de clock, la entrada del primer flip-flop no tiene más alto nivel y por lo tanto FF1 no cambia estado, sin embargo, en la salida de
FF1 tenemos un nivel alto, y esta salida está conectada a la entrada del segundo flip-flop (FF2).
Esto significa que con la llegada del segundo pulso de clock, el nivel lógico de la primera salida se transfiere a la segunda salida.
A continuación, tenemos que, el bit 1 aplicado en la entrada cambia, pasando a la salida del segundo flip-flop.
Se aplica un nuevo nivel 1 en la entrada del circuito, al mismo tiempo que los primeros traslados al segundo flip-flop, el segundo se desplaza a
la salida del primer flip-flop.
Ahora que llega un tercer pulso clock, tendremos nueva transferencia y el nivel alto o el bit 1 se transfiere a la salida del siguiente flip-flop, es sea, FF3.
En otras palabras, en cada pulso de clock, los niveles existentes en las salidas flip-flop, ya sean 0 o 1, se transfieren al siguiente flip-flop.
Por lo tanto, suponiendo que apliquemos, en secuencia, en la entrada de un registro como los niveles indicados 0101, tendremos la siguiente secuencia de
condiciones de salida para los flip-flop de un shift-register que usan 4 de ellos:
Veamos entonces que en el quinto pulso de clock, el primer pulso de clock, el primer nivel lógico, aparece a la salida del último flip-flop (FR4) y que, si leemos
la salida de los flip-flops, habrá registrado los niveles aplicados en la entrada: 0101.
En un shift-register, después del número apropiado de pulsos del clock, que corresponde al número de bits que el contiene, puede almacenar estos datos.
Para "borrar" los datos registrados en un shift-register, todos a la vez, como se indica, sólo tiene que aplicar un pulso en la entrada CLEAR del shift-register y
todos los flip-flops tendrán sus salidas en el nivel bajo o 0.
MSB LSB LSB MSB
| | | |
El dato 10101111 realmente se transmite como <-- 11110101---, entonces tenemos que interpretar que se recibirá el primer 1 e irá al bit 1, 1 al bit 2,1 al bit 3,
1 al bit 4, 0 al bit 5, 1 al bit 6, 0 al bit 7 y 1 al bit 8 y luego del shift-register nos quedará 10101111.
Parallel Input Serial
Output (PISO):
Los datos se colocan al mismo tiempo en la entrada, ya que funciona en paralelo. Por ejemplo, si vamos a almacenar los datos 0110, estos se aplican al mismo
tiempo en las entradas correspondientes de los flip-flops.
En el primer pulso de clock, los flip-flops "almacenan" estos datos. Así, los flip-flops que tienen nivel 1 en su entrada S pasan este nivel a la salida (FF2, FF3).
Por otro lado, los que tienen el nivel 0 en su entrada, mantienen este nivel en la salida (FF1 y FR4).
Esto significa que después del pulso del clock, las salidas de los flip-flop presentarán los niveles 0110, ahora con los siguientes pulsos de reloj “empujaremos”
los bits de las salidas desplazandolos de izquierda a derecha.
Probable escenario de 8 bits:
Esta es mi interpretación de como pueden llegar a ser los mecanismos para recibir un tren de bits en serie y poder almacenarlos en una memoria
buffer de 8 o 16 bits para luego enviarlos a memoria principal a traves del DMA.
Cómo es el proceso de envío desde el buffer a la memoria principal puede llevar todo otro análisis completo que escapa a este documento.
Llega a la placa de red un tren de bits que se decodifican 8B/10B, reemplazando los símbolos por los datos reales, estos entran al shift-register
y a la cuenta de 8 (bits) un latch retiene esa entrada en la salida, para que puedan ser escritos en una memoria buffer con la orden WRITE mientras
el shift-register se reinicia con CLEAR y procesa los próximos 8 bits.
En el próximo ciclo de escritura en memoria los datos se almecenarán en la dirección N+8 para que los bloques (bytes) queden contiguos y la trama
quede almacenada (aproximadamente) de la siguiente manera:
Detalle de una pastilla real que realiza todo este trabajo:
The TLK2501 performs data conversion
parallel-to-serial and serial-to-parallel. The clock extraction functions
as a physical layer interface device. The serial
transceiver interface operates at a maximum speed of 2.5 Gbps.
The transmitter latches 16-bit parallel data at
a rate based on the supplied reference clock (GTX_CLK).
TLK2501 Block Diagram:
Fuente: Texas Instruments
Resúmen:
Este escenario (y el anterior) son mayormente interpretaciones mías de como son los procesos, con la ayuda de bibliografía
externa (basada mayormente en el libro Network Processors de Douglas Commer) y como pudimos ver, todo este diagrama
de bloques y circuitos hoy están ensamblados en una pastilla como el caso anterior.
Sólo me interesa transmitir el concepto y la inquietud de que sucede en los procesos de red, el resto queda a cargo de hasta
donde cada uno quiera llegar y estudiar, no hay límites.
(2020) Quarantine
makes me have binary visions
Rosario, Argentina