Embedded Linux sobre FPGA -...

Post on 24-Sep-2020

15 views 0 download

Transcript of Embedded Linux sobre FPGA -...

Embedded Linux sobre FPGA

Sistemas Embebidos – FIUBAPedro Ignacio Martos

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Temario

Descripción de la arquitectura del kernel de linux y de los controladores de dispositivoPresentación de un sistema linux embebido sobre FPGA utilizando un procesador softcoreDistribuciones de linux orientadas a linux embebidoImplementación de aplicacionesImplementación de un controlador de dispositivoImplementación del hardwareOpenCores y WishBone

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

¿Porqué usar linux embebido?

Interoperabilidad e infraestructura disponiblesConectividad a redes, distintos sistemas de archivos, soporte para dispositivos; gestión de interrupciones, etc.Gestión de memoria, procesos y threads.

PortabilidadCambio de plataforma de hardware con mínimos cambios en software (x86, PowerPC, Microblaze, ARM Cortex, etc)

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

¿Porqué usar linux embebido?

Entorno de desarrolloMismas herramientas que en linux “desktop”Las aplicaciones pueden ser prototipadas en linux desktop y después migradas a linux embebido con mínimos cambios.

EscalabilidadLinux embebido (ej. FPGA) - > Single Board Computers (ej. Beagleboard) - > desktop - > server - > Cluster (ej. Linux Rocks Distribution)

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Estructura de un sistema linux

User ApplicationsTareas específicas, shells, etc.

LibreríasC Runtime (glibc), conectividad, gráficos, etc.

Kernel + System Call InterfaceHardware

CPU, controladores de interrupciones, controladores de memoria, etc

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Arquitectura del kernelInterface de llamadas a sistema (SCI)Gestión de procesos (PM)Sistema de archivos virtual (VFS)Gestión de memoria (MM)Conectividad (Network Stack)Controladores de Dispositivos (DD)Ítems específicos de la arquitectura (Arch)

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Interface de Llamadas a Sistema

Forma normalizada de acceder a código que debe correr en kernel spacePuede ser dependiente de la arquitectura de hardwareEs una forma indirecta de ejecutar código privilegiado

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Sistema de Archivos Virtual (VFS)

Abstracción para la API de acceso a archivosCada tipo específico de sistema de archivos implementa su propia funcionalidadDesacopla el formato del sistema de archivos respecto de su soporte físico

Ext3 en disco SATAFAT32 en un disco USBReiserFS en un RAID

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Arquitectura de los dispositivosPueden ser fundamentalmente de 3 tipos:

Orientados a caracteres (char)Secuencias (streams) de bytesSe utiliza open(), close(),read(),write(),seek(),etc.

Orientados a bloques (block)El sistema opera con grupos (bloques) de bytes en cada transacción.Suelen ser dispositivos direccionables, de almacenamiento o zonas de memoria.Las aplicaciones operan contra un buffer que cuando se llena el sistema realiza la transacción al dispositivo.

Orientados a ConectividadOrientados a paquetesasincrónicos

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Acceso a los dispositivos

Los dispositivos char y block se ven como archivos del tipo “device node”

/dev/ttyS0 (puerto serie 0)/dev/sda (primer disco sata)

Los dispositivos de red no tienen una representación directa en el sistema de archivos

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Clases de dispositivos

Se definen distintas clases de dispositivos y subsistemas

TTYUSBI2CSPI

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Gestión de Procesos

Los procesos son la unidad de trabajo del scheduler; tienen su propio

Espacio de memoriaContexto del sistema de archivosContexto de seguridadContexto de conectividad

Cada thread de un proceso comparte el espacio de memoria del proceso

El cambio de contexto entre threads tiene poca sobrecargaLa escalabilidad es mas simple en sistemas multi CPU

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Linux y uCLinuxLinux empezó en la arquitectura i386

Gestión de memoria por hardware (MMU)Memoria VirtualMemoria Paginada Mecanismos de protección

Otras arquitecturas son similaresPowerPC (IBM)SPARC (Sun)

uCLinux se emplea en arquitecturas sin MMUM68000 (Motorola / Freescale)BlackFin (Analog Devices)ARM7-TDMI

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

uCLinux

No tiene MMUNo hay protección de memoriaNo hay memoria virtualNo hay conversión de direcciones, modelo de memoria plano.Todos los procesos leen/escriben en todo el espacio de memoria

Para la gran mayoría de las aplicaciones no hay que realizar modificaciones al código.

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Desarrollo para sistemas embebidos vs desarrollo para desktop

Compilación cruzada (cross compiling)Se compila en una plataforma distinta (host) de la que finalmente ejecutara el código (target).El runtime del host es distinto que el del target.

Usar linux simplifica esta situación

Se utilizan bootloadersEl proceso de arranque (bootloading) puede ser

Desde una memoria flashDesde red

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Herramientas de generación de código (toolchain)

Las toolchains comprenden:Compilador (gcc, código de alto nivel a assembler)Ensamblador (as, assembler a código objeto)Enlazador (ld, código objeto a imagen ejecutable)Debugger (gdb)Otras herramientas (ej. Make, programadores jtag, etc.)

Hay toolchains para generar código en arquitecturas con y sin MMU

uCLinux: microblaze-uclinux-gcc / arm-elf-gccLinux: mb-linux-gcc / gcc target=xxx

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Mas Información

http://www.ibm.com/developerworks/linuxhttp://www.ibm.com/developerworks/linux/library/l-linux-kernelhttp://www.ibm.com/developerworks/linux/library/l-system-calls

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Distribuciones orientadas a linux embebido

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Herramientas para linux embebido sobre FPGA (Xilinx)

ISESíntesis, mapping, place and route

EDKImplementación de procesadores hardblock y softcore; ip catalog (UART, ethernet, usb, pcie, etc).Toolchain para microblaze (softcore) y PowerPC (hardblock)

CoreGenLibrería/Catalogo de propiedad intelectual (controladores de memoria, filtros, bloques lógicos, etc.)

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Herramientas para linux embebido sobre FPGA (Xilinx)

ChipScopeProAnalizador lógico dentro de la fpga, visualización de señales internas via jtag

iMPACT“Programación” de la fpga o de una PROM; compatibilidad jtag para otros dispositivos

PlanAheadPartición del diseño, Reconfiguración parcial

SysGenIntegración con matlab: “simulink a vhdl”

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Uso de distribuciones orientadas a linux embebido

En general:Distintas partes se obtienen de distintos lugares.

Kernel / entorno de desarrolloToolchainHerramientas para configuración del hardware

Mantener todos los componentes de software sincronizados es muy difícilLa documentación esta distribuida y es especifica de cada componente de software

Genera un entry-level muy alto (se requiere mucha experiencia previa)Es difícil encontrar la información aún para usuarios experimentados

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Uso de distribuciones orientadas a linux embebido

Utilizando una distribución orientada a linux embebido

Los componentes de software son compatibles entre si y están sincronizados.La documentación esta concentrada y es coherenteLa distribución esta probada sobre el hardware soportadoHay herramientas que simplifican la tarea de configurar la distribución para el hardware específico

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Algunas distribuciones

Blue Cat Linuxhttp://www.lynuxworks.com/embedded-linux/embedded- linux.php

MontaVista Linuxhttp://www.mvista.com/product_detail_mvl6.php

Petalinuxhttp://www.petalogix.com/products/petalinux

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Petalinux

Distribución fuertemente orientada a Xilinx.Código fuente del Kernel/librerías/aplicacionesToolchain orientada a microblazeSoporte de hardware para placas xilinxScripts desde línea de comandosHardware

Librerías para soporte de ip cores de xilinxReference designs de placas de xilinx

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Workflow

Configuración del hardwareSe utiliza el workflow de EDK

Configuración de softwareSeleccionar la plataforma target (virtex, spartan, microblaze, powerpc)Configurar el kernel y aplicaciones (monolítico, módulos cargables, etc)Configurar el software de acuerdo a configuraciones especificas del hardware (direcciones de memoria, interrupciones, etc.)

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Workflow (cont.)

Generación del sistema“build” del kernel y filesystemGeneración de la imagen final

ArranqueConfiguración del bootloaderCarga de la imagen

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Algunas herramientas especificas

Petalinux-boot-prebuiltInicia el hardware con una imagen ya construida

Petalinux-jtag-bootTransfiere una imagen a la FPGA a través de JTAG

Petalinux-new-platformCrea una nueva plataforma (hardware) a partir de un template configurable (útil para nuevas placas)

Petalinux-new-appCrea e inicializa el entorno para desarrollar una aplicación, crea un makefile apto para compilar la aplicación

Petalinx-new-moduleCrea e inicializa el entorno para desarrollar un controlador de dispositivo. Crea un makefile apto para compilar el controlador (*.ko)

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Compilación cruzada

Para linux desktop[user@host]$ gcc –o hello hello.c[user@host]$ ./helloHello, world![user@host]$_

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Compilación cruzada (cont.)

Para linux embebido[user@host]$ microblaze- uclinux- gcc –o hello \hello.c[user@host]$ ./hello./hello: cannot execute binary file[user@host]$_

Compiladores:microblaze-uclinux-gcc (sin MMU)mb-linux-gcc (con MMU)

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Compilación cruzada (cont.)

mb-gccGenera una imagen monolítica directamente ejecutable en microblaze.Enlaza con librerias de C reducidas.No se utiliza para desarrollo en linux embebido

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Instalación de la aplicación compilada

Comando “make all install”En desktop; copia el binario generado a /usr/bin, /usr/local/bin, etc.En petalinux; copia el binario a la zona donde se tomaran las aplicaciones para generar la imagen del filesystem

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

AplicacionesAplicaciones standard

Shells, utilidades, webservers, conectividad, benchmarking, etc.Se guardan en petalinux- dist/userSe seleccionan mediante “menuconfig”Se compilan e instalan automáticamente durante el make de la distribución

Aplicaciones creadas por el usuarioSe pueden agregar directamente a petalinux- dist/userSe puede usar la herramienta petalinux- new- app y se crea en software/user- apps

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Cross debugging

Host:$ microblaze-uclinux-gdb \/path/a/miaplicacion.gdb

(conexión remota a la ip del sistema con microblaze, puerto 1234)

Target$ gdbserver host:1234 /bin/miaplicacion

Microblaze-uclinux-gdb corre en el host, controla la aplicación en el target a través de tcp/ip y la aplicación gdbserver

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Cross debugging

Archivo miaplicacion.gdbmiaplicacion es el binario ejecutable

Corre en el target bajo el control de gdbservermiaplicacion.gdb es una imagen en formato ELF que tiene los símbolos de debugging

Nombres de variables y funciones, etcSe utiliza en el host por la aplicación microblaze-uclinux- gdb

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Controladores de Dispositivos

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Introducción

Los controladores de dispositivo definen como se interactúa con un dispositivo físico:

Inicialización, control y apagado del dispositivo.Transferencias in/out, DMA, etc.Implementación de la API (open(),read(), write(), close(),etc)

Los controladores de dispositivo deben ser portablesEntre arquitecturas (i386, PPC, Cortex, etc.)Entre distintas configuraciones de sistema

Cantidad de dispositivos presentesRangos de direcciones del dispositivoTopología del bus al que esta conectado (pcie, usb)

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Configuración¿Cómo saber qué dispositivos están presentes (cantidad, rango de direcciones/irq)?

Algunos buses son autodescriptivos (ej. usb)El bus asigna recursos al dispositivoEl S.O. le pregunta al bus los dispositivos y sus recursos asociados.El controlador de dispositivo usa esa información para acceder al dispositivo

En linux embebido sobre FPGA generalmente la configuración es estática

Los dispositivos y su rango de direcciones se definen en tiempo de síntesis.No se pueden averiguar en tiempo de ejecución

¿Cómo hace entonces un controlador de dispositivo en linux sobre FPGA para acceder a la información del dispositivo?

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Configuración

Estructura “platform_device”Descriptor genérico para buses/dispositivosContiene información del rango de direcciones e IRQOpcionalmente puede tener información específica del dispositivo

Se puede inicializar en forma estática o dinámica (en tiempo de compilación del kernel o en tiempo de inicialización del sistema)El kernel provee un mecanismo para asociar el descriptor con el controlador

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Estructura platform_deviceLa inicialización del sistema llama a platform_device_register() con una estructura platform_device como parámetroLa inicialización del controlador de dispositivo llama a platform_driver_register() con una estructura platform_driver como parámetroEl kernel asocia el platform_device con el platform_driver a través del campo “.name” e invoca a la función del campo “.probe” del platform_driverLa función .probe consulta la estructura platform_device para obtener información del hardware

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Ejemplo de platform_device

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Ejemplo de platform_device (cont.)

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Ejemplo de platform_device (cont.)

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

BSP

¿Cómo se obtienen los valores para inicializar la estructura platform_device?

Fijos (hard-coded)Forma tradicional para SoCs basados en microprocesadores / microcontroladores (ARM7, Blackfin, etc.)Inadecuado para FPGA / Softcores por lo dinámico de su desarrollo.

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

BSP

Mediante una herramienta de generación automática (en el caso de Petalinux es “autoconfig”)

El EDK permite el acceso a la base de diseño donde se fija el hardware del sistemaAutoconfig lee la configuración de hardwareAutoconfig genera la información de hardware en un formato comprensible por el kernel.

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

BSP (Ejemplo)Ip core Uartlite (linux-2.6-x/arch/microblaze/platform/common/xuartlite.c

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Controladores de dispositivos como Módulos del kernel

Los controladores de dispositivos se integran al kernel en forma estática al momento de compilarlo (kernel monolítico) o en forma dinámica al cargarse como módulos independientes según se necesiten.Los módulos cargables son archivos con extensión .koSe cargan con el comando “insmod”Se descargan con el comando “rmmod”

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Uso de módulos del kernel

“Used by” cuenta la cantidad de “clientes” del módulo

Procesos que tengan abiertos archivos asociados al hardware controlado por el móduloUso interno por parte del kernel

rmmod solo se puede invocar cuando la cuenta es cero

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Uso de módulos del kernel

Casi todos los controladores de dispositivos se pueden implementar en forma estática o como módulo cargable.La capacidad de cargar módulos se configura en el kernel al momento de compilarlo

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Módulos cargables en desktop y en embebido

Los módulos cargables se usan mucho en desktop

Se puede dar soporte a una gran variedad de hardware manteniendo el kernel de tamaño reducidoEl espacio en disco es mucho mas barato que el espacio de memoria, se tienen los módulos precompilados en el sistema de archivos.Solo se cargan los módulos de acuerdo al hardware presente

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Módulos cargables en desktop y en embebido

En embebido tienen pros y contrasAl tener un kernel reducido en tamaño se reduce el tiempo de inicialización (boottime) En filesystems implementados en memoria generan un doble costo de espacio: una instancia como archivo .ko y una instancia como módulo cargado en el kernelSuele convenir utilizar módulos cargables durante el desarrollo y generar un kernel monolítico en el producto final.

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

I/O en userspace

Es común en el desarrollo de sistemas embebidos.En linux sin MMU es posible pero es una mala idea:

Dificil de mantenerNo es portableEs suceptible de errores: el kernel implementa mecanismos de serialización para el acceso al hardware que no están disponibles en userspaceNo hay gestión de interrupciones en userspace

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

I/O en userspace

Es posible mapear un dispositivo ubicado en “baseaddress” a una zona de memoria:

Sin MMU es casi lo mismo que:ptr=(void *) baseaddress

Con MMU el kernel remapea baseaddress, dando acceso directo al hardware

Portabilidad muy limitadaBaseaddress esta fija en el códigoNo hay gestión de interrupciones

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

I/O en userspace - UIO

Para soluciones estos inconvenientes se creo la API “UIO”

Linux- 2- 6-x/drivers/uioPermite una implementación portable para controladores de dispositivo en userspaceHay gestión de interrupciones (básica)Tiene asociado un pequeño controlador que se ejecuta en kernelspaceTodo el trabajo se realiza en userspace

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

UIO – Pros y Contras

Pros:Permite un prototipado rápido

No requiere recompilar o reinicializar el kernelLos errores no suelen afectar a otras partes del sistemaPermite trabajar con dispositivos sin tener profundos conocimientos del kernel

Muy útil cuando ningún controlador en kernelspace cumple la funcionalidad necesaria

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

UIO – Pros y Contras

ContrasLa gestión de interrupciones es muy básicaLa latencia de interrupción es alta y variableNo hay DMA desde/hacia userspacePermite la creación de controladores cerrados

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Mas Información

Controladores de dispositivos“Linux Device Drivers 3rd.edition”

UIOwww.celinux.org/elc08_presentations/uio080417celfelc08.pdf

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

MMU en detalle

Sistemas con MMU en hardwareDirecciones virtuales

Mapeo automático entre direcciones físicas y virtualesEvita problemas de fragmentación de memoriaPermite el paginado y swapping a disco

Sistemas de protecciónSe generan excepciones cuando la aplicación trata de realizar I/O o acceso a zonas de memoria fuera de su rangoPermite al S.O. aislar las aplicaciones entre si y respecto de si mismo.Se controlan las zonas compartidas de memoria

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

MMU en detalle

Sistemas sin MMU – uCLinuxLos desarrolladores de sistemas embebidos están acostumbrados a acceder directamente al hardwareEn la medida de lo posible hay que utilizar controladores de dispositivos y prácticas standard

El kernel y los controladores implementan mecanismos de acceso serializado al hardware y gestión de interrupcionesEl código es mas mantenible y portableSe puede migrar a sistemas con MMU cuando sea necesario

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

MMU y microblaze

Microblaze puede sintetizarse con y sin MMULa MMU es muy similar a la del procesador PowerPC 405, para facilitar la migración a estos procesadoresHay 3 niveles de implementación

Usermode: controla el acceso a instrucciones privilegiadasProtección: Usermode + control del acceso a otras zonas de memoriaVirtual: Protección + direcciones virtuales

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

MMU: ¿si o no?

Criterios de selección:Tamaño: agregar la MMU duplica el footprint del microblazePerformance: MMU introduce los cambios de contexto y fallos de pagina, generando una sobrecarga al sistemaFuncionalidad: la MMU aporta la funcionalidad y seguridad ya mencionada

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Implementación del Hardware

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

EDK El EDK esta compuesto por:

Xilinx Platform Studio (XPS): Herramienta para conectar Procesadores, buses y periféricos.Base System Builder (BSB): Configuración del sistemaIP Wizard: Permite crear o importar propiedad intelectual integrándola a los buses presentes.Debugger (XMD): Permite debuggear el procesador utilizado.Hardware Generator (PlatGen): Convierte el diseño en una netlist sintetizableLibrary Generator (LibGen): Configura el software necesario para el funcionamiento del sistema.Simulation Generator (SimGen): Genera modelos de comportamiento o de timing del sistema.GNU Toolchain: conjunto de herramientas para generar software ejecutado por el sistemaIP de procesadores, controladores de dispositivo, documentación, etc.

Se puede ejecutar mediante una interfase GUI o mediante línea decomandos

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Propiedad Intelectual disponible

Hay un gran conjunto de ip cores$XILINX_EDK/hw/XilinxProcessorIP/pcores

Los mas utilizados:CPU Microblaze y PPCSystem Timer, Interrupt Controller, Memory Controller.Buses

PLB (Processor Local Bus): Bus de alta velocidad entre el procesador y memoria on-chipFSL: Bus tipo FIFO para comunicar coprocesadores y Hardware específico (aceleradores de hardware)

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

CPU Microblaze

Procesador de 32 bits similar al MIPS o al DLX32 Registros de 32 bits ortogonalesALU configurable

Mul/div de enteros, barrel shifter, comparadorOpcionalmente FPU, MMUOpcionalmente excepciones de hardware

Errores de bus, división por cero, accesos no alineados, fallos de paginación, etc.

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

CPU Microblaze

Cache de datos e instrucciones opcional y de tamaño variable

64 bytes a 64kbytes (dependiendo de la FPGA)Opcionalmente capacidad de debugging por hardware

Cantidad de breakpoints por hardware variableSoporte para watchpoint

OptimizacionesÁrea (pipeline de 3 etapas sin MMU)Performance (pipeline de 5 etapas)

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

CPU Microblaze

Se pueden crear instrucciones propias para la ALU

Aceleración para determinadas operaciones (ej. paridad)Los opcodes deben ser compatiblesUna mala implementación reduce la fmax del procesadorRequiere soporte en el compilador

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Interfase de memoria

Multiport Memory Controller (MPMC)SDRAM, DDR, DDR2Hasta 8 puertos

Cache del CPUBus principalConexión directa a hardware dedicadoFramebuffers de video

Se puede configurar la prioridad de cada puertoControlador de memoria externo (xps_mch_emc)

SRAM y flashHasta 4 puertos

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Otros cores

Controlador de interrupciones (XPS_INTC)Hasta 32 canales de interrupciónInterrupciones por nivel y por flanco

Timer de sistema (XPS_TIMER)Temporizador ascendente/descendenteUno o dos canalesAutorecarga, one- shot, PWM.

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Otros Cores

I/O de propósito general (XPS_GPIO)Uno o dos canales de hasta 32 bitsFunción entrada/salida/tristate por cada bitGenera interrupciones si cambian los valores

EthernetMAC ethernet 10/100/1000

Otros busesSPI, I2C, USB, etc.

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Buses – PLB

Generalmente Bus interno en la fpgaDirecciones de 32/64 bitsDatos de 32/64/128 bits (canales de lectura y escritura independientes)Bus de interfase de microblaze y PowerPC

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Buses – FSL

Interfase tipo FIFO de 32 bitsCantidad de palabras configurable (1 a 32K)Versiones sincrónicas y asincrónicasPuertos maestro (escritura) y esclavo (lectura)Conexión directa a microblaze

Hasta 16 pares maestro/esclavoTransferencias en un solo cicloOpcionalmente operaciones bloqueantes

Útil para streamingDSP, video

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Sistema microblaze típico

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Base System Builder (BSB)Herramienta para generar sistemas

Se puede elegir de una librería de placas ya armadasCasi todas las placas de xilinx están soportadas y muchas de terceras partesSe pueden crear configuraciones propias

Se puede configurar periféricos a nivel placaGPIO para leds/switchesEthernetMemoria (SDRAM, DDR, flash, SRAM)System ACE (soporte para la configuración de la FPGA y memoria via jtag)

Genera autotests para la memoria y los periféricos

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Hardware personalizado

Hardware fuertemente dependiente de la aplicación

Acelera procesos computacionalesPermite procesamiento en tiempo realPermite interfases específicas

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Clases de hardware personalizado

CoprocesadoresFuertemente acoplados a la CPUTrabajan con datos muy específicosSensibles a la latencia

Periféricos personalizadosNo muy acoplados a la CPUTrabajan con bloques de datosSensibles al ancho de banda (transferencias)

Controladores de sistemaFPGA fundamentalmente llena con lógica digital específicaMicroblaze+linux provee funciones de control/gestión/interfase (ej. ethernet)

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Ejemplo: Periféricos personalizados

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Ejemplo: control/gestión/interfase

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Buses – SimulaciónSe utilizan los modelos funcionales de bus (Bus Functional Models – BFM)

IBM CoreConnectLos BFM permiten implementar el protocolo del bus

Se pueden hacer scripts simulando transaccionesSe simula el comportamiento del bus y los periféricos conectados

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

OpenCores y Wishbone

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

OpenCores.org:Propiedad Intelectual sintetizable

AritméticaCordicDCTMatMult

ComunicacionesUSBEthernetSerial,I2C,SPI

CriptografíaAES,DES,SHA1

CPUsClones de z80, 8051, Microblaze, AVR

OtrosInterfaces de memoriaControladores de videoGeneradores de números aleatoriosPuentes entre buses

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Bus WishBone

CaracterísticasBus de datos de 8/16/32/64 bits.Bus de direcciones de 32/64 bits.Sincrónico Transacciones simples o en ráfaga

Similar a PLBVersión simplificada, no tiene canales separados para lectura y escritura.

Porqué usarlo:Una gran librería de IP probada y sin pagos por licenciamiento disponible en OpenCores.org

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

WishBone y EDK

Se pueden agregar periféricos wishbone a un sistema con microblaze

Se utiliza el puente plbv_to_wishbone disponible en opencores.orgSe conecta un maestro PLB a wishboneLos dispositivos wishbone son esclavosNo hay transferencias en ráfaga

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Wishbone y EDK

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Mas Información

OpenCores.orghttp://www.opencores.org

Bus WishBonehttp://http://opencores.org/opencores,wishbone

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

El Futuro según Xilinx

Durante mucho tiempo Xilinx e IBM mantuvieron una alianza estratégica

PowerPC 405, PowerPC 440 en Virtex2, Virtex4 y Virtex5Microblaze compatible con PowerPCCoreConnect (PLB, OPB, BFMs)

Ahora (2010)Alianza con ARM

Virtex7 no tiene Processor HardblockSe avanza en un softcore Dual Cortex A9Se migra al bus AMBA 4 AXI de ARM

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

El Futuro según Xilinx

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

El Futuro según Xilinx

Sistemas Embebidos - Embedded Linux sobre FPGA - Pedro Ignacio Martos

Mas Información

http://www.xilinx.com/technology/roadmap/processing-platform.htmhttp://www.xilinx.com/publications/prod_mktg/7-Series-Product-Brief.pdfhttp://www.xilinx.com/publications/prod_mktg/Virtex7-Product-Table.pdfhttp://www.xilinx.com/publications/prod_mktg/Artix7-Product-Table.pdfhttp://www.xilinx.com/publications/prod_mktg/Kintex7-Product-Table.pdf