SDK FPGA para OpenCL
Guia do usuário
UG-OCL009
2017.05.08
Última atualização para Intel® Quartus® Prime Design Suite: 17.0
Inscrever-se
Enviar feedback
Intel® FPGA SDK para OpenCL™ Intel® Cyclone®V SoC Development Kit Guia de portabilidade da plataforma de referência
V SoC Development Kit Reference Platform Porting Guide descreve o design de hardware e software da Intel Cyclone V SoC Development Kit Reference Platform (c5soc) para uso com o Intel Software Development Kit (SDK) para OpenCL O Intel ® FPGA SDK para OpenCL ™ Intel Cyclone ® . Antes de começar, a Intel recomenda enfaticamente que você se familiarize com o conteúdo dos seguintes documentos:
- Intel FPGA SDK para OpenCLIntel Cyclone V SoC Guia de introdução
- Intel FPGA SDK para OpenCL Custom Platform Toolkit Guia do usuário
- Cyclone V Device Handbook, Volume 3: Hard Processor System Technical Reference Manual Além disso, consulte a página Cyclone V SoC Development Kit e SoC Embedded Design Suite da Altera website para mais informações. 1 2
Atenção: A Intel supõe que você tenha um conhecimento profundo do Guia do usuário do kit de ferramentas de plataforma personalizada Intel FPGA SDK para OpenCL. O Guia de portabilidade da plataforma de referência do Kit de desenvolvimento de SoC Cyclone V não descreve o uso do Kit de ferramentas de plataforma personalizada do SDK para implementar uma Plataforma personalizada para o Kit de desenvolvimento de SoC Cyclone V. Descreve apenas as diferenças entre o suporte SDK no Cyclone V SoC Development Kit e um Intel FPGA SDK genérico para OpenCL Custom Platform.
Links relacionados
- Intel FPGA SDK para OpenCL Cyclone V SoC Guia de introdução
- Intel FPGA SDK para OpenCL Custom Platform Toolkit Guia do usuário
- Manual do dispositivo Cyclone V, Volume 3: Manual de referência técnica do sistema de processador rígido
- Página Cyclone V SoC Development Kit e SoC Embedded Design Suite na Altera website
- OpenCL e o logotipo OpenCL são marcas registradas da Apple Inc. usadas com permissão do Khronos Group™.
- O Intel FPGA SDK para OpenCL é baseado em uma Especificação Khronos publicada e passou no Processo de Teste de Conformidade Khronos. O status de conformidade atual pode ser encontrado em www.khronos.org/conformance.
Corporação Intel. Todos os direitos reservados. Intel, o logotipo Intel, as palavras e logotipos Altera, Arria, Cyclone, Enpirion, MAX, Nios, Quartus e Stratix são marcas comerciais da Intel Corporation ou de suas subsidiárias nos Estados Unidos e/ou em outros países. A Intel garante o desempenho de seus produtos FPGA e semicondutores de acordo com as especificações atuais de acordo com a garantia padrão da Intel, mas reserva-se o direito de fazer alterações em quaisquer produtos e serviços a qualquer momento sem aviso prévio. A Intel não assume nenhuma responsabilidade decorrente do aplicativo ou uso de qualquer informação, produto ou serviço aqui descrito, exceto conforme expressamente acordado por escrito pela Intel. Os clientes da Intel são aconselhados a obter a versão mais recente das especificações do dispositivo antes de confiar em qualquer informação publicada e antes de fazer pedidos de produtos ou serviços.
*Outros nomes e marcas podem ser reivindicados como propriedade de terceiros.
1.1.1 Variantes de placa de plataforma de referência do kit de desenvolvimento SoC Cyclone V
O Intel FPGA SDK para OpenCL Cyclone V SoC Development Kit Reference Platform inclui duas variantes de placa.
- placa c5soc
Esta placa padrão fornece acesso a dois bancos de memória DDR. O HPS DDR é acessível tanto pelo FPGA quanto pela CPU. O FPGA DDR só é acessível pelo FPGA. - placa c5soc_sharedonly
Esta variante de placa contém apenas conectividade HPS DDR. O FPGA DDR não está acessível. Esta variante de placa é mais eficiente em termos de área porque menos hardware é necessário para suportar um banco de memória DDR. A placa c5soc_sharedonly também é uma boa plataforma de prototipagem para uma placa de produção final com um único banco de memória DDR.
Para direcionar esta variante de placa ao compilar seu kernel OpenCL, inclua a opção -board c5soc_sharedonly em seu comando aoc.
Para mais informações sobre o –board opção do comando aoc, consulte o Guia de programação Intel FPGA SDK para OpenCL.
Links relacionados
Compilando um Kernel para uma Placa FPGA Específica (–board )
1.1.2 Conteúdo da plataforma de referência Cyclone V SoC Development Kit
A plataforma de referência Cyclone V SoC Development Kit consiste no seguinte files e diretórios:
File ou Diretório | Descrição |
placa_env.xml | Linguagem de marcação eXtensível (XML) file que descreve c5soc para o Intel FPGA SDK para OpenCL. |
linux_sd_card_image.tgz | Imagem compactada do cartão flash SD file que contém tudo o que um usuário do SDK precisa para usar o Cyclone V SoC Development Kit com o SDK. |
braço32 | Diretório que contém o seguinte: |
1.1.3 Recursos relevantes do kit de desenvolvimento Cyclone V SoC
A lista a seguir destaca os componentes e recursos do Cyclone V SoC Development Kit que são relevantes para o Intel FPGA SDK para OpenCL:
- CPU ARM Cortex-A9 dual-core executando Linux de 32 bits.
- Barramento Advanced eXtensible Interface (AXI) entre o HPS e a malha principal do FPGA.
- Dois controladores de memória DDR reforçados, cada um conectado a um SDRAM DDR1 de 3 gigabyte (GB).
— Um controlador DDR é acessível somente ao núcleo FPGA (ou seja, FPGA DDR).
— O outro controlador DDR pode ser acessado tanto pelo HPS quanto pelo FPGA (ou seja, HPS DDR). Este controlador compartilhado permite o compartilhamento de memória livre entre a CPU e o núcleo do FPGA. - A CPU pode reconfigurar a malha central do FPGA.
1.1.3.1 Decisões e objetivos de projeto da plataforma de referência do kit de desenvolvimento de SoC Cyclone V A Intel baseia a implementação da plataforma de referência do kit de desenvolvimento de SoC Cyclone V em várias decisões e objetivos de projeto. A Intel recomenda que você considere essas metas e decisões ao portar esta plataforma de referência para sua placa SoC FPGA.
Abaixo estão os objetivos de design do c5soc:
- Forneça a maior largura de banda possível entre os kernels no FPGA e o(s) sistema(s) de memória DDR.
- Assegure-se de que os cálculos no FPGA (ou seja, kernels OpenCL) não interfiram em outras tarefas da CPU que possam incluir a manutenção de periféricos.
- Deixe o máximo possível de recursos FPGA para cálculos de kernel em vez de componentes de interface.
Abaixo estão as decisões de design de alto nível que são consequências diretas dos objetivos de design da Intel:
- A Plataforma de Referência utiliza apenas controladores de memória DDR rígidos com a configuração mais ampla possível (256 bits).
- O FPGA se comunica diretamente com o controlador de memória HPS DDR, sem envolver o barramento AXI e o switch L3 dentro do HPS. A comunicação direta fornece a melhor largura de banda possível para DDR e evita que os cálculos do FPGA interfiram nas comunicações entre a CPU e sua periferia.
- Scatter-gather direct memory access (SG-DMA) não faz parte da lógica da interface FPGA. Em vez de transferir grandes quantidades de dados entre sistemas de memória DDR, armazene os dados no HPS DDR compartilhado. O acesso direto à memória da CPU pelo FPGA é mais eficiente que o DMA. Ele economiza recursos de hardware (ou seja, área FPGA) e simplifica o driver do kernel do Linux.
Aviso: A transferência de memória entre o sistema HPS DDR compartilhado e o sistema DDR acessível apenas ao FPGA é muito lenta. Se você escolher
Para transferir memória dessa maneira, use-a apenas para quantidades muito pequenas de dados. - O host e o dispositivo executam a transferência de dados não DMA entre si por meio da ponte HPS para FPGA (H2F), usando apenas uma única porta de 32 bits. O motivo é que, sem o DMA, o kernel do Linux só pode emitir uma única solicitação de leitura ou gravação de 32 bits, portanto, não é necessário ter uma conexão mais ampla.
- O host envia sinais de controle para o dispositivo por meio de uma ponte leve H2F (LH2F).
Como os sinais de controle do host para o dispositivo são sinais de baixa largura de banda, uma ponte LH2F é ideal para a tarefa.
1.2 Transferindo a plataforma de referência para sua placa SoC FPGA
Para portar a plataforma de referência Cyclone V SoC Development Kit para sua placa SoC FPGA, execute as seguintes tarefas:
- Selecione a versão de uma memória DDR ou duas memórias DDR da plataforma de referência c5soc como ponto de partida de seu projeto.
- Atualize as localizações dos pinos em ALTERAOCLSDKROOT/board/c5soc/ /top.qsf file, onde ALTERAOCLSDKROOT é o caminho para o local do Intel FPGA SDK para instalação do OpenCL e é o nome do diretório da variante da placa. O diretório c5soc_sharedonly é para a variante de placa com um sistema de memória DDR. O diretório c5soc é para a variante de placa com dois sistemas de memória DDR.
- Atualize as configurações DDR para os blocos HPS e/ou FPGA SDRAM no arquivo ALTERAOCLSDKROOT/board/c5soc/ /system.qsys file.
4. Todos os projetos de placas preferenciais Intel FPGA SDK para OpenCL devem atingir o fechamento de tempo garantido. Como tal, a colocação do design deve ser limpa no tempo. Para portar a partição da placa c5soc (acl_iface_partition.qxp) para sua placa SoC FPGA, execute as seguintes tarefas:
Para obter instruções detalhadas sobre como modificar e preservar a partição da placa, consulte o Quartus
Prime Incremental Compilation for Hierarchical and Team-Based Design capítulo do Quartus Prime Standard Edition Handbook.
a. Remova o acl_iface_partition.qxp do diretório ALTERAOCLSDKROOT/board/c5soc/c5soc.
b. Habilite a região acl_iface_region LogicLock™ alterando o comando Tcl set_global_assignment -name LL_ENABLED OFF -section_id acl_iface_region para set_global_assignment -name LL_ENABLED ON -section_id acl_iface_region
c. Compile um kernel OpenCL para sua placa.
d. Se necessário, ajuste o tamanho e a localização da região LogicLock.
e. Quando estiver satisfeito com o posicionamento do seu design, exporte essa partição como acl_iface_partition.qxp Quartus Prime Exported Partition File.
Conforme descrito na seção Estabelecendo fluxo de tempo garantido do AIntel FPGA SDK para OpenCL Custom Platform Toolkit User Guide, importando este arquivo .qxp file no design de nível superior, você cumpre o requisito de fornecer um design de placa com um fluxo de fechamento de tempo garantido.
Para fatores que podem afetar a qualidade dos resultados (QoR) de sua partição exportada, consulte a seção General Quality of Results Considerations for the Exported Board Partition no Intel FPGA SDK for OpenCL Custom Platform Toolkit User Guide.
f. Desative a região LogicLock acl_iface_region revertendo o comando na Etapa 2 de volta para set_global_assignment -name LL_ENABLED OFF section_id acl_iface_region. - Se sua placa SoC FPGA usa diferentes pinos e periferias do bloco HPS, regenere o pré-carregador e a fonte da árvore de dispositivos (DTS) file. Se você alterar as configurações do controlador de memória HPS DDR, gere novamente o pré-carregador.
- Crie a imagem do cartão flash SD.
- Crie sua plataforma personalizada, que inclui a imagem do cartão flash SD.
- Considere criar uma versão do ambiente de tempo de execução de sua plataforma personalizada para uso com o Intel FPGA Runtime Environment (RTE) para OpenCL. A versão RTE de sua plataforma personalizada não inclui diretórios de hardware e a imagem do cartão flash SD. Essa plataforma personalizada é carregada no sistema SoC FPGA para permitir a execução de aplicativos host. Em contraste, a versão SDK da Custom Platform é necessária para o SDK compilar kernels OpenCL.
Dica: Você pode usar a versão SDK de sua plataforma personalizada para o RTE. Salvar
espaço, remova a imagem do cartão flash SD da versão RTE de sua plataforma personalizada. - Teste sua plataforma personalizada.
Consulte a seção Testing the Hardware Design do Intel FPGA SDK for OpenCL Custom Platform Toolkit User Guide para obter mais informações.
Links relacionados
- Testando o projeto de hardware
- Compilação incremental do Quartus Prime para design hierárquico e baseado em equipe
- Estabelecendo fluxo de tempo garantido
- Considerações gerais sobre a qualidade dos resultados para a partição de placa exportada
1.2.1 Atualizando uma plataforma de referência portada
Na versão atual da plataforma de referência Cyclone V SoC Development Kit, o bloco HPS está dentro da partição que define toda a lógica não-kernel. No entanto, você não pode exportar o HPS como parte do arquivo .qxp file. Para atualizar uma plataforma personalizada existente que você modificou de uma versão anterior do c5soc, implemente o fluxo de preservação QXP, atualize a imagem do cartão flash SD para obter o ambiente de tempo de execução mais recente e atualize o board_spec.xml file para ativar a migração automática.
O SDK da Altera® para OpenCL versão 14.1 e posterior investiga o placa_spec.xml file para informações do conselho e implementa atualizações automáticas. Porque você modifica o
design implementando o fluxo de preservação QXP, você deve atualizar o board_spec.xml file ao seu formato na versão atual. atualizando o file permite que o SDK distinga entre plataformas personalizadas não preservadas e as atuais plataformas personalizadas baseadas em QXP. Consulte Custom Platform Automigration for Forward Compatibility no Intel FPGA SDK for OpenCL Custom Platform Toolkit User Guide para obter mais informações.
- Para implementar o fluxo de preservação QXP em um projeto de hardware Cyclone V SoC FPGA que é portado de uma versão anterior do c5soc, execute as seguintes etapas para criar uma subpartição para excluir o HPS do .qxp file:
a. Antes de criar uma partição em torno da lógica não-kernel, crie uma partição em torno do HPS no .qsf Quartus Prime Settings File.
Por exemploampem:
# Particione manualmente a instância que modela a E/S dedicada de HPS set_instance_assignment -name PARTITION_HIERARCHY borde_18261 -para “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”
# Defina a partição como um tipo HPS_PARTITION para ser processada corretamente pelo restante do Quartus
set_global_assignment -nome TIPO_DE_PARTIÇÃO HPS_PARTIÇÃO -seção_id “system_acl_iface_hps_0_hps_io_border:border”
quartus_cdb topo -c topo
–incremental_compilation_export=acl_iface_partition.qxp
–incremental_compilation_export_partition_name=acl_iface_partition
–incremental_compilation_export_post_synth = ativado
–incremental_compilation_export_post_fit = ativado
–incremental_compilation_export_routing = ativado
–incremental_compilation_export_flatten = desativado
Depois de excluir o HPS da partição, você pode importar o arquivo .qxp file e compilar seu projeto. - Atualize a imagem do cartão flash SD com a versão atual do Intel FPGA RTE para OpenCL executando as seguintes tarefas:
a. monte o file tabela de alocação (fat32) e estendida file partições do sistema (ext3) na imagem existente como dispositivos de loopback. Para obter instruções detalhadas, consulte a Etapa 2 em Construir uma imagem de cartão SD Flash.
b. No diretório /home/root/opencl_arm32_rte, remova o files da versão anterior do RTE.
c. Faça download e descompacte a versão atual do RTE no diretório /home/root/opencl_arm32_rte.
d. No /driver/versão.h file de sua plataforma personalizada, atualize a atribuição ACL_DRIVER_VERSION para . (por example, 16.1.x, onde 16.1 é a versão do SDK e x é a versão do driver que você definiu).
e. Recrie o driver.
f. Exclua a(s) pasta(s) de hardware de sua plataforma personalizada. Copie a plataforma personalizada, juntamente com o driver atualizado, para o diretório /home/root/opencl_arm_rte/board.
g. Copie o arquivo Altera.icd file do diretório /home/root/opencl_arm32_rte e inclua-o no diretório /etc/OpenCL/vendors.
h. Desmonte e teste a nova imagem. Para obter instruções detalhadas, consulte as etapas 8 a 11 em Construindo uma imagem de cartão SD Flash.
Links relacionados
- Criando uma imagem de cartão SD Flash na página 14
Você também tem a opção de criar uma nova imagem de cartão flash SD. - Automigração de plataforma personalizada para compatibilidade futura
1.3 Suporte de Software para Memória Compartilhada
A memória física compartilhada entre FPGA e CPU é a memória preferida para kernels OpenCL rodando em FPGAs SoC. Como o FPGA acessa a memória física compartilhada, ao contrário da memória virtual compartilhada, ele não tem acesso às tabelas de páginas da CPU que mapeiam os endereços virtuais do usuário para os endereços das páginas físicas.
Com relação ao hardware, os kernels OpenCL acessam a memória física compartilhada por meio de conexão direta com o controlador de memória rígido HPS DDR. Com relação ao software, o suporte para memória física compartilhada envolve as seguintes considerações:
- Implementações típicas de software para alocar memória na CPU (por exemploample, a função malloc()) não pode alocar uma região de memória que o FPGA possa usar.
A memória que a função malloc() aloca é contígua no espaço de endereço da memória virtual, mas é improvável que quaisquer páginas físicas subjacentes sejam fisicamente contíguas. Como tal, o host deve ser capaz de alocar regiões de memória fisicamente contíguas. No entanto, essa capacidade não existe em aplicativos de espaço de usuário no Linux. Portanto, o driver do kernel do Linux deve realizar a alocação. - O driver do kernel OpenCL SoC FPGA Linux inclui a função mmap() para alocar memória física compartilhada e mapeá-la no espaço do usuário. A função mmap() usa a chamada padrão do kernel do Linux dma_alloc_coherent() para solicitar regiões de memória fisicamente contíguas para compartilhamento com um dispositivo.
- No kernel Linux padrão, dma_alloc_coherent() não aloca memória fisicamente contígua com mais de 0.5 megabytes (MB) de tamanho. Para permitir que dma_alloc_coherent() aloque grandes quantidades de memória fisicamente contígua, ative o recurso de alocador de memória contígua (CMA) do kernel do Linux e recompile o kernel do Linux.
Para a plataforma de referência Cyclone V SoC Development Kit, o CMA gerencia 512 MB de 1 GB de memória física. Você pode aumentar ou diminuir esse valor, dependendo da quantidade de memória compartilhada exigida pelo aplicativo. A chamada dma_alloc_coherent() pode não ser capaz de alocar todos os 512 MB de memória fisicamente contígua; no entanto, ele pode obter rotineiramente aproximadamente 450 MB de memória. - A CPU pode armazenar em cache a memória que a chamada dma_alloc_coherent() aloca. Em particular, as operações de gravação do aplicativo host não são visíveis para os kernels OpenCL. A função mmap() no driver do kernel Linux OpenCL SoC FPGA também contém chamadas para a função pgprot_noncached() ou remap_pf_range() para desabilitar o cache para esta região da memória explicitamente.
- Depois que a função dma_alloc_coherent() aloca a memória fisicamente contígua, a função mmap() retorna o endereço virtual para o início do intervalo, que é o intervalo de endereço da memória que você aloca. O aplicativo host requer esse endereço virtual para acessar a memória. Por outro lado, os kernels OpenCL requerem endereços físicos. O driver do kernel do Linux acompanha o mapeamento de endereço virtual para físico. Você pode mapear os endereços físicos que mmap() retorna para endereços físicos reais adicionando uma consulta ao driver.
A chamada da interface de programação de aplicativo (API) aocl_mmd_shared_mem_alloc() MMD incorpora as seguintes consultas:
a. A função mmap() que aloca memória e retorna o endereço virtual.
b. A consulta extra que mapeia o endereço virtual retornado para o endereço físico.
A chamada API aocl_mmd_shared_mem_alloc() MMD retorna dois endereços
— o endereço real retornado é o endereço virtual e o endereço físico vai para device_ptr_out.
Observação: O driver só pode mapear os endereços virtuais que a função mmap() retorna para endereços físicos. Se você solicitar o endereço físico de qualquer outro ponteiro virtual, o driver retornará um valor NULL.
Aviso: As bibliotecas de tempo de execução Intel FPGA SDK para OpenCL assumem que a memória compartilhada é a primeira memória listada no board_spec.xml file. Em outras palavras, o endereço físico que o driver do kernel Linux obtém torna-se o endereço Avalon® que o kernel OpenCL passa para o HPS SDRAM.
Com relação à biblioteca de tempo de execução, use a chamada clCreateBuffer() para alocar a memória compartilhada como um buffer de dispositivo da seguinte maneira:
- Para a variante de placa de dois DDR com memória compartilhada e não compartilhada, clCreateBuffer() aloca memória compartilhada se você especificar o sinalizador CL_MEM_USE_HOST_PTR. O uso de outros sinalizadores faz com que clCreateBuffer() aloque buffer na memória não compartilhada.
- Para a variante de placa de um DDR com apenas memória compartilhada, clCreateBuffer() aloca memória compartilhada independentemente de qual sinalizador você especificar.
Atualmente, o suporte a Linux de 32 bits na CPU ARM controla a extensão do suporte de memória compartilhada nas bibliotecas de tempo de execução do SDK. Em outras palavras, bibliotecas de tempo de execução compiladas para outros ambientes (por exemploample, x86_64 Linux ou Windows de 64 bits) não suportam memória compartilhada.
C5soc não implementou memória heterogênea para distinguir entre memória compartilhada e não compartilhada pelos seguintes motivos:
1. Histórico—O suporte de memória heterogênea não estava disponível quando o suporte de memória compartilhada foi originalmente criado.
2. Interface uniforme—Como o OpenCL é um padrão aberto, a Intel mantém a consistência entre fornecedores de plataformas de computação heterogêneas. Portanto, a mesma interface das arquiteturas de outros fornecedores de placas é usada para alocar e usar memória compartilhada.
1.4 Reconfiguração do FPGA
Para SoC FPGAs, a CPU pode reconfigurar o núcleo do FPGA sem interromper a operação da CPU. O bloco de hardware FPGA Manager que abrange o HPS e o núcleo FPGA realiza a reconfiguração. O kernel do Linux inclui um driver que permite fácil acesso ao FPGA Manager.
- Para view o status do núcleo do FPGA, invoque o comando cat /sys/class/fpga/fpga0/status.
O utilitário de programa Intel FPGA SDK para OpenCL disponível com a plataforma de referência Cyclone V SoC Development Kit usa essa interface para programar o FPGA. Ao reprogramar um núcleo FPGA com uma CPU em execução, o utilitário do programa executa todas as seguintes tarefas:
1. Antes da reprogramação, desabilite todas as pontes de comunicação entre o FPGA e o HPS, ambas as pontes H2F e LH2F.
Reative essas pontes após a conclusão da reprogramação.
Atenção: O sistema OpenCL não usa a ponte FPGA-to-HPS (F2H). Consulte a seção Interfaces HPS-FPGA no Manual do dispositivo Cyclone V, Volume 3: Manual de referência técnica do sistema de processador rígido para obter mais informações.
2. Certifique-se de que o link entre o FPGA e o controlador HPS DDR esteja desabilitado durante a reprogramação.
3. Certifique-se de que as interrupções do FPGA no FPGA estejam desativadas durante a reprogramação.
Além disso, notifique o driver para rejeitar quaisquer interrupções do FPGA durante a reprogramação.
Consulte o código-fonte do utilitário do programa para obter detalhes sobre a implementação real.
Aviso: Não altere a configuração do controlador HPS DDR quando a CPU estiver em execução.
Fazer isso pode causar um erro fatal do sistema porque você pode alterar a configuração do controlador DDR quando houver transações de memória pendentes da CPU. Isso significa que quando a CPU estiver rodando, você não pode reprogramar o núcleo do FPGA com uma imagem que use HPS DDR em uma configuração diferente.
Lembre-se de que o sistema OpenCL e o design de referência Golden Hardware disponível com o Intel SoC FPGA Embedded Design Suite (EDS) definem o HPS DDR em um único modo de 256 bits.
As partes do sistema da CPU, como o preditor de ramificação ou o pré-buscador da tabela de páginas, podem emitir comandos DDR mesmo quando parece que nada está sendo executado na CPU.
Portanto, o tempo de inicialização é o único momento seguro para definir a configuração do controlador HPS DDR.
Isso também implica que o U-boot deve ter um binário bruto file (.rbf) para carregar na memória. Caso contrário, você pode estar habilitando o HPS DDR com portas não utilizadas no FPGA e possivelmente alterando as configurações de porta posteriormente. Por esse motivo, o driver do kernel OpenCL Linux não inclui mais a lógica necessária para definir a configuração do controlador HPS DDR.
Os switches SW3 dual in-line package (DIP) no Cylone V SoC Development Kit controlam a forma esperada da imagem .rbf (isto é, se o file é compactado e/ou criptografado). O C5soc e o Golden Hardware Reference Design disponível com o SoC EDS incluem imagens .rbf compactadas, mas não criptografadas. As configurações do switch DIP SW3 descritas no SDK de FPGA Intel para OpenCL Cyclone V SoC Getting Started Guide correspondem a esta configuração de imagem .rbf.
Links relacionados
- Interfaces HPS-FPGA
- Configurando os interruptores SW3
1.4.1 Detalhes da arquitetura do sistema FPGA
O suporte para a plataforma de referência do kit de desenvolvimento SoC Cyclone V é baseado na plataforma de referência Stratix® V (s5_ref), disponível com o Intel FPGA SDK para OpenCL.
A organização geral do sistema c5soc Qsys e o driver do kernel são muito semelhantes aos de s5_ref.
Os seguintes componentes principais do FPGA são os mesmos em c5soc e s5_ref:
- Bloco VERSION_ID
- mecanismo de descanso
- Divisor de banco de memória
- Interface de espionagem de cache
- relógio do kernel
- Bloqueios de acesso ao registro de controle (CRA)
1.5 Construindo uma Imagem de Cartão Flash SD
Como o Cyclone V SoC FPGA é um sistema completo em um chip, você é responsável por fornecer a definição completa do sistema. A Intel recomenda que você o entregue na forma de uma imagem de cartão flash SD. O usuário do Intel FPGA SDK para OpenCL pode simplesmente gravar a imagem no cartão flash micro SD e a placa SoC FPGA está pronta para uso.
Modificando uma imagem de cartão SD Flash existente na página 13
A Intel recomenda que você simplesmente modifique a imagem disponível com a plataforma de referência Cyclone V SoC Development Kit. Você também tem a opção de criar uma nova imagem de cartão flash SD.
Criando uma imagem de cartão SD Flash na página 14
Você também tem a opção de criar uma nova imagem de cartão flash SD.
1.5.1 Modificando uma Imagem de Cartão Flash SD Existente
A Intel recomenda que você simplesmente modifique a imagem disponível com o Cyclone V SoC
Plataforma de Referência do Kit de Desenvolvimento. Você também tem a opção de criar uma nova imagem de cartão flash SD.
A imagem c5soc linux_sd_card_image.tgz file está disponível no diretório ALTERAOCLSDKROOT/board/c5soc, onde ALTERAOCLSDKROOT aponta para o caminho do diretório de instalação do Intel FPGA SDK para OpenCL.
Atenção: Para modificar a imagem do cartão flash SD, você deve ter privilégios de root ou sudo.
- Para descompactar o $ALTERAOCLSDKROOT/board/c5soc/linux_sd_card_image.tgz file, execute o comando tar xvfzlinux_sd_card_image.tgz.
- Compilar o hello_world OpenCL example design usando o suporte da plataforma personalizada. Renomeie o .rbf file que o Intel FPGA SDK para OpenCL Offline Compiler gera como opencl.rbf e coloque-o na partição fat32 dentro da imagem do cartão flash SD.
Você pode baixar o hello_world example design do OpenCL Design Examples página no Altera website. - Coloque o .rbf file na partição fat32 da imagem do cartão flash.
Atenção: A partição fat32 deve conter tanto o zImage file e o .rbf file. Sem um .rbf file, ocorrerá um erro fatal ao inserir o driver. - Depois de criar a imagem do cartão SD, grave-a em um cartão micro SD invocando o seguinte comando: sudo dd if=/path/to/sdcard/image.bin of=/dev/sdcard
- Para testar a imagem do cartão flash SD, execute as seguintes tarefas:
a. Insira o cartão flash micro SD na placa SoC FPGA.
b. Ligue a placa.
c. Chame o comando utilitário de diagnóstico aocl.
1.5.2 Criando uma Imagem de Cartão Flash SD
Você também tem a opção de criar uma nova imagem de cartão flash SD. Instruções genéricas sobre a criação de uma nova imagem de cartão flash SD e a reconstrução de uma imagem existente de cartão flash SD estão disponíveis na página GSRD v14.0.2 – Cartão SD do RocketBoards.org website.
As etapas abaixo descrevem o procedimento para criar a imagem linux_sd_card_image.tgz a partir da imagem do cartão SD Golden System Reference Design (GSRD):
Observação:
Para criar a imagem da imagem c5soc, execute todas as tarefas aplicáveis descritas neste procedimento.
- Baixe e descompacte a imagem do cartão flash SD GSRD versão 14.0 de Rocketboards.org.
- Monte o file tabela de alocação (fat32) e estendida file partições do sistema (ext3) nesta imagem como dispositivos de loopback. Para montar uma partição, execute as seguintes etapas:
a. Determine o início do byte da partição dentro da imagem invocando /sbin/fdisk -lu image_file comando.
Por exemploample, a partição número 1 do tipo W95 FAT tem um deslocamento de bloco de 2121728. Com 512 bytes por bloco, o deslocamento de bytes é de 512 bytes x 2121728 = 1086324736 bytes.
b. Identifique um dispositivo de loop livre (por exemploample, /dev/loop0) digitando o comando losetup -f.
c. Assumindo que /dev/loop0 é o dispositivo de loop livre, atribua sua imagem de cartão flash ao dispositivo de bloco de loop invocando a imagem losetup /dev/loop0_file -0 1086324736 comando.
d. Monte o dispositivo de loop invocando o comando mount /dev/loop0 /media/disk1.
dentro da imagem file, /media/disk1 agora é uma partição fat32 montada.
e. Repita as etapas de a a d para a partição ext3. - Faça o download da versão Cyclone V SoC FPGA do pacote Intel FPGA Runtime Environment para OpenCL no Centro de download da Altera website.
a. Clique no botão Download ao lado da edição do software Quartus Prime.
b. Especifique a versão de lançamento, o sistema operacional e o método de download.
c. Clique na guia Software adicional e selecione para baixar o Intel FPGA
Ambiente de tempo de execução para OpenCL Linux Cyclone V SoC TGZ.
d. Depois de baixar o aocl-rte- .arm32.tgz file, descompacte-o para
um diretório que você possui. - Coloque o aocl-rte- descompactado .arm32 diretório no diretório /home/root/opencl_arm32_rte na partição ext3 da imagem file.
- Exclua a(s) pasta(s) de hardware de sua plataforma personalizada e, em seguida, coloque a plataforma personalizada no subdiretório da placa de /home/root/opencl_arm32_rte.
- Crie o init_opencl.sh file no diretório /home/root com o seguinte conteúdo: export ALTERAOCLSDKROOT=/home/root/opencl_arm32_rte export AOCL_BOARD_PACKAGE_ROOT=$ALTERAOCLSSDKROOT/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
O usuário do SDK executa o comando source ./init_opencl.sh para carregar as variáveis de ambiente e o driver do kernel OpenCL Linux. - Se você precisar atualizar o pré-carregador, o DTS files, ou o kernel do Linux, você precisa do compilador arm-linux-gnueabihf-gcc do SoC EDS. Siga as instruções descritas no Guia do usuário do Intel SoC FPGA Embedded Design Suite para adquirir o software, recompilá-lo e atualizar os files na partição fat32 montada.
Atenção: É mais provável que você precise atualizar o pré-carregador se sua plataforma personalizada tiver usos de pinos diferentes daqueles em c5soc.
Lembre-se: Se você recompilar o kernel Linux, recompile o driver do kernel Linux com a mesma origem do kernel Linux files. Se houver uma incompatibilidade entre o driver do kernel do Linux e o kernel do Linux, o driver não será carregado. Além disso, você deve habilitar o CMA.
Consulte Recompilando o Kernel do Linux para obter mais informações. - Compilar o hello_world OpenCL example design usando o suporte da plataforma personalizada. Renomeie o .rbf file que o Intel FPGA SDK para OpenCL Offline Compiler gera como opencl.rbf e coloque-o na partição fat32 dentro da imagem do cartão flash SD.
Você pode baixar o hello_world example design do OpenCL Design Examples página no Altera website.
9. Depois de armazenar todos os files na imagem do cartão flash, invoque os seguintes comandos:
a. sincronizar
b. desmontar /media/disco1
c. desmontar onde é o nome do diretório que você usa para montar a partição ext3 em 3 na página 3 (por examparquivo, /media/disco2).
d. perder configuração -d /dev/loop0
e. perder configuração -d /dev/loop1 - Compacte a imagem do cartão flash SD invocando o seguinte comando: tar cvfz .tgz linux_sd_card_image
- Entregue o .tgz file dentro do diretório raiz de sua plataforma personalizada.
- Para testar a imagem do cartão flash SD, execute as seguintes tarefas:
a. Escreva a imagem descompactada resultante em um cartão flash micro SD.
b. Insira o cartão flash micro SD na placa SoC FPGA.
c. Ligue a placa.
d. Chame o comando utilitário de diagnóstico aocl.
Links relacionados
- Guia do usuário do Intel SoC FPGA Embedded Design Suite
- Projeto OpenCL Examples página no Altera website
- Recompilando o Kernel do Linux na página 16
Para habilitar o CMA, você deve primeiro recompilar o kernel do Linux. - Consultando o nome do dispositivo de sua placa FPGA (diagnosticar)
1.6 Compilando o Linux Kernel para Cyclone V SoC FPGA
Antes de executar aplicativos OpenCL na placa Cyclone V SoC FPGA, você deve compilar a fonte do kernel Linux e compilar e instalar o driver do kernel OpenCL Linux.
- Recompilando o Kernel do Linux na página 16
Para habilitar o CMA, você deve primeiro recompilar o kernel do Linux. - Compilando e instalando o driver do kernel OpenCL Linux na página 17 Compile o driver do kernel OpenCL Linux no código-fonte do kernel compilado.
1.6.1 Recompilando o Kernel do Linux
Para habilitar o CMA, você deve primeiro recompilar o kernel do Linux.
- Clique no link GSRD v14.0 – Compilando Linux na página Recursos do RocketBoards.org website para acessar instruções sobre como baixar e reconstruir o código-fonte do kernel do Linux.
Para uso com o Intel FPGA SDK para OpenCL, especifique socfpga-3.13-rel14.0 como o . - Nota: O processo de construção cria o arquivo arch/arm/configs/socfpga_defconfig file. Esse file especifica as definições para a configuração padrão socfpga.
Adicione as seguintes linhas ao final do arquivo arch/arm/configs/socfpga_defconfig file.
CONFIG_MEMORY_ISOLATION=y
CONFIG_CMA=y
CONFIG_DMA_CMA=s
CONFIG_CMA_DEBUG=y
CONFIG_CMA_SIZE_MBYTES=512
CONFIG_CMA_SIZE_SEL_MBYTES=y
CONFIG_CMA_ALIGNMENT=8
CONFIG_CMA_AREAS=7
O valor de configuração CONFIG_CMA_SIZE_MBYTES define o limite superior do número total de memória fisicamente contígua disponível. Você pode aumentar esse valor se precisar de mais memória. - Atenção: A quantidade total de memória física disponível para o processador ARM na placa SoC FPGA é de 1 GB. A Intel não recomenda que você defina o gerenciador de CMA próximo a 1 GB.
- Execute o comando make mrproper para limpar a configuração atual.
- Execute o comando make ARCH=arm socfpga_deconfig.
ARCH=arm indica que você deseja configurar a arquitetura ARM.
socfpga_defconfig indica que você deseja usar a configuração socfpga padrão. - Execute o comando export CROSS_COMPILE=arm-linux-gnueabihf-.
Este comando define a variável de ambiente CROSS_COMPILE para especificar o prefixo da cadeia de ferramentas desejada. - Execute o comando make ARCH=arm zImage. A imagem resultante está disponível no arquivo arch/arm/boot/zImage file.
- Coloque o zImage file na partição fat32 da imagem do cartão flash. Para obter instruções detalhadas, consulte o Manual do usuário GSRD específico do Cyclone V SoC FPGA em Rocketboards.org.
- Nota: Para inserir corretamente o driver do kernel OpenCL Linux, primeiro carregue um SDKgenerated.rbf file no FPGA.
Para criar o .rbf file, compilar um exemplo de design do SDKample com a plataforma de referência Cyclone V SoC Development Kit como a plataforma personalizada de destino.
9. Coloque o .rbf file na partição fat32 da imagem do cartão flash.
Atenção: A partição fat32 deve conter tanto o zImage file e o .rbf file. Sem um .rbf file, ocorrerá um erro fatal ao inserir o driver. - Insira o cartão micro SD programado, que contém a imagem do cartão SD que você modificou ou criou anteriormente, no Cyclone V SoC Development Kit e, em seguida, ligue a placa SoC FPGA.
- Verifique a versão do kernel do Linux instalado executando o comando uname -r.
- Para verificar se você habilitou o CMA com sucesso no kernel, com a placa SoC FPGA ligada, execute o comando grep init_cma /proc/kallsyms.
O CMA é ativado se a saída não estiver vazia. - Para usar o kernel do Linux recompilado com o SDK, compile e instale o driver do kernel do Linux.
Links relacionados
- Manuais do usuário do Golden System Reference Design (GSRD)
- Criando uma imagem de cartão SD Flash na página 13
Como o Cyclone V SoC FPGA é um sistema completo em um chip, você é responsável por fornecer a definição completa do sistema.
1.6.2 Compilando e instalando o OpenCL Linux Kernel Driver
Compile o driver do kernel OpenCL Linux na origem do kernel compilado.
A fonte do driver está disponível na versão Cyclone V SoC FPGA do Intel FPGA Runtime Environment para OpenCL. Além disso, certifique-se de ter carregado um Intel FPGA SDK para .rbf gerado por OpenCL file no FPGA para evitar a instalação incorreta do módulo do kernel do Linux.
- Faça o download da versão Cyclone V SoC FPGA do pacote Intel FPGA Runtime Environment para OpenCL no Centro de download da Altera website.
a. Clique no botão Download ao lado da edição do software Quartus Prime.
b. Especifique a versão de lançamento, o sistema operacional e o método de download.
c. Clique na guia Software adicional e selecione para baixar o Intel FPGA
Ambiente de tempo de execução para OpenCL Linux Cyclone V SoC TGZ.
d. Depois de baixar o aocl-rte- .arm32.tgz file, descompacte-o para
um diretório que você possui.
A fonte do driver está no aocl-rte- .arm32/board/c5soc/diretório do driver. - Para recompilar o driver do kernel OpenCL Linux, defina o valor KDIR no Make do driverfile para o diretório que contém a fonte do kernel do Linux files.
- Execute o comando export CROSS_COMPILE=arm-linux-gnueabihf- para indicar o prefixo de sua cadeia de ferramentas.
- Execute o comando make clean.
- Execute o comando make para criar o aclsoc_drv.ko file.
- Transfira o diretório opencl_arm32_rte para a placa Cyclone V SoC FPGA.
Executando o scp -r root@seu-ipaddress: O comando coloca o ambiente de tempo de execução no diretório /home/root. - Execute o script init_opencl.sh que você criou quando criou a imagem do cartão SD.
- Chame o comando utilitário de diagnóstico aocl. O utilitário de diagnóstico retornará um resultado aprovado após a execução bem-sucedida de init_opencl.sh.
1.7 problemas conhecidos
Atualmente, existem certas limitações no uso do Intel FPGA SDK para OpenCL com a plataforma de referência Cyclone V SoC Development Kit.
- Você não pode substituir os nomes do fornecedor e da placa relatados pelas strings CL_DEVICE_VENDOR e CL_DEVICE_NAME da chamada clGetDeviceInfo().
- Se o host alocar memória constante no sistema DDR compartilhado (ou seja, HPS DDR) e modificar a memória constante após a execução do kernel, os dados na memória podem ficar desatualizados. Esse problema surge porque o núcleo do FPGA não pode bisbilhotar transações CPU-to-HPS DDR.
Para evitar que execuções subseqüentes do kernel acessem dados desatualizados, implemente uma das seguintes soluções alternativas:
• Não modifique a memória constante após sua inicialização.
• Se você precisar de vários conjuntos de dados __constant, crie vários buffers de memória constante.
• Se disponível, aloque memória constante no FPGA DDR em sua placa aceleradora. - O utilitário SDK no ARM suporta apenas o programa e diagnostica os comandos do utilitário.
Os comandos de flash, utilitário de instalação e desinstalação não são aplicáveis ao Cyclone V SoC Development Kit pelos seguintes motivos:
a. O utilitário de instalação deve compilar o driver de kernel Linux aclsoc_drv e habilitá-lo no SoC FPGA. A máquina de desenvolvimento deve realizar a compilação; no entanto, ele já contém fontes de kernel do Linux para o SoC FPGA. As fontes do kernel Linux para a máquina de desenvolvimento são diferentes daquelas para o SoC FPGA. A localização das fontes do kernel do Linux para o SoC FPGA provavelmente é desconhecida para o usuário do SDK. Da mesma forma, o utilitário de desinstalação também não está disponível para o Cyclone V SoC Development Kit.
Além disso, entregar aclsoc_drv para a placa SoC é um desafio porque a distribuição padrão do Cyclone V SoC Development Kit não contém o kernel do Linux. files ou o compilador GNU Compiler Collection (GCC).
b. O utilitário flash requer a colocação de um .rbf file de um design OpenCL na partição FAT32 do cartão flash micro SD. Atualmente, esta partição não é montada quando o usuário do SDK liga a placa. Portanto, a melhor maneira de atualizar a partição é usar um leitor de cartão flash e a máquina de desenvolvimento. - Ao alternar entre o executável Intel FPGA SDK para OpenCL Offline Compiler files (.aocx) que correspondem a diferentes variantes de placa (ou seja, c5soc e c5soc_sharedonly), você deve usar o utilitário de programa do SDK para carregar o .aocx file para a nova variante de tabuleiro pela primeira vez. Se você simplesmente executar o aplicativo host usando uma nova variante de placa, mas o FPGA contiver a imagem de outra variante de placa, poderá ocorrer um erro fatal.
- O .qxp file não inclui as atribuições de partição de interface porque o software Quartus Prime atende consistentemente aos requisitos de tempo desta partição.
- Quando você liga a placa, seu endereço de controle de acesso à mídia (MAC) é definido como um número aleatório. Se sua política de LAN não permitir esse comportamento, defina o endereço MAC executando as seguintes tarefas:
a. Durante a inicialização do U-Boot, pressione qualquer tecla para entrar no prompt de comando do U-Boot.
b. Digite setenv ethaddr 00:07:ed:00:00:03 no prompt de comando.
Você pode escolher qualquer endereço MAC.
c. Digite o comando saveenv.
d. Reinicie a placa.
1.8 Histórico de Revisão de Documentos
Tabela 1.
Histórico de revisão de documento do Intel FPGA SDK para OpenCL Cyclone V SoC
Guia de portabilidade da plataforma de referência do kit de desenvolvimento
Data | Versão | Mudanças |
17 de maio | 2017.05.08 | •Liberação de manutenção. |
Outubro 2016 | 2016.10.31 | •Altera o nome do Altera SDK para OpenCL para Intel FPGA SDK para OpenCL. • Compilador off-line Altera renomeado para Intel FPGA SDK para compilador off-line OpenCL. |
16 de maio | 2016.05.02 | • Instruções modificadas sobre como criar e modificar uma imagem de cartão flash SD. •Instruções modificadas sobre como recompilar o kernel do Linux e o driver do kernel OpenCL Linux. |
15 de novembro | 2015.11.02 | • Versão de manutenção e instâncias alteradas de Quartus II para Quartus Prime. |
15 de maio | 15.0.0 | •Na reconfiguração do FPGA, instrução removida para reprogramar o núcleo do FPGA com um . imagem rbf invocando o gato filenome>. rbf > /dev/ fpga0 porque este método não é recomendado. |
14 de dezembro | 14.1.0 | • Renomeou o documento como Guia de portabilidade da plataforma de referência do Kit de desenvolvimento SoC Altera Cyclone V. •Atualizado o utilitário de reprogramação para o programa aoclfilecomando do utilitário name>.aocx. •Atualizado o utilitário de diagnóstico para o diagnóstico aocl e diagnóstico aocl comando utilitário. •Atualizado o procedimento na seção Portabilidade da plataforma de referência para sua placa SoC para incluir instruções sobre portabilidade e modificação da partição da placa c5soc para criar uma partição de limpeza de tempo para o fluxo de fechamento de tempo garantido. •Inserido o tópico Atualizando uma plataforma de referência portada para descrever os procedimentos para as seguintes tarefas: 1. Excluindo o bloco do sistema de processador rígido (HPS) na partição da placa 2. Atualizando a imagem do cartão flash SD •Atualizou a seção Criando uma imagem de cartão SD Flash. Recomendado o uso da versão 14.0 da imagem Golden System Reference Design (GSRD) como ponto de partida, em vez da imagem disponível com o SoC Embedded Design Suite (EDS). •Atualizou a seção Recompilando o Kernel do Linux e o Driver do Kernel do OpenCL Linux: 1.Instrução adicionada para definir a variável CROSS COMPILE. 2.Alterado o comando que você executa para verificar se o CMA foi ativado com sucesso. |
14 de julho | 14.0.0 | •Lançamento inicial. |
Documentos / Recursos
![]() |
Intel FPGA SDK para OpenCL [pdf] Guia do Usuário SDK FPGA para OpenCL, SDK FPGA, SDK para OpenCL, SDK |