Intel - logotipoSDK de FPGA para OpenCL
Guía del usuario

UG-OCL009
2017.05.08
Última actualización para Intel® Quartus® Prime Design Suite: 17.0

RENPHO RF FM059HS WiFi Masajeador de pies inteligente - icon 5Suscribir
SAMSUNG SM A136UZKZAIO Galaxy A13 5G Smartphone - icono 12Enviar comentarios

Intel® FPGA SDK para OpenCL™ Intel® Cyclone®V SoC Development Kit Guía de portabilidad de plataforma de referencia

La guía de portabilidad de la plataforma de referencia del kit de desarrollo V SoC describe el diseño de hardware y software de la plataforma de referencia del kit de desarrollo Intel Cyclone V SoC (c5soc) para su uso con el kit de desarrollo de software (SDK) Intel para OpenCL Intel ® FPGA SDK para OpenCL ™ Intel Cyclone ®. Antes de comenzar, Intel recomienda enfáticamente que se familiarice con el contenido de los siguientes documentos:

  1. Intel FPGA SDK para OpenCLIntel Cyclone V SoC Guía de inicio
  2. Intel FPGA SDK para OpenCL Custom Platform Toolkit Guía del usuario
  3. Manual del dispositivo Cyclone V, Volumen 3: Manual de referencia técnica del sistema de procesador duro Además, consulte la página del kit de desarrollo SoC Cyclone V y la suite de diseño integrado SoC de Altera websitio para más información. 1 2

Atención: Intel asume que tiene un conocimiento profundo de la Guía del usuario del kit de herramientas de plataforma personalizada Intel FPGA SDK para OpenCL. La Guía de portabilidad de la plataforma de referencia del kit de desarrollo de Cyclone V SoC no describe el uso del kit de herramientas de plataforma personalizada del SDK para implementar una plataforma personalizada para el kit de desarrollo de Cyclone V SoC. Solo describe las diferencias entre la compatibilidad con SDK en el kit de desarrollo de SoC Cyclone V y un SDK de FPGA de Intel genérico para OpenCL Custom Platform.

Enlaces relacionados

  • Intel FPGA SDK para OpenCL Cyclone V SoC Guía de inicio
  • Intel FPGA SDK para OpenCL Custom Platform Toolkit Guía del usuario
  • Manual del dispositivo Cyclone V, Volumen 3: Manual de referencia técnica del sistema de procesador duro
  • Cyclone V SoC Development Kit y SoC Embedded Design Suite página en Altera websitio
  1. OpenCL y el logotipo de OpenCL son marcas comerciales de Apple Inc. utilizadas con permiso de Khronos Group™.
  2. El SDK de Intel FPGA para OpenCL se basa en una especificación de Khronos publicada y ha superado el proceso de prueba de conformidad de Khronos. El estado de conformidad actual se puede encontrar en www.khronos.org/conformidad.

Corporación Intel. Reservados todos los derechos. Intel, el logotipo de Intel, las palabras y los logotipos de Altera, Arria, Cyclone, Enpirion, MAX, Nios, Quartus y Stratix son marcas comerciales de Intel Corporation o sus subsidiarias en EE. UU. y/o en otros países. Intel garantiza el rendimiento de sus productos semiconductores y FPGA según las especificaciones actuales de acuerdo con la garantía estándar de Intel, pero se reserva el derecho de realizar cambios en cualquier producto y servicio en cualquier momento sin previo aviso. Intel no asume ninguna responsabilidad u obligación que surja de la aplicación o el uso de cualquier información, producto o servicio descrito en este documento, excepto que Intel lo acuerde expresamente por escrito. Se recomienda a los clientes de Intel que obtengan la versión más reciente de las especificaciones del dispositivo antes de confiar en cualquier información publicada y antes de realizar pedidos de productos o servicios.
*Otros nombres y marcas pueden ser reclamados como propiedad de terceros.

1.1.1 Variantes de placa de plataforma de referencia del kit de desarrollo SoC Cyclone V
El SDK de Intel FPGA para la plataforma de referencia del kit de desarrollo SoC OpenCL Cyclone V incluye dos variantes de placa.

  • junta c5soc
    Esta placa predeterminada brinda acceso a dos bancos de memoria DDR. La HPS DDR es accesible tanto por la FPGA como por la CPU. El FPGA DDR solo es accesible por el FPGA.
  • tablero c5soc_shareonly
    Esta variante de placa solo contiene conectividad HPS DDR. El FPGA DDR no es accesible. Esta variante de placa es más eficiente en el área porque se necesita menos hardware para admitir un banco de memoria DDR. La placa c5soc_sharedonly también es una buena plataforma de creación de prototipos para una placa de producción final con un solo banco de memoria DDR.
    Para apuntar a esta variante de placa al compilar su kernel OpenCL, incluya la opción -board c5soc_sharedonly en su comando aoc.
    Para obtener más información sobre el tablero opción del comando aoc, consulte la Guía de programación de Intel FPGA SDK para OpenCL.

Enlaces relacionados
Compilación de un kernel para una placa FPGA específica (–board )
1.1.2 Contenido de la plataforma de referencia del kit de desarrollo de SoC Cyclone V
La plataforma de referencia del kit de desarrollo de SoC Cyclone V consta de lo siguiente files y directorios:

File o Directorio Descripción
tablero_env.xml Lenguaje de marcado extensible (XML) file que describe c5soc para Intel FPGA SDK para OpenCL.
linux_sd_card_image.tgz Imagen de tarjeta flash SD comprimida file que contiene todo lo que un usuario de SDK necesita para usar el kit de desarrollo de SoC Cyclone V con el SDK.
brazo32 Directorio que contiene lo siguiente:

1.1.3 Características relevantes del kit de desarrollo SoC Cyclone V

La siguiente lista destaca los componentes y características del kit de desarrollo de SoC Cyclone V que son relevantes para Intel FPGA SDK para OpenCL:

  • CPU ARM Cortex-A9 de doble núcleo con Linux de 32 bits.
  • Bus de interfaz extensible avanzada (AXI) entre el HPS y la estructura central de la FPGA.
  • Dos controladores de memoria DDR reforzados, cada uno conectado a una SDRAM DDR1 de 3 gigabyte (GB).
    — Solo se puede acceder a un controlador DDR para el núcleo FPGA (es decir, FPGA DDR).
    — El otro controlador DDR es accesible tanto para HPS como para FPGA (es decir, HPS DDR). Este controlador compartido permite compartir memoria gratis entre la CPU y el núcleo FPGA.
  • La CPU puede reconfigurar la estructura central de FPGA.

1.1.3.1 Decisiones y objetivos de diseño de la plataforma de referencia del kit de desarrollo de SoC Cyclone V Intel basa la implementación de la plataforma de referencia del kit de desarrollo de SoC Cyclone V en varios objetivos y decisiones de diseño. Intel recomienda que tenga en cuenta estos objetivos y decisiones cuando transfiera esta plataforma de referencia a su placa SoC FPGA.
A continuación se muestran los objetivos de diseño de c5soc:

  1. Proporcione el ancho de banda más alto posible entre los núcleos de la FPGA y los sistemas de memoria DDR.
  2. Asegúrese de que los cálculos en la FPGA (es decir, los núcleos OpenCL) no interfieran con otras tareas de la CPU que podrían incluir el mantenimiento de periféricos.
  3. Deje tantos recursos FPGA como sea posible para los cálculos del kernel en lugar de los componentes de la interfaz.

A continuación se encuentran las decisiones de diseño de alto nivel que son las consecuencias directas de los objetivos de diseño de Intel:

  1. La plataforma de referencia solo utiliza controladores de memoria DDR duros con la configuración más amplia posible (256 bits).
  2. El FPGA se comunica con el controlador de memoria HPS DDR directamente, sin involucrar el bus AXI y el interruptor L3 dentro del HPS. La comunicación directa proporciona el mejor ancho de banda posible para DDR y evita que los cálculos de FPGA interfieran con las comunicaciones entre la CPU y su periferia.
  3. El acceso directo a memoria de dispersión y recopilación (SG-DMA) no forma parte de la lógica de la interfaz FPGA. En lugar de transferir grandes cantidades de datos entre sistemas de memoria DDR, almacene los datos en el HPS DDR compartido. El acceso directo a la memoria de la CPU mediante FPGA es más eficiente que DMA. Ahorra recursos de hardware (es decir, área FPGA) y simplifica el controlador del kernel de Linux.
    Advertencia: La transferencia de memoria entre el sistema HPS DDR compartido y el sistema DDR al que solo puede acceder la FPGA es muy lenta. Si eliges
    transferir memoria de esta manera, utilícela solo para cantidades muy pequeñas de datos.
  4. El host y el dispositivo realizan transferencias de datos que no son DMA entre sí a través del puente de HPS a FPGA (H2F), utilizando solo un único puerto de 32 bits. La razón es que, sin DMA, el kernel de Linux solo puede emitir una única solicitud de lectura o escritura de 32 bits, por lo que no es necesario tener una conexión más amplia.
  5. El host envía señales de control al dispositivo a través de un puente ligero H2F (LH2F).
    Debido a que las señales de control del host al dispositivo son señales de bajo ancho de banda, un puente LH2F es ideal para la tarea.

1.2 Portar la plataforma de referencia a su placa SoC FPGA
Para portar la plataforma de referencia del kit de desarrollo de SoC Cyclone V a su placa FPGA de SoC, realice las siguientes tareas:

  1. Seleccione la versión de una memoria DDR o de dos memorias DDR de la plataforma de referencia c5soc como punto de partida de su diseño.
  2. Actualice las ubicaciones de los pines en ALTERAOCLSDKROOT/board/c5soc/ /arriba.qsf file, donde ALTERAOCLSDKROOT es la ruta a la ubicación de la instalación de Intel FPGA SDK para OpenCL, y es el nombre del directorio de la variante de placa. El directorio c5soc_sharedonly es para la variante de placa con un sistema de memoria DDR. El directorio c5soc es para la variante de placa con dos sistemas de memoria DDR.
  3.  Actualice la configuración de DDR para los bloques HPS y/o FPGA SDRAM en ALTERAOCLSDKROOT/board/c5soc/ /sistema.qsys file.
    4. Todos los diseños de placa preferidos de Intel FPGA SDK para OpenCL deben lograr un cierre de tiempo garantizado. Como tal, la colocación del diseño debe ser oportuna. Para portar la partición de la placa c5soc (acl_iface_partition.qxp) a su placa SoC FPGA, realice las siguientes tareas:
    Para obtener instrucciones detalladas sobre cómo modificar y conservar la partición de la placa, consulte el Quartus
    Compilación incremental de Prime para el capítulo de diseño jerárquico y basado en equipos del manual Quartus Prime Standard Edition.
    a. Elimine acl_iface_partition.qxp del directorio ALTERAOCLSDKROOT/board/c5soc/c5soc.
    b. Habilite la región acl_iface_region LogicLock™ cambiando el comando Tcl set_global_assignment -name LL_ENABLED OFF -section_id acl_iface_region a set_global_assignment -name LL_ENABLED ON -section_id acl_iface_region
    C. Compile un kernel OpenCL para su placa.
    d. Si es necesario, ajuste el tamaño y la ubicación de la región de LogicLock.
    mi. Cuando esté satisfecho de que la ubicación de su diseño está sincronizada, exporte esa partición como la partición exportada acl_iface_partition.qxp Quartus Prime File.
    Como se describe en la sección Establecimiento de un flujo de tiempo garantizado de la Guía del usuario de AIntel FPGA SDK for OpenCL Custom Platform Toolkit, al importar este .qxp  file en el diseño de nivel superior, cumple con el requisito de proporcionar un diseño de placa con un flujo de cierre de tiempo garantizado.
    Para conocer los factores que podrían afectar la calidad de los resultados (QoR) de su partición exportada, consulte la sección Consideraciones generales sobre la calidad de los resultados para la partición de la placa exportada en la Guía del usuario del Intel FPGA SDK para OpenCL Custom Platform Toolkit.
    F. Deshabilite la región de LogicLock acl_iface_region revirtiendo el comando del paso 2 a set_global_assignment -name LL_ENABLED OFF section_id acl_iface_region.
  4. Si su placa SoC FPGA usa diferentes pines y periféricos del bloque HPS, regenere el precargador y la fuente del árbol de dispositivos (DTS) file. Si cambia la configuración del controlador de memoria HPS DDR, regenere el precargador.
  5. Cree la imagen de la tarjeta flash SD.
  6. Cree su plataforma personalizada, que incluye la imagen de la tarjeta flash SD.
  7. Considere la posibilidad de crear una versión del entorno de tiempo de ejecución de su plataforma personalizada para usar con el entorno de tiempo de ejecución Intel FPGA (RTE) para OpenCL. La versión RTE de su plataforma personalizada no incluye directorios de hardware ni la imagen de la tarjeta flash SD. Esta plataforma personalizada se carga en el sistema SoC FPGA para permitir que se ejecuten las aplicaciones host. Por el contrario, la versión SDK de Custom Platform es necesaria para que el SDK compile kernels OpenCL.
    Sugerencia: puede usar la versión SDK de su plataforma personalizada para RTE. Ahorrar
    espacio, elimine la imagen de la tarjeta flash SD de la versión RTE de su plataforma personalizada.
  8. Pruebe su plataforma personalizada.
    Consulte la sección Probar el diseño de hardware de la Guía del usuario de Intel FPGA SDK para OpenCL Custom Platform Toolkit para obtener más información.

Enlaces relacionados

  • Prueba del diseño del hardware
  • Compilación incremental de Quartus Prime para diseño jerárquico y basado en equipos
  • Establecimiento de flujo de tiempo garantizado
  • Consideraciones generales sobre la calidad de los resultados para la partición de placa exportada

1.2.1 Actualización de una plataforma de referencia portada
En la versión actual de la plataforma de referencia del kit de desarrollo Cyclone V SoC, el bloque HPS está dentro de la partición que define toda la lógica que no es del kernel. Sin embargo, no puede exportar el HPS como parte del .qxp file. Para actualizar una plataforma personalizada existente que modificó de una versión anterior de c5soc, implemente el flujo de conservación de QXP, actualice la imagen de la tarjeta flash SD para obtener el entorno de tiempo de ejecución más reciente y actualice board_spec.xml file para habilitar la migración automática.
El SDK de Altera® para OpenCL versión 14.1 y posteriores prueba la tablero_spec.xml file para obtener información de la placa e implementa actualizaciones automáticas. porque modificas el
diseño mediante la implementación del flujo de conservación QXP, debe actualizar el board_spec.xml file a su formato en la versión actual. Actualizando el file permite que el SDK distinga entre las plataformas personalizadas no preservadas y las plataformas personalizadas actuales basadas en QXP. Consulte Migración automática de plataforma personalizada para compatibilidad con versiones posteriores en la Guía del usuario del kit de herramientas de plataforma personalizada Intel FPGA SDK para OpenCL para obtener más información.

  1. Para implementar el flujo de conservación de QXP en un diseño de hardware de FPGA SoC Cyclone V que se porta desde una versión anterior de c5soc, realice los siguientes pasos para crear una subpartición para excluir el HPS del .qxp file:
    una. Antes de crear una partición alrededor de la lógica que no es del kernel, cree una partición alrededor del HPS en .qsf Quartus Prime Settings File.
    Por ejemploampen:
    # Particionar manualmente la instancia que modela la E/S dedicada de HPS set_instance_assignment -name PARTITION_HIERARCHY borde_18261 -to “system:the_system|system_acl_iface:acl_iface|system_acl_iface_hps_0:hps_0|system_acl_iface_hps_0_hps_io:hps_io| system_acl_iface_hps_0_hps_io_border:border” -section_id “system_acl_iface_hps_0_hps_io_border:border”
    # Configure la partición para que sea del tipo HPS_PARTITION para que el resto de Quartus la procese correctamente
    set_global_assignment -name PARTITION_TYPE HPS_PARTITION -section_id “system_acl_iface_hps_0_hps_io_border:border”
    quartus_cdb arriba -c arriba
    –incremental_compilation_export=acl_iface_partition.qxp
    –incremental_compilation_export_partition_name=acl_iface_partition
    –incremental_compilation_export_post_synth=activado
    –incremental_compilation_export_post_fit=activado
    –incremental_compilation_export_routing=activado
    –incremental_compilation_export_flatten=desactivado
    Después de excluir el HPS de la partición, puede importar el .qxp file y compila tu diseño.
  2. Actualice la imagen de la tarjeta flash SD con la versión actual de Intel FPGA RTE para OpenCL realizando las siguientes tareas:
    una. montar el file tabla de asignación (fat32) y extendida file particiones del sistema (ext3) en la imagen existente como dispositivos de bucle invertido. Para obtener instrucciones detalladas, consulte el Paso 2 en Creación de una imagen de tarjeta flash SD.
    b. En el directorio /home/root/opencl_arm32_rte, elimine el files de la versión anterior del RTE.
    C. Descargue y descomprima la versión actual de RTE en el directorio /home/root/opencl_arm32_rte.
    d. En el /controlador/versión.h file de su plataforma personalizada, actualice la asignación ACL_DRIVER_VERSION a . (por ej.ample, 16.1.x, donde 16.1 es la versión del SDK y x es la versión del controlador que configuró).
    mi. Reconstruya el controlador.
    F. Elimine las carpetas de hardware de su plataforma personalizada. Copie la plataforma personalizada, junto con el controlador actualizado, en el directorio /home/root/opencl_arm_rte/board.
    gramo. Copie el Altera.icd file desde el directorio /home/root/opencl_arm32_rte y agréguelo al directorio /etc/OpenCL/vendors.
    H. Desmonte y pruebe la nueva imagen. Para obtener instrucciones detalladas, consulte los pasos 8 a 11 en Creación de una imagen de tarjeta flash SD.

Enlaces relacionados

  • Creación de una imagen de tarjeta flash SD en la página 14
    También tiene la opción de crear una nueva imagen de tarjeta flash SD.
  • Migración automática de plataforma personalizada para compatibilidad hacia adelante

1.3 Soporte de software para memoria compartida
La memoria física compartida entre FPGA y CPU es la memoria preferida para los núcleos OpenCL que se ejecutan en SoC FPGA. Debido a que la FPGA accede a la memoria física compartida, a diferencia de la memoria virtual compartida, no tiene acceso a las tablas de páginas de la CPU que asignan direcciones virtuales de usuarios a direcciones de páginas físicas.
Con respecto al hardware, los núcleos OpenCL acceden a la memoria física compartida a través de una conexión directa al controlador de memoria dura HPS DDR. Con respecto al software, la compatibilidad con la memoria física compartida implica las siguientes consideraciones:

  1. Implementaciones típicas de software para asignar memoria en la CPU (por ej.ample, la función malloc()) no puede asignar una región de memoria que la FPGA pueda usar.
    La memoria que asigna la función malloc() es contigua en el espacio de direcciones de la memoria virtual, pero es poco probable que las páginas físicas subyacentes sean contiguas físicamente. Como tal, el host debe poder asignar regiones de memoria físicamente contiguas. Sin embargo, esta capacidad no existe en las aplicaciones de espacio de usuario en Linux. Por lo tanto, el controlador del kernel de Linux debe realizar la asignación.
  2. El controlador de kernel OpenCL SoC FPGA Linux incluye la función mmap() para asignar memoria física compartida y mapearla en el espacio del usuario. La función mmap() utiliza la llamada estándar del kernel de Linux dma_alloc_coherent() para solicitar regiones de memoria físicamente contiguas para compartir con un dispositivo.
  3. En el kernel de Linux predeterminado, dma_alloc_coherent() no asigna memoria físicamente contigua de más de 0.5 megabytes (MB) de tamaño. Para permitir que dma_alloc_coherent() asigne grandes cantidades de memoria físicamente contigua, habilite la función de asignación de memoria contigua (CMA) del kernel de Linux y luego vuelva a compilar el kernel de Linux.
    Para la plataforma de referencia del kit de desarrollo de SoC Cyclone V, CMA administra 512 MB de 1 GB de memoria física. Puede aumentar o disminuir este valor, según la cantidad de memoria compartida que requiera la aplicación. Es posible que la llamada dma_alloc_coherent() no pueda asignar los 512 MB completos de memoria físicamente contigua; sin embargo, normalmente puede obtener aproximadamente 450 MB de memoria.
  4. La CPU puede almacenar en caché la memoria que asigna la llamada dma_alloc_coherent(). En particular, las operaciones de escritura desde la aplicación host no son visibles para los kernels de OpenCL. La función mmap() en el controlador de kernel OpenCL SoC FPGA Linux también contiene llamadas a la función pgprot_noncached() o remap_pf_range() para deshabilitar explícitamente el almacenamiento en caché para esta región de memoria.
  5. Después de que la función dma_alloc_coherent() asigna la memoria físicamente contigua, la función mmap() devuelve la dirección virtual al comienzo del rango, que es el intervalo de direcciones de la memoria que asigna. La aplicación host requiere esta dirección virtual para acceder a la memoria. Por otro lado, los kernels de OpenCL requieren direcciones físicas. El controlador del kernel de Linux realiza un seguimiento de la asignación de direcciones virtuales a físicas. Puede asignar las direcciones físicas que mmap() devuelve a las direcciones físicas reales agregando una consulta al controlador.
    La llamada de la interfaz de programación de aplicaciones (API) MMD aocl_mmd_shared_mem_alloc() incorpora las siguientes consultas:
    una. La función mmap() que asigna memoria y devuelve la dirección virtual.
    b. La consulta adicional que asigna la dirección virtual devuelta a la dirección física.
    La llamada a la API de MMD aocl_mmd_shared_mem_alloc() luego devuelve dos direcciones
    —la dirección devuelta real es la dirección virtual y la dirección física va a device_ptr_out.
    Nota: El controlador solo puede asignar las direcciones virtuales que la función mmap() devuelve a las direcciones físicas. Si solicita la dirección física de cualquier otro puntero virtual, el controlador devuelve un valor NULL.

Advertencia: El Intel FPGA SDK para las bibliotecas de tiempo de ejecución de OpenCL asume que la memoria compartida es la primera memoria enumerada en board_spec.xml file. En otras palabras, la dirección física que obtiene el controlador del kernel de Linux se convierte en la dirección de Avalon® que el kernel de OpenCL pasa a HPS SDRAM.
Con respecto a la biblioteca en tiempo de ejecución, use la llamada clCreateBuffer() para asignar la memoria compartida como un búfer del dispositivo de la siguiente manera:

  • Para la variante de placa de dos DDR con memoria compartida y no compartida, clCreateBuffer() asigna memoria compartida si especifica el indicador CL_MEM_USE_HOST_PTR. El uso de otras banderas hace que clCreateBuffer() asigne un búfer en la memoria no compartida.
  • Para la variante de una placa DDR con solo memoria compartida, clCreateBuffer() asigna memoria compartida independientemente del indicador que especifique.
    Actualmente, la compatibilidad con Linux de 32 bits en la CPU ARM rige el alcance de la compatibilidad con la memoria compartida en las bibliotecas de tiempo de ejecución del SDK. En otras palabras, bibliotecas de tiempo de ejecución compiladas en otros entornos (por ej.ample, x86_64 Linux o Windows de 64 bits) no admiten memoria compartida.
    C5soc no implementó memoria heterogénea para distinguir entre memoria compartida y no compartida por las siguientes razones:
    1. Historial: el soporte de memoria heterogénea no estaba disponible cuando se creó originalmente el soporte de memoria compartida.
    2. Interfaz uniforme: debido a que OpenCL es un estándar abierto, Intel mantiene la coherencia entre los proveedores de plataformas informáticas heterogéneas. Por lo tanto, se usa la misma interfaz que las arquitecturas de otros proveedores de placas para asignar y usar la memoria compartida.

1.4 Reconfiguración de FPGA
Para SoC FPGA, la CPU puede reconfigurar la estructura central de FPGA sin interrumpir el funcionamiento de la CPU. El bloque de hardware FPGA Manager que se extiende a ambos lados del HPS y el núcleo FPGA realiza la reconfiguración. El kernel de Linux incluye un controlador que permite un fácil acceso al Administrador de FPGA.

  • A view el estado del núcleo FPGA, invoque el comando cat /sys/class/fpga/fpga0/status.
    La utilidad de programa Intel FPGA SDK para OpenCL disponible con la plataforma de referencia del kit de desarrollo Cyclone V SoC utiliza esta interfaz para programar la FPGA. Al reprogramar un núcleo FPGA con una CPU en funcionamiento, la utilidad del programa realiza todas las tareas siguientes:
    1. Antes de la reprogramación, deshabilite todos los puentes de comunicación entre la FPGA y el HPS, tanto los puentes H2F como los LH2F.
    Vuelva a habilitar estos puentes después de que se complete la reprogramación.
    Atención: el sistema OpenCL no utiliza el puente de FPGA a HPS (F2H). Consulte la sección Interfaces HPS-FPGA en el Manual del dispositivo Cyclone V, Volumen 3: Manual de referencia técnica del sistema de procesador duro para obtener más información.
    2. Asegúrese de que el enlace entre la FPGA y el controlador HPS DDR esté desactivado durante la reprogramación.
    3. Asegúrese de que las interrupciones de la FPGA en la FPGA estén desactivadas durante la reprogramación.
    Además, notifique al controlador que rechace cualquier interrupción del FPGA durante la reprogramación.

Consulte el código fuente de la utilidad del programa para obtener detalles sobre la implementación real.

Advertencia: No cambie la configuración del controlador HPS DDR cuando la CPU esté funcionando.
Si lo hace, podría provocar un error fatal del sistema porque podría cambiar la configuración del controlador DDR cuando hay transacciones de memoria pendientes desde la CPU. Esto significa que cuando la CPU está funcionando, no puede reprogramar el núcleo FPGA con una imagen que usa HPS DDR en una configuración diferente.
Recuerde que el sistema OpenCL y el diseño de referencia Golden Hardware disponible con Intel SoC FPGA Embedded Design Suite (EDS) configuran HPS DDR en un modo único de 256 bits.
Las partes del sistema de la CPU, como el predictor de bifurcación o el buscador previo de la tabla de páginas, pueden emitir comandos DDR incluso cuando parece que no se está ejecutando nada en la CPU.
Por lo tanto, el tiempo de arranque es el único momento seguro para establecer la configuración del controlador HPS DDR.
Esto también implica que U-boot debe tener un binario sin formato file (.rbf) imagen para cargar en la memoria. De lo contrario, es posible que esté habilitando HPS DDR con puertos no utilizados en el FPGA y luego, posiblemente, cambiando las configuraciones de los puertos posteriormente. Por este motivo, el controlador del kernel de OpenCL Linux ya no incluye la lógica necesaria para establecer la configuración del controlador HPS DDR.
Los interruptores de paquete dual en línea (DIP) SW3 en el kit de desarrollo SoC Cylone V controlan la forma esperada de la imagen .rbf (es decir, si el file está comprimido y/o encriptado). C5soc y el diseño de referencia de hardware dorado disponible con SoC EDS incluyen imágenes .rbf comprimidas pero sin cifrar. La configuración del interruptor DIP SW3 descrita en Intel FPGA SDK para OpenCL Cyclone V SoC Getting Started Guide coincide con esta configuración de imagen .rbf.

Enlaces relacionados

  • Interfaces HPS-FPGA
  • Configuración de los interruptores SW3

1.4.1 Detalles de la arquitectura del sistema FPGA
La compatibilidad con la plataforma de referencia del kit de desarrollo de SoC Cyclone V se basa en la plataforma de referencia Stratix® V (s5_ref), disponible con Intel FPGA SDK para OpenCL.
La organización general del sistema c5soc Qsys y el controlador del kernel son muy similares a los de s5_ref.
Los siguientes componentes centrales de FPGA son los mismos tanto en c5soc como en s5_ref:

  • bloque VERSION_ID
  • mecanismo de descanso
  • Divisor del banco de memoria
  • Interfaz de indagación de caché
  • Reloj del núcleo
  • Bloques de acceso al registro de control (CRA)

1.5 Creación de una imagen de tarjeta flash SD
Debido a que el FPGA SoC Cyclone V es un sistema completo en un chip, usted es responsable de brindar la definición completa del sistema. Intel recomienda que lo entregue en forma de una imagen de tarjeta flash SD. El usuario de Intel FPGA SDK para OpenCL puede simplemente escribir la imagen en la tarjeta flash micro SD y la placa SoC FPGA está lista para usar.
Modificación de una imagen de tarjeta flash SD existente en la página 13
Intel recomienda que simplemente modifique la imagen disponible con la plataforma de referencia del kit de desarrollo Cyclone V SoC. También tiene la opción de crear una nueva imagen de tarjeta flash SD.
Creación de una imagen de tarjeta flash SD en la página 14
También tiene la opción de crear una nueva imagen de tarjeta flash SD.

1.5.1 Modificación de una imagen de tarjeta flash SD existente
Intel recomienda que simplemente modifique la imagen disponible con el SoC Cyclone V
Plataforma de referencia del kit de desarrollo. También tiene la opción de crear una nueva imagen de tarjeta flash SD.
La imagen c5soc linux_sd_card_image.tgz file está disponible en el directorio ALTERAOCLSDKROOT/board/c5soc, donde ALTERAOCLSDKROOT apunta a la ruta del SDK de Intel FPGA para el directorio de instalación de OpenCL.

Atención: Para modificar la imagen de la tarjeta flash SD, debe tener privilegios de root o sudo.

  1. Para descomprimir $ALTERAOCLSDKROOT/board/c5soc/linux_sd_card_image.tgz file, ejecute el comando tar xvfzlinux_sd_card_image.tgz.
  2. Compilar hello_world OpenCL exampdiseño de archivos con el soporte de su plataforma personalizada. Renombrar el .rbf file que Intel FPGA SDK for OpenCL Offline Compiler genera como opencl.rbf y colóquelo en la partición fat32 dentro de la imagen de la tarjeta flash SD.
    Puedes descargar el hello_world exampdiseño de archivo de OpenCL Design Examples página en el Altera websitio.
  3. Coloque el .rbf file en la partición fat32 de la imagen de la tarjeta flash.
    Atención: La partición fat32 debe contener tanto la zImage file y el .rbf file. Sin un .rbf file, se producirá un error fatal cuando inserte el controlador.
  4. Después de crear la imagen de la tarjeta SD, escríbala en una tarjeta micro SD invocando el siguiente comando: sudo dd if=/path/to/sdcard/image.bin of=/dev/sdcard
  5. Para probar la imagen de su tarjeta flash SD, realice las siguientes tareas:
    a. Inserte la tarjeta flash micro SD en la placa SoC FPGA.
    b. Encienda el tablero.
    C. Invoque el comando de la utilidad de diagnóstico aocl.

1.5.2 Creación de una imagen de tarjeta flash SD
También tiene la opción de crear una nueva imagen de tarjeta flash SD. Las instrucciones genéricas sobre la creación de una nueva imagen de tarjeta flash SD y la reconstrucción de una imagen de tarjeta flash SD existente están disponibles en la página GSRD v14.0.2 – Tarjeta SD de RocketBoards.org websitio.
Los pasos a continuación describen el procedimiento para crear la imagen linux_sd_card_image.tgz a partir de la imagen de la tarjeta flash SD Golden System Reference Design (GSRD):
Nota:
Para crear la imagen a partir de la imagen de c5soc, realice todas las tareas aplicables descritas en este procedimiento.

  1. Descargue y descomprima la imagen de la tarjeta flash SD GSRD versión 14.0 de Rocketboards.org.
  2. Montar el file tabla de asignación (fat32) y extendida file particiones del sistema (ext3) en esta imagen como dispositivos de bucle invertido. Para montar una partición, realice los siguientes pasos:
    una. Determine el inicio de bytes de la partición dentro de la imagen invocando /sbin/fdisk -lu image_file dominio.
    Por ejemploample, la partición número 1 de tipo W95 FAT tiene un desplazamiento de bloque de 2121728. Con 512 bytes por bloque, el desplazamiento de byte es 512 bytes x 2121728 = 1086324736 bytes.
    b. Identifique un dispositivo de bucle libre (por ej.ample, /dev/loop0) escribiendo el comando losetup -f.
    C. Suponiendo que /dev/loop0 es el dispositivo de bucle libre, asigne la imagen de su tarjeta flash al dispositivo de bloque de bucle invocando la imagen losetup /dev/loop0_file -0 1086324736 comando.
    d. Monte el dispositivo de bucle invocando el comando mount /dev/loop0 /media/disk1.
    dentro de la imagen file, /media/disk1 ahora es una partición fat32 montada.
    mi. Repita los pasos del a al d para la partición ext3.
  3. Descargue la versión FPGA del SoC Cyclone V del paquete Intel FPGA Runtime Environment para OpenCL desde el Centro de descargas en Altera websitio.
    a. Haga clic en el botón Descargar junto a la edición de software Quartus Prime.
    b. Especifique la versión de lanzamiento, el sistema operativo y el método de descarga.
    C. Haga clic en la pestaña Software adicional y seleccione para descargar Intel FPGA
    Entorno de tiempo de ejecución para OpenCL Linux Cyclone V SoC TGZ.
    d. Después de descargar el aocl-rte- .arm32.tgz file, descomprímalo para
    un directorio de su propiedad.
  4. Coloque el aocl-rte- desempaquetado directorio .arm32 en el directorio /home/root/opencl_arm32_rte en la partición ext3 de la imagen file.
  5. Elimine la(s) carpeta(s) de hardware de su plataforma personalizada y luego coloque la plataforma personalizada en el subdirectorio de la placa de /home/root/opencl_arm32_rte.
  6. Crea el init_opencl.sh file en el directorio /home/root con el siguiente contenido: export ALTERAOCLSDKROOT=/home/root/opencl_arm32_rte export AOCL_BOARD_PACKAGE_ROOT=$ALTERAOCLSDKROOT/board/ export PATH=$ALTERAOCLSDKROOT/bin:$PATH export LD_LIBRARY_PATH=$ALTERAOCLSDKROOT/host/arm32/lib:$LD_LIBRARY_PATH insmod $AOCL_BOARD_PACKAGE_ROOT/driver/aclsoc_drv.ko
    El usuario del SDK ejecuta el comando fuente ./init_opencl.sh para cargar las variables de entorno y el controlador del kernel de Linux OpenCL.
  7. Si necesita actualizar el precargador, el DTS files, o el kernel de Linux, necesita el compilador arm-linux-gnueabihf-gcc del SoC EDS. Siga las instrucciones descritas en la Guía del usuario de Intel SoC FPGA Embedded Design Suite para adquirir el software, volver a compilarlos y actualizar los correspondientes. files en la partición fat32 montada.
    Atención: Lo más probable es que necesite actualizar el precargador si su plataforma personalizada tiene usos de pin diferentes a los de c5soc.
    Recuerde: si vuelve a compilar el kernel de Linux, vuelva a compilar el controlador del kernel de Linux con la misma fuente del kernel de Linux files. Si hay una discrepancia entre el controlador del kernel de Linux y el kernel de Linux, el controlador no se cargará. Además, debe habilitar el CMA.
    Consulte Recompilación del kernel de Linux para obtener más información.
  8. Compilar hello_world OpenCL exampdiseño de archivos con el soporte de su plataforma personalizada. Renombrar el .rbf file que Intel FPGA SDK for OpenCL Offline Compiler genera como opencl.rbf y colóquelo en la partición fat32 dentro de la imagen de la tarjeta flash SD.
    Puedes descargar el hello_world exampdiseño de archivo de OpenCL Design Examples página en el Altera websitio.
    9. Después de almacenar todo lo necesario files en la imagen de la tarjeta flash, invoque los siguientes comandos:
    una. sincronizar
    b. desmontar /medios/disco1
    C. desmontar dónde es el nombre del directorio que usa para montar la partición ext3 en 3 en la página 3 (por ej.amparchivo, /medios/disco2).
    d. perderup -d /dev/loop0
    mi. losetup -d /dev/loop1
  9. Comprima la imagen de la tarjeta flash SD invocando el siguiente comando: tar cvfz .tgz linux_sd_card_image
  10. Entrega el .tgz file dentro del directorio raíz de su plataforma personalizada.
  11. Para probar la imagen de su tarjeta flash SD, realice las siguientes tareas:
    una. Escriba la imagen sin comprimir resultante en una tarjeta flash micro SD.
    b. Inserte la tarjeta flash micro SD en la placa SoC FPGA.
    C. Encienda el tablero.
    d. Invoque el comando de la utilidad de diagnóstico aocl.

Enlaces relacionados

  • Guía del usuario de Intel SoC FPGA Embedded Design Suite
  • Ex de diseño OpenCLamples página en el Altera websitio
  • Recompilación del kernel de Linux en la página 16
    Para habilitar el CMA, primero debe volver a compilar el kernel de Linux.
  • Consultando el nombre del dispositivo de su placa FPGA (diagnosticar)

1.6 Compilación del kernel de Linux para FPGA SoC Cyclone V
Antes de ejecutar aplicaciones OpenCL en la placa FPGA SoC Cyclone V, debe compilar el código fuente del kernel de Linux y compilar e instalar el controlador del kernel de Linux OpenCL.

  1. Recompilación del kernel de Linux en la página 16
    Para habilitar el CMA, primero debe volver a compilar el kernel de Linux.
  2. Compilación e instalación del controlador del kernel de OpenCL Linux en la página 17 Compile el controlador del kernel de OpenCL Linux contra el código fuente del kernel compilado.

1.6.1 Recompilación del kernel de Linux
Para habilitar el CMA, primero debe volver a compilar el kernel de Linux.

  1. Haga clic en el enlace GSRD v14.0 – Compilación de Linux en la página de Recursos de RocketBoards.org websitio para acceder a las instrucciones sobre cómo descargar y reconstruir el código fuente del kernel de Linux.
    Para usar con Intel FPGA SDK para OpenCL, especifique socfpga-3.13-rel14.0 como el .
  2. Nota: El proceso de construcción crea el arch/arm/configs/socfpga_defconfig file. Este file especifica los ajustes para la configuración predeterminada de socfpga.
    Agregue las siguientes líneas al final de arch/arm/configs/socfpga_defconfig file.
    CONFIG_MEMORY_ISOLATION=sí
    CONFIG_CMA=y
    CONFIG_DMA_CMA=y
    CONFIG_CMA_DEBUG=y
    CONFIG_CMA_SIZE_MBYTES=512
    CONFIG_CMA_SIZE_SEL_MBYTES=y
    CONFIG_CMA_ALIGNMENT=8
    CONFIG_CMA_AREAS=7
    El valor de configuración CONFIG_CMA_SIZE_MBYTES establece el límite superior en el número total de memoria físicamente contigua disponible. Puede aumentar este valor si necesita más memoria.
  3. Atención: La cantidad total de memoria física disponible para el procesador ARM en la placa SoC FPGA es de 1 GB. Intel no recomienda que configure el administrador de CMA cerca de 1 GB.
  4. Ejecute el comando make mrproper para limpiar la configuración actual.
  5. Ejecute el comando make ARCH=arm socfpga_deconfig.
    ARCH=arm indica que desea configurar la arquitectura ARM.
    socfpga_defconfig indica que desea utilizar la configuración predeterminada de socfpga.
  6. Ejecute el comando export CROSS_COMPILE=arm-linux-gnueabihf-.
    Este comando establece la variable de entorno CROSS_COMPILE para especificar el prefijo de la cadena de herramientas deseada.
  7. Ejecute el comando make ARCH=arm zImage. La imagen resultante está disponible en arch/arm/boot/zImage file.
  8. Coloque la imagen z file en la partición fat32 de la imagen de la tarjeta flash. Para obtener instrucciones detalladas, consulte el Manual del usuario de GSRD específico de FPGA SoC Cyclone V en Rocketboards.org.
  9. Nota: Para insertar correctamente el controlador del kernel de OpenCL Linux, primero cargue un SDKgenerated.rbf file en la FPGA.
    Para crear el .rbf file, compilar un diseño SDK example con la plataforma de referencia del kit de desarrollo de SoC Cyclone V como la plataforma personalizada de destino.
    9. Coloca el .rbf file en la partición fat32 de la imagen de la tarjeta flash.
    Atención: la partición fat32 debe contener tanto la zImage file y el .rbf file. Sin un .rbf file, se producirá un error fatal cuando inserte el controlador.
  10. Inserte la tarjeta micro SD programada, que contiene la imagen de la tarjeta SD que modificó o creó anteriormente, en el kit de desarrollo SoC Cyclone V y luego encienda la placa SoC FPGA.
  11. Verifique la versión del kernel de Linux instalado ejecutando el comando uname -r.
  12. Para verificar que habilita el CMA correctamente en el kernel, con la placa SoC FPGA encendida, ejecute el comando grep init_cma /proc/kallsyms.
    CMA está habilitado si la salida no está vacía.
  13. Para utilizar el kernel de Linux recompilado con el SDK, compile e instale el controlador del kernel de Linux.

Enlaces relacionados

  • Manuales de usuario del diseño de referencia del sistema dorado (GSRD)
  • Creación de una imagen de tarjeta flash SD en la página 13
    Debido a que el FPGA SoC Cyclone V es un sistema completo en un chip, usted es responsable de brindar la definición completa del sistema.

1.6.2 Compilación e instalación del controlador del núcleo Linux OpenCL
Compile el controlador del kernel de OpenCL Linux con el origen del kernel compilado.

La fuente del controlador está disponible en la versión FPGA SoC Cyclone V del entorno de tiempo de ejecución Intel FPGA para OpenCL. Además, asegúrese de haber cargado un Intel FPGA SDK para .rbf generado por OpenCL. file en el FPGA para evitar la instalación incorrecta del módulo del kernel de Linux.

  1. Descargue la versión FPGA del SoC Cyclone V del paquete Intel FPGA Runtime Environment para OpenCL desde el Centro de descargas en Altera websitio.
    a. Haga clic en el botón Descargar junto a la edición de software Quartus Prime.
    b. Especifique la versión de lanzamiento, el sistema operativo y el método de descarga.
    C. Haga clic en la pestaña Software adicional y seleccione para descargar Intel FPGA
    Entorno de tiempo de ejecución para OpenCL Linux Cyclone V SoC TGZ.
    d. Después de descargar el aocl-rte- .arm32.tgz file, descomprímalo para
    un directorio de su propiedad.
    La fuente del controlador está en el aocl-rte- .arm32/board/c5soc/ directorio de controladores.
  2. Para volver a compilar el controlador del kernel de Linux OpenCL, establezca el valor KDIR en el Make del controlador.file al directorio que contiene la fuente del kernel de Linux files.
  3. Ejecute el comando export CROSS_COMPILE=arm-linux-gnueabihf- para indicar el prefijo de su cadena de herramientas.
  4. Ejecute el comando make clean.
  5. Ejecute el comando make para crear aclsoc_drv.ko file.
  6. Transfiera el directorio opencl_arm32_rte a la placa FPGA Cyclone V SoC.
    Ejecutando el scp -r root@tu-dirección-IP: El comando coloca el entorno de tiempo de ejecución en el directorio /home/root.
  7. Ejecute el script init_opencl.sh que creó cuando creó la imagen de la tarjeta SD.
  8.  Invoque el comando de la utilidad de diagnóstico aocl. La utilidad de diagnóstico devolverá un resultado de aprobación después de ejecutar init_opencl.sh con éxito.

1.7 Problemas conocidos
Actualmente, existen ciertas limitaciones en el uso de Intel FPGA SDK para OpenCL con la plataforma de referencia del kit de desarrollo de SoC Cyclone V.

  1. No puede anular los nombres de proveedores y tableros informados por las cadenas CL_DEVICE_VENDOR y CL_DEVICE_NAME de la llamada clGetDeviceInfo().
  2. Si el host asigna memoria constante en el sistema DDR compartido (es decir, HPS DDR) y modifica la memoria constante después de la ejecución del kernel, los datos en la memoria pueden quedar obsoletos. Este problema surge porque el núcleo de la FPGA no puede husmear en las transacciones DDR de CPU a HPS.
    Para evitar que las ejecuciones posteriores del kernel accedan a datos obsoletos, implemente una de las siguientes soluciones:
    • No modifique la memoria constante después de su inicialización.
    • Si necesita varios conjuntos de datos __constantes, cree varios búferes de memoria constante.
    • Si está disponible, asigne memoria constante en la FPGA DDR en su placa aceleradora.
  3. La utilidad SDK en ARM solo admite el programa y los comandos de la utilidad de diagnóstico.
    Los comandos de utilidad flash, instalación y desinstalación no son aplicables al kit de desarrollo de SoC Cyclone V por las siguientes razones:
    a. La utilidad de instalación tiene que compilar el controlador del kernel de Linux aclsoc_drv y habilitarlo en el SoC FPGA. La máquina de desarrollo tiene que realizar la compilación; sin embargo, ya contiene fuentes del kernel de Linux para SoC FPGA. Las fuentes del kernel de Linux para la máquina de desarrollo son diferentes de las del SoC FPGA. Es probable que el usuario del SDK desconozca la ubicación de las fuentes del kernel de Linux para el SoC FPGA. Del mismo modo, la utilidad de desinstalación tampoco está disponible para el kit de desarrollo Cyclone V SoC.
    Además, entregar aclsoc_drv a la placa SoC es un desafío porque la distribución predeterminada del kit de desarrollo Cyclone V SoC no incluye el kernel de Linux. files o el compilador GNU Compiler Collection (GCC).
    b. La utilidad flash requiere colocar un .rbf file de un diseño OpenCL en la partición FAT32 de la tarjeta flash micro SD. Actualmente, esta partición no se monta cuando el usuario del SDK enciende la placa. Por lo tanto, la mejor manera de actualizar la partición es usar un lector de tarjetas flash y la máquina de desarrollo.
  4. Al cambiar entre el ejecutable Intel FPGA SDK for OpenCL Offline Compiler files (.aocx) que corresponden a diferentes variantes de placa (es decir, c5soc y c5soc_sharedonly), debe usar la utilidad del programa SDK para cargar el .aocx file para la nueva variante de placa por primera vez. Si simplemente ejecuta la aplicación host utilizando una nueva variante de placa pero el FPGA contiene la imagen de otra variante de placa, puede ocurrir un error fatal.
  5. El .qxp file no incluye las asignaciones de partición de la interfaz porque el software Quartus Prime cumple constantemente con los requisitos de tiempo de esta partición.
  6. Cuando enciende la placa, su dirección de control de acceso a medios (MAC) se establece en un número aleatorio. Si su política LAN no permite este comportamiento, configure la dirección MAC realizando las siguientes tareas:
    una. Durante el encendido de U-Boot, presione cualquier tecla para ingresar al símbolo del sistema de U-Boot.
    b. Escriba setenv ethaddr 00:07:ed:00:00:03 en el símbolo del sistema.
    Puede elegir cualquier dirección MAC.
    C. Escriba el comando saveenv.
    d. Reinicie la placa.

1.8 Historial de revisión de documentos
Tabla 1.
Historial de revisiones de documentos del SDK de Intel FPGA para OpenCL Cyclone V SoC
Guía de portabilidad de la plataforma de referencia del kit de desarrollo

Fecha Versión Cambios
17 de mayo 2017.05.08 •Lanzamiento de mantenimiento.
Octubre 2016 2016.10.31 •Cambió el nombre de Altera SDK para OpenCL a Intel FPGA SDK para OpenCL.
• Compilador fuera de línea Altera renombrado a Intel FPGA SDK para el compilador fuera de línea OpenCL.
16 de mayo 2016.05.02 •Instrucciones modificadas sobre la creación y modificación de una imagen de tarjeta flash SD.
•Instrucciones modificadas sobre la recompilación del kernel de Linux y el controlador del kernel de OpenCL Linux.
Noviembre-15 2015.11.02 •Lanzamiento de mantenimiento y instancias cambiadas de Quartus II a Quartus Prime.
15 de mayo 15.0.0 •En Reconfiguración de FPGA, se eliminó la instrucción para reprogramar el núcleo de FPGA
con un . imagen rbf invocando al gato filenombre>. rbf
> comando /dev/ fpga0 porque no se recomienda este método.
Diciembre-14 14.1.0 •Cambió el nombre del documento a Altera Cyclone V SoC Development Kit Reference Platform Porting Guide.
• Se actualizó la utilidad de reprogramación al programa aoclfilenombre>.comando de utilidad aocx.
• Se actualizó la utilidad de diagnóstico para el diagnóstico aocl y el diagnóstico aocl. comando de utilidad.
•Se actualizó el procedimiento en la sección Portar la plataforma de referencia a su placa SoC para incluir instrucciones sobre cómo portar y modificar la partición de la placa c5soc para crear una partición sin tiempo para el flujo de cierre de tiempo garantizado.
•Insertó el tema Actualización de una plataforma de referencia portada para delinear los procedimientos para las siguientes tareas:
1. Excluyendo el bloque del sistema de procesador duro (HPS) en la partición de la placa
2. Actualización de la imagen de la tarjeta flash SD
•Se actualizó la sección Creación de una imagen de tarjeta flash SD. Se recomienda usar la versión 14.0 de la imagen Golden System Reference Design (GSRD) como punto de partida en lugar de la imagen disponible con SoC Embedded Design Suite (EDS).
• Se actualizó la sección Recompilación del kernel de Linux y el controlador del kernel de Linux OpenCL:
1. Se agregaron instrucciones para configurar la variable CROSS COMPILE.
2. Cambió el comando que ejecuta para verificar que el CMA esté habilitado correctamente.
14 de julio 14.0.0 •Versión inicial.

Documentos / Recursos

Intel FPGA SDK para OpenCL [pdf] Guía del usuario
SDK de FPGA para OpenCL, SDK de FPGA, SDK para OpenCL, SDK

Referencias

Deja un comentario

Su dirección de correo electrónico no será publicada. Los campos obligatorios están marcados *