Desarrollos con interfaz PCI J. P. Oliver, S. Fernández Instituto de Ingeniería Eléctrica Facultad de Ingeniería Universidad de la República
Coprocesadores con FPGAs Ventajas –Velocidad –Flexible con un mismo hardware puedo hacer varias funciones –Paralelismo Desventajas –Hardware limitado Ej.: punto flotante –Tiempo de desarrollo –Problemas de cuellos de botella: I/O de datos ISA PCI –32 bits, 33MHz –64 bits, 66MHz PCI-X –64 bits 133MHz
Placa ARC-PCI
PCI bus commands cben[3..0] Bus Command 0000 Interrupt acknowledge 0001 Special cycle 0010 I/O read 0011 I/O write 0100 Reserved 0101 Reserved 0110 Memory read 0111 Memory write cben[3..0] Bus Command 1000 Reserved 1001 Reserved 1010 Configuration read 1011 Configuration write 1100 Memory read multiple 1101 Dual address cycle (DAC) 1110 Memory read line 1111 Memory write and invalidate
Master / Target Master –pide el bus –inicia transferencias RD o WR Target –acepta transf. si es direccionado RD o WR –puede terminar
PCI configuration registers
Configuration cycle
Burst-Read cycle
Burst-Write cycle
PCI Core de Altera
Problemas Lograr burst en ambos sentidos en plataformas PC Velocidad del diseño Target solo ó Master Target ? DMA ? Software: si usamos un SO de verdad es necesario implementar un DEVICE DRIVER
Guías para un diseño eficiente Las elecciones en el diseño de la interfaz PCI son de vital importancia para determinar la performance del sistema. Las diferencias de performance en diferentes placas PCI son causadas por diferencias en la implementación de la interfaz PCI. Hay reglas a seguir que determinan un sistema eficiente y de alta performance.
Reglas Para Un Diseño PCI Eficiente Implementar comandos PCI avanzados. Usar Memory Read Line (MRL) para lecturas menores a 1 línea de cache y de más de 4 bytes (en lugar de realizar una Lectura Común). En porcesadores Pentium y Pentium pro una línea de cache es de 32 bytes (8 Dwords). Usar Memory Read Multiple (MRM) para lecturas de un tamáño mayor a 1 línea de cache. Usar Memory Write Invalidate (MWI) para escrituras a múltiples líneas de cache (deben estar alineadas). No terminar un comando Memory Write (MW) largo para empezar un comando MWI.
Reglas Para Un Diseño PCI Eficiente Usar bursts largos. Para lecturas, es necesario utiliar bursts de al menos 64 Dwords (32 bit words) para obtener buena performance en algunas plataformas. Para escrituras, los bursts deben ser al menos tan largos como el cache line. Usar comandos de memoria, no comandos de I/O.
Reglas Para Un Diseño PCI Eficiente Minimizar Latencia. –Responder a accessos lo más rápido posible y tratar de evitar insertar estados de WAIT en de las transferencias de bloques. Seguir las reglas, NO experimentar. –Es posible obtener sistemas de buena performance sin seguir las reglas, pero este sistema puede no comportarse bien en sistemas futuros.
Algunas Conclusiones PCI no es fácil (comparado con ISA) Un core PCI requiere gran cantidad de celdas Diseño cuidadoso para cumplir requisitos de tiempos (con los chips de la ARC-PCI) Para lograr buena velocidad es necesario Master/Target con DMA
¿En Qué Estamos? ARC-PCI –Desarrollar una interfaz PCI que pueda transferir burts sin wait en ambos sentidos –Desarrollar una biblioteca hardware transparente al programador –Desarrollar un driver Linux –Desarrollar un core PCI propio Diseñar una nueva placa PCI con chips más rápidos y SDRAM