BR102018005101A2 - Método para gerenciar circuitos lógicos programáveis para aplicativos invocando bibliotecas dinâmicas - Google Patents

Método para gerenciar circuitos lógicos programáveis para aplicativos invocando bibliotecas dinâmicas Download PDF

Info

Publication number
BR102018005101A2
BR102018005101A2 BR102018005101-6A BR102018005101A BR102018005101A2 BR 102018005101 A2 BR102018005101 A2 BR 102018005101A2 BR 102018005101 A BR102018005101 A BR 102018005101A BR 102018005101 A2 BR102018005101 A2 BR 102018005101A2
Authority
BR
Brazil
Prior art keywords
hardware
library
pld
dynamic library
circuits
Prior art date
Application number
BR102018005101-6A
Other languages
English (en)
Inventor
Romeu Palos De Gouvêa
Original Assignee
Samsung Eletrônica da Amazônia Ltda.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Samsung Eletrônica da Amazônia Ltda. filed Critical Samsung Eletrônica da Amazônia Ltda.
Priority to BR102018005101-6A priority Critical patent/BR102018005101A2/pt
Priority to US16/059,230 priority patent/US10607037B2/en
Publication of BR102018005101A2 publication Critical patent/BR102018005101A2/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K19/00Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
    • H03K19/02Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components
    • H03K19/173Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components
    • H03K19/177Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components arranged in matrix form
    • H03K19/17748Structural details of configuration resources
    • H03K19/1776Structural details of configuration resources for memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7871Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Stored Programmes (AREA)

Abstract

método para gerenciar circuitos lógicos programáveis para aplicativos invocando bibliotecas dinâmicas. um método para gerenciar circuitos lógicos programáveis invocando uma biblioteca dinâmica, onde um aplicativo chama uma função de api de biblioteca dinâmica e partes de execução críticas ocorrem, em hardware programável associado, o método compreendendo: um aplicativo (511) invoca uma função de api (521) de um objeto compartilhado (512), como uma biblioteca dinâmica; a biblioteca (512) é carregada dinamicamente na memória e vinculada sob demanda; a biblioteca é associada a um arquivo de configuração de circuito lógico que descreve as conexões lógicas dentro do pld (513); se o pld não estiver configurado com o arquivo relacionado à função de api, ele é transmitido ao pld (522) para mapear as configurações do circuito lógico; a biblioteca dinâmica grava valores de dados na entrada de circuito e sinais de clock (523), para conduzir a execução lógica da função mapeada em hardware; a biblioteca dinâmica coleta valores de dados de saída (524) resultantes da execução de circuitos lógicos lendo a saída do circuito lógico; a biblioteca dinâmica converte a saída do circuito lógico para o tipo de dados especificado pela função de api; a função de api retorna o resultado de dados (525) ao aplicativo de chamada; o circuito digital é descarregado automaticamente.

Description

MÉTODO PARA GERENCIAR CIRCUITOS LÓGICOS PROGRAMÁVEIS PARA APLICATIVOS INVOCANDO BIBLIOTECAS DINÂMICAS
Campo técnico [0001] A presente invenção refere-se à substituição de bibliotecas compartilhadas de software por seus circuitos digitais equivalentes (que potencialmente aumenta a velocidade de execução e economiza energia). Todo o gerenciamento de recursos de hardware, tais como: espaço, disponibilidade de memória e localização dentro do arranjo de portas programável em campo (Field Programmable Gate Array - FPGA) é gerenciado pelo sistema operacional (Operatíng System - OS). De acordo com a presente invenção, as bibliotecas de software (SW) apenas atuam como wrappers para as funções de hardware, enviam os parâmetros para os circuitos digitais e respondem com os resultados recebidos posteriormente. Como consequência, os aplicativos existentes que chamam essas funções se beneficiarão de forma transparente da aceleração de hardware (HW) sem qualquer modificação na chamada de procedimento ou código fonte. As funções de gerenciamento de hardware executadas pelo sistema operacional podem incluir: alocação de circuitos sob demanda, reutilização dos mesmos conforme necessário, e liberação dos mesmos quando não são mais necessários. Antecedentes da Invenção [0002] Hoje em dia, muitas funções geralmente realizadas por algoritmos de software pesados podem ser executadas com desempenho e simplicidade drasticamente maiores por circuitos lógicos programáveis, como Dispositivos Lógicos Programáveis (Programmable Logic
Petição 870180052284, de 18/06/2018, pág. 27/45
2/19
Devices - PLD's) e arranjo de portas programável em campo (FPGA). Existem exemplos de algoritmos de aceleração de software usando circuitos lógicos programáveis em várias áreas, tais como criptografia e descriptografia de dados, codificação e decodificação de sinais de vídeo e outros cálculos matemáticos complexos.
[0003] Os blocos de construção do circuito lógico programável podem ser tão complexos quanto: microprocessadores, buffers, multiplexadores ou conversores que podem ser conectados através da programação de uma matriz de conexões, determinada por um arquivo de configuração específico que descreve o circuito, geralmente chamado de arquivo de bitstream.
[0004] Por outro lado, objetos compartilhados (por exemplo, DLLs) e bibliotecas semelhantes podem ser carregadas dinamicamente sob demanda permitindo compartilhar objetos e interfaces entre vários aplicativos de software diferentes.
[0005] A presente invenção descreve um método para uma aplicação de software capaz de se ligar a bibliotecas específicas, objetos ou DLL compartilhados que são capazes de configurar circuitos lógicos programáveis sob demanda e acionar os mesmos de forma transparente. De maneira similar, um objeto compartilhado pode ser carregado e descarregado dinamicamente na memória sob demanda, e os circuitos relacionados em Dispositivos Lógicos Programáveis (PLD) ou arranjo de portas programável em campo (FPGA) podem ser alocados dinamicamente e liberados sob demanda, otimizando o uso dos recursos em ambos os casos.
Petição 870180052284, de 18/06/2018, pág. 28/45
3/19 [0006] Uma biblioteca compartilhada ou objeto compartilhado é um conjunto de funções de software que pode ser usado por diferentes aplicativos executados no mesmo sistema. Ele permite que o código seja melhorado sem alterar o aplicativo do usuário e também permite a reutilização do código entre diferentes programas, portanto, economizando recursos de memória e tempo de carregamento. O sistema operacional já fornece muitas bibliotecas compartilhadas que contêm as operações e algoritmos mais comuns a serem usados por aplicativos instalados. O sistema aloca apenas uma biblioteca compartilhada se um aplicativo requerer. Quando nenhum aplicativo requer uma determinada biblioteca, a mesma é descarregada e a memória usada relacionada é liberada.
[0007] Alguns exemplos de objetos compartilhados são: Biblioteca de vínculo dinâmico (Dynamic-Link Library DLL) para Windows® e Objeto Compartilhado para Linux.
[0008] O documento de patente US 6,230,307 B1 intitulado: System and method for programming the hardware of field programmable gate arrays (FPGAs) and related reconfíguratíon resources as if they were software by creatíng hardware objects, por Xilinx, depositado em 26 de janeiro de 1998, propõe o uso de FPGAs como software usando blocos atômicos de alto nível no hardware. O hardware já está programado com determinados tipos e quantidades dessas unidades atômicas. Os usuários definem a arquitetura usando os recursos já disponíveis no hardware como se estivessem programando o software. A presente invenção difere do documento US 6,230,307 B1 para reprogramar o hardware reconfigurável em tempo real, e tornar o mesmo disponível
Petição 870180052284, de 18/06/2018, pág. 29/45
4/19 sob demanda, quando necessário por qualquer aplicação. O kernel do sistema operacional gerencia o espaço e os recursos alocados dentro do hardware e os libera ou programa quando necessário sem intervenção de software ou mesmo conhecimento. Ao aplicar o método da presente invenção, um aplicativo poderá ligar-se dinamicamente a uma biblioteca de software e acionar a funcionalidade do hardware, assim como executar uma chamada de interface de programação de aplicação (Application Programming Interface - API) regular, acelerando sua execução e ocultando sua complexidade.
[0009] O documento de patente US 2005/257186 A1 intitulado: Operation system for programmable hardware, de Michael Zilbershlag, depositado em 13 de maio de 2004, propõe o uso de FPGA para acelerar o processamento de sinais de entrada de dispositivos de hardware externos (joysticks, sensores, rádios de alta velocidade, etc.). A presente invenção difere do documento US 2005/257186 A1 ao propor um método mais amplo e genérico no qual qualquer software pode ser utilizado, independentemente do uso de hardware externo como entrada. A presente invenção também se concentra no gerenciamento do sistema operacional dos recursos e configurações de hardware, sem intervenção necessária no aplicativo do cliente.
[0010] O documento de patente US 9,038,072 B2 intitulado System and Method for Hardware-Software Multitasking on a Reconfigurable Computing Platform, por IMEC, depositado em 10 de dezembro de 2008, propõe o uso de um FPGA reconfigurável para acelerar tarefas de software executando-os em hardware, especialmente com foco em
Petição 870180052284, de 18/06/2018, pág. 30/45
5/19 multitarefas de diferentes aplicativos. É importante afirmar que o aplicativo deve ser especialmente desenvolvido para suportar a proposição. A presente invenção difere do documento US 9,038,072 B2, incluindo o gerenciamento de blocos de hardware e suas funcionalidades sem a intervenção no aplicativo do cliente. O aplicativo do cliente não precisa ser planejado nem desenvolvido com foco na aceleração de hardware, mas pode ser, se necessário. O documento US 9,038,072 B2 não pode fornecer os benefícios previstos pela presente invenção, em termos de transparência de um aplicativo de chamada externo, ou em termos de flexibilidade, e ele não descreve uma ligação lógica entre o objeto compartilhado e hardware programável. Além disso, a presente invenção inclui o gerenciamento da alocação/ liberação de circuitos e não está relacionado à multitarefa como no documento US 9,038,072 B2.
[0011] O documento de patente US 6,557,156 B1 intitulado: Method of configuring FPGAS for dynamically reconfigurable computing, da Xilinx Inc., depositado em 10 de abril de 2000, propõe um método de configuração de FPGAs para computação reconfigurável. Ele usa linguagem de código de alto nível (ou seja, Java) e um conjunto de bibliotecas que permite que um aplicativo reprograme o FPGA em tempo real. A presente invenção difere do documento US 6,557,156 B1 ao usar o kernel para gerenciar os recursos de hardware e bibliotecas, permitindo que aplicativos mais simples usem as vantagens da aceleração de hardware sem qualquer esforço de desenvolvimento adicional. Ao aplicar a presente invenção, um aplicativo pode ligar-se dinamicamente a uma
Petição 870180052284, de 18/06/2018, pág. 31/45
6/19 biblioteca de software e acionar a funcionalidade do hardware, assim como executar a chamada de API regular, acelerando sua execução e ocultando sua complexidade.
[0012] O documento de patente US 6,742,173 B2 intitulado: Communication and control model for field programmable gate arrays and other programmable logíc devices, por Rincon Research Corporation, depositado em 20 de junho de 2002, propõe um método de abstração de um dispositivo de hardware (FPGA ou outras plataformas de hardware) como um meio de armazenamento digital para uso com sistemas de computadores. O conjunto funcional do hardware pode ser exposto ao software sem o conhecimento da arquitetura e composição física do hardware de FPGA. A presente invenção difere do documento US 6,742,173 B2 porque esta invenção permite que um aplicativo de software abstraia e use a aceleração de hardware como se estivesse usando bibliotecas de software, gerenciando a alocação de recursos de hardware e programando na camada do Sistema Operacional. Além disso, a presente invenção não precisa simular o hardware como um meio de armazenamento digital.
[0013] O documento de patente US 2017/0206864 A1, intitulado: “Methods and Apparatus to Provide Extended Graphics Processing Capabilities, depositado em 01 de abril de 2017, por INTEL Corporation, envolve (a interface de controlador programável) enviando um parâmetro de painel de exibição para um módulo de biblioteca compartilhada, em que módulo de biblioteca compartilhada inclui uma primeira capacidade de processamento gráfico. Então, está principalmente cobrindo o processo de invocação de um módulo
Petição 870180052284, de 18/06/2018, pág. 32/45
7/19 de biblioteca compartilhada e passando-o parâmetros, que serão processados posteriormente por uma GPU (Graphic Processíng Unit). Em uma analogia com a presente invenção, está relacionado à invocação de chamada de função do módulo Objeto Compartilhado por um Aplicativo que é apenas o estímulo que inicia a execução deste mecanismo. Contudo, o documento US 2017/0206864 A1 não abrange conceitos importantes: a flexibilidade de funções sendo parcialmente implementadas pelo programa de hardware e parcialmente por hardware programável, funções sendo chamadas de forma transparente pelo aplicativo externo sem modificações, e a ligação lógica entre um objeto compartilhado e configuração de hardware programável.
[0014] Além disso, a presente invenção também está relacionada às seguintes tecnologias e soluções:
i. Dispositivos Lógicos Programáveis (http://www.mouser.com/applications/programmable-logic/): Existem muitos tipos de Dispositivos Lógicos Programáveis (PLD), começando com combinações simples de lógica digital que estão integrados em um único chip. Dispositivos lógico complexo programável (CPLDs) e arranjos de portas programáveis de campo (FPGAs) são dispositivos semicondutores de uso geral que podem ser programados após entregues. Eles são dispositivos de hardware customizáveis pelo usuário e muito flexíveis em design, e que podem implementar qualquer função lógica que um circuito integrado da aplicação específica possa executar, mas a capacidade de atualizar a funcionalidade oferece vantagens para muitos aplicativos.
Petição 870180052284, de 18/06/2018, pág. 33/45
8/19 ii. Um arranjo de lógica programável (PLA) (https://en.wikipedia.org/wiki/Programmable_logic_array) é um tipo de dispositivo de lógica programável (PLD) usado para implementar circuitos de lógica combinacionais. O PLA possui um conjunto de planos de portas AND programáveis, que se ligam a um conjunto de planos de portas OR programáveis, que podem então ser condicionalmente complementados para produzir uma saída. Ele tem 2N portas AND para N variáveis de entrada e para M saídas de PLA, deve haver M portas OR, cada uma com entradas programáveis de todas as portas AND. Este layout permite que um grande número de funções lógicas seja sintetizado nas formas canônicas de soma dos produtos.
iii. Linguagem de Descrição de Hardware (https://en.wikipedia.org/wiki/Hardware_description_languag
e): em eletrônica, uma Linguagem de Descrição de Hardware (HDL) é uma linguagem de computador especializada, semelhante à linguagem C, usada para descrever a estrutura e o comportamento de circuitos eletrônicos e, mais comumente, circuitos de lógica digital. Uma linguagem de descrição de hardware permite uma descrição precisa e formal de um circuito eletrônico que permite análises automatizadas e simulação de um circuito eletrônico. O HDL pode ser aplicado na presente invenção para descrever um desígn de circuito de lógica digital, bem como os arquivos de bítstream usados para programar PLD's. Também está compreendido na presente invenção para escrever uma lógica de hardware digital em um Linguagem de descrição de hardware (HDL) ou fornecer o bítstream para programar o hardware reconfigurável
Petição 870180052284, de 18/06/2018, pág. 34/45
9/19 diretamente para atender aos requisitos de um aplicativo ou melhorar a execução do código.
iv. Uma biblioteca compartilhada ou um objeto compartilhado (https://en.wikipedia.org/wiki/Library(computing)#Shared_li braries) é um arquivo que se destina a ser compartilhado por arquivos executáveis e outros arquivos de objetos compartilhados. Os módulos usados por um programa são carregados de objetos compartilhados individuais na memória na hora do carregamento ou na hora da execução, em vez de serem copiados por um compilador quando ele cria um único arquivo executável monolítico para o programa. A maioria dos sistemas operacionais modernos pode ter arquivos de biblioteca compartilhada do mesmo formato que os arquivos executáveis.
Sumário [0015] A presente invenção abstrai o processo de programação e acionamento de circuitos lógicos programáveis, como PLDs e FPGAs por aplicativos de software chamando bibliotecas específicas ou DLLs que podem configurar esses circuitos para executar funções geralmente realizadas por software.
[0016] Esta abordagem permite uma grande simplicidade, uma vez que os processos de ligação e invocação de aplicativos de software são tão transparentes como a chamada de uma interface de objeto compartilhado regular (por exemplo, DLL), enquanto permite que a biblioteca oculte a complexidade da programação e acionamento de circuitos lógicos programáveis.
Petição 870180052284, de 18/06/2018, pág. 35/45
10/19 [0017] Na verdade, os aplicativos de software podem ignorar como as bibliotecas implementarão suas funções, o que pode ser feito por uma implementação de software e/ ou hardware dependendo da disponibilidade de recursos.
[0018] O método da presente invenção permite o uso de uma estrutura de hardware dinamicamente reconfigurável para acelerar aplicativos de software. Isso geralmente é alcançado ao fornecer códigos de bítstream ou HDL que executam as mesmas funções que as bibliotecas compartilhadas padrão no sistema operacional, mas de forma mais eficiente, economizando tempo de execução, energia e permitindo que o sistema funcione com mais cargas e melhor desempenho, melhorando a experiência do usuário ao usar o dispositivo.
[0019] O objetivo principal da presente invenção é o gerenciamento de recursos de hardware reconfiguráveis pelo sistema operacional. O sistema operacional pode programar o hardware reconfigurável em tempo real, dependendo de aplicativos carregados/ em execução, monitorando o espaço livre no hardware de PLD e desalocando circuitos quando eles não são mais necessários, portanto, economizando/ reutilizando recursos de hardware.
[0020] Com base nas probabilidades descritas pelo estado da técnica, as seguintes vantagens para o método da presente invenção podem ser listadas:
• Função intensiva executada por software convertido para a versão equivalente ao hardware programada em PLD ou FPGA;
• Abstração de hardware em linguagens de alto nível;
Petição 870180052284, de 18/06/2018, pág. 36/45
11/19 • Execução de algoritmos de eficiência energética ocasionando o aumento da resistência da batería,· • Segurança (os algoritmos criptográficos podem ser executados em hardware dinamicamente programável, isolado da camada de software);
• Comunicações seguras melhoradas: todos os dados de comunicação poderiam ser criptografados assimetricamente usando a presente invenção, em vez de apenas uma parte da comunicação a partir de hoje;
• Algoritmos de software complexos e intensivos aceleram quando em execução em circuito digital equivalente. Breve Descrição dos Desenhos [0021] Os objetivos e vantagens da presente divulgação se tornarão mais claros através da seguinte descrição detalhada das figuras exemplares e não limitativas apresentadas no final deste documento, em que:
A Figura 1 descreve as instruções usadas e as estruturas de dados para as arquiteturas atuais disponíveis na maioria dos dispositivos do estado da técnica, como, por exemplo, smartphones e computadores;
A Figura 2 ilustra a estrutura de dados de instruções da presente invenção;
A Figura 3 ilustra o diagrama de blocos do método da presente invenção;
A Figura 4 ilustra um exemplo de algoritmo implementado por lógica de hardware programável em vez de software com desempenho muito maior;
A Figura 5 ilustra a relação entre os aplicativos, os objetos compartilhados (por exemplo, DLLs) e a lógica de
Petição 870180052284, de 18/06/2018, pág. 37/45
12/19 hardware programável, de acordo com o método da presente invenção.
A Figura 6 ilustra a presente invenção com o carregamento proposto da biblioteca dinâmica, incluindo a programação HW transparente (por exemplo, DLL).
Descrição Detalhada da Invenção [0022] A Figura 1 ilustra as instruções e as estruturas de dados usadas para as arquiteturas atuais disponíveis na maioria dos dispositivos do estado da técnica, como, por exemplo, smartphones e computadores. A arquitetura de CPU atual é conhecida como SISD (instrução única e dados únicos), ou seja, apenas uma instrução é executada para um único dado de entrada. Se forem necessários vários cálculos, a CPU demora mais para completar a tarefa, uma vez que irá buscar e executar apenas um cálculo no momento. Múltiplos núcleos tendem a aumentar a velocidade, mas apenas por um pequeno fator (por exemplo, 2, 4 ou 8). A GPU, por outro lado, tem sua arquitetura descrita como um SIMD (instrução única e dados múltiplos). Pode executar a mesma operação para uma coleta de dados, aumentando drasticamente a velocidade dos algoritmos que precisam executar o cálculo para vários dados de entrada. Se forem necessárias diferentes operações, mesmo a GPU leva mais tempo para executar os cálculos, uma vez que poderá buscar e executar apenas uma instrução por vez.
[0023] A Figura 2 ilustra a estrutura de dados de instrução da presente invenção. A arquitetura atual é descrita como MIMD (múltiplas instruções e múltiplos dados). A quantidade de instruções e dados que serão calculados no
Petição 870180052284, de 18/06/2018, pág. 38/45
13/19 mesmo momento só será limitada pela área programável disponível e dependência entre os resultados anteriores e futuros (cálculos iterativos).
[0024] A Figura 3 descreve o diagrama de blocos do método da presente invenção. É ilustrado como o aplicativo acessará a lógica do hardware (de forma transparente) através do kernel, que irá configurar a matriz lógica programável e disponibilizá-la através de um objeto compartilhado (por exemplo, DLL) para o uso da aplicação.
[0025] A Figura 4 descreve um exemplo de algoritmo que está sendo implementado por lógica de hardware programável em vez de software com desempenho muito maior, codificação/ decodificação de vídeo geralmente realizada por circuitos integrados (Integrated Circuits - ICs) dedicados: a conversão do espaço de cores que deve ser executada para gravar um vídeo ou durante sua reprodução. Isso acontece devido à natureza da informação visual, a tela funciona usando 3 valores conhecidos como RGB (vermelho, verde, azul). O codificador de vídeo, por outro lado, deve receber vídeo em formato YUV (luminância e crominância como valores separados). A presente invenção permite a otimização deste tipo de operação e vários outros algoritmos de busca e compactação utilizados para codificar de forma eficiente um vídeo, de uma forma muito flexível e transparente.
[0026] A Figura 5 descreve a relação entre os aplicativos, objetos compartilhados (por exemplo, DLLs) e a lógica de hardware programável. Vários aplicativos podem depender de várias bibliotecas (somente uma cópia de cada biblioteca será carregada na RAM). Cada biblioteca pode ou
Petição 870180052284, de 18/06/2018, pág. 39/45
14/19 não pode ter seu circuito digital equivalente que pode ser programado em hardware. Para aqueles que podem ser programados como circuitos lógicos, pode haver uma ou mais instâncias no hardware para melhorar o desempenho e reduzir a latência.
[0027] O método da presente invenção visa abstrair o processo de programação e acionamento de circuitos lógicos programáveis, como PLD e FPGAs por aplicativos de software chamando bibliotecas específicas ou DLLs que podem configurar esses circuitos para executar funções geralmente realizadas por software.
[0028] A etapa inventiva consiste em abstrair a execução de funcionalidades implementadas dinamicamente em hardware (502), assim como alocar uma biblioteca de software dinâmico (501), alcançar velocidades de execução drasticamente maiores e transparência para o aplicativo de software de chamada. O processo de configuração do hardware está completamente oculto do aplicativo de chamada e inclui o processo de programação dinâmica do hardware sob demanda, gerenciar a alocação e liberação de circuitos conforme necessário, inserir sinais aos circuitos programados e coletar seus sinais de saída como dados a serem retornados ao aplicativo de chamada.
[0029] Em vez da abordagem de software tradicional que está sendo executado por um microprocessador como uma sequência de instruções armazenadas, nesta nova abordagem, a execução de partes críticas de um algoritmo ocorre em circuitos programáveis dedicados, ao mesmo tempo em que combina:
Petição 870180052284, de 18/06/2018, pág. 40/45
15/19 • a flexibilidade das bibliotecas dinâmicas de software que podem ser carregadas e descarregadas dinamicamente na memória como objetos dinâmicos chamados por diferentes aplicativos;
• a flexibilidade análoga de alocar e liberar os circuitos relacionados que são responsáveis pela execução da função de chamada relacionada para serem usados por diferentes objetos dinâmicos;
de tal maneira, os parâmetros de entrada são conduzidos para os circuitos programados, uma sequência limitada de sinais de clock, se necessário, são conduzidos para o circuito e os sinais de resultado estão disponíveis na saída do circuito como dados a serem retornados para o aplicativo de software de chamada através dos objetos dinâmicos.
[0030] Para o aplicativo de chamada, todo o processo é totalmente transparente, nem sequer sabe se o algoritmo está sendo executado por software e/ ou hardware programável combinado. Os aplicativos existentes podem ser dinamicamente vinculados a bibliotecas (por exemplo, DLLs) sem qualquer modificação.
[0031] De acordo com a Figura 5, o método da presente invenção realiza as seguintes etapas:
a) Um aplicativo (511) invoca uma função de API (521) de um Objeto Compartilhado (512), como uma biblioteca dinâmica ou pacote similar.
b) A biblioteca (512) é carregada dinamicamente na memória e vinculada sob demanda, se ainda não estiver carregada.
Petição 870180052284, de 18/06/2018, pág. 41/45
16/19
c) A biblioteca está associada a um arquivo de configuração do circuito lógico que descreve as conexões lógicas dentro do Dispositivo Lógico Programável (PLD) (513).
d) Se PLD não estiver configurado com o arquivo de configuração relacionado à função de API, ele é transmitido e carregado no PLD (522) para mapear as configurações do circuito lógico.
e) A biblioteca dinâmica grava valores de dados de entrada na entrada do circuito e nos sinais de clock (523), se necessário, para conduzir a execução lógica da função mapeada em Hardware.
f) A biblioteca dinâmica coleta valores de dados de saída (524) que são o resultado da execução de circuitos lógicos lendo a saída ou resultado do circuito lógico.
g) A biblioteca dinâmica converte corretamente a saída do circuito lógico para o tipo de dados esperado especificado pela função de API.
h) A função de API retorna o resultado de dados (525) ao aplicativo de chamada.
i) O circuito digital é descarregado automaticamente quando não é necessário por qualquer aplicativo em execução.
[0032] O conceito principal do método da presente invenção se baseia em um conceito poderoso, os objetos compartilhados (512), popularmente conhecidos como bibliotecas de vínculo dinâmico (Dynamic Link Libraries DLLs) no ambiente Windows. Objetos compartilhados são muito flexíveis e podem ser carregados na memória e vinculados aos aplicativos do usuário sob demanda e ser descarregados
Petição 870180052284, de 18/06/2018, pág. 42/45
17/19 automaticamente quando não forem necessárias. A presente invenção leva este conceito ao hardware dinâmico, reconfigurável, programável (513), que os circuitos programáveis também podem ser alocados e liberados sob demanda com grandes vantagens de desempenho para alguns aplicativos. Não somente isso, mas software dinâmico e hardware dinâmico podem funcionar juntos, permitindo a reutilização e abstração de software e hardware (501 e 502) ao mesmo tempo.
[0033] Isso é possível porque o objeto Compartilhado (ou DLL) está logicamente conectado a um arquivo de descrição de configuração de hardware (522) que descreve conexões de circuito. A implementação pode ser tão simples quanto uma referência a um local de arquivo de configuração. A implementação resultante será flexível o suficiente para que, uma vez que um aplicativo de usuário externo (511) chame uma função (521), a execução possa ser realizada parcialmente em software pela CPU e parcialmente por circuitos de hardware configuráveis, dependendo do desempenho esperado e da disponibilidade de recursos (memória, circuitos).
[0034] A beleza sobre o conceito geral reside no fato de que o aplicativo de chamada (511) não precisa ser alterado, a fim de tirar proveito da arquitetura resultante. Deste modo, se o hardware reconfigurável associado a esta técnica é disponibilizado em um smartphone, por exemplo, os aplicativos móveis existentes podem se beneficiar do mesmo sem quaisquer alterações na chamada regular, com maior desempenho, flexibilidade e transparência, sem os aplicativos nem mesmo saberem que a função de chamada será
Petição 870180052284, de 18/06/2018, pág. 43/45
18/19 executada pelo programa de software e/ ou pelo hardware programável configurável.
[0035] Uma possível implementação do conceito descrito neste documento é representada na Figura 6. O desenho é dividido em 4 vias para uma melhor compreensão das funções envolvidas no algoritmo:
a) As vias estão divididas em:
i. Aplicativo: representa o aplicativo de chamada no espaço do usuário, por exemplo, Câmera, Calculadora, Calendário, etc. (600).
ii. Núcleo de sistema operacional (OS): representa o núcleo do sistema operacional, seja lá o que for (por exemplo, Windows, Linux, Android, OSX, etc.) (610).
iii. Biblioteca de software: representa uma implementação de software que envolverá o HW, realizando trocas de dados e ativação de execução, tornando-o transparente para o aplicativo de chamada (620).
iv. PLD / FPGA: representa as etapas que serão executadas no dispositivo de circuitos digitais (630).
b) o aplicativo é iniciado pelo usuário ou pelo sistema (601).
c) o sistema operacional começa a carregar o código do aplicativo na memória do espaço do usuário (611).
d) O OS acompanha iterativamente todos os requisitos para o aplicativo (612) e, para todos e cada um, verifica se existe uma solução de hardware otimizada (613) que substitui de forma dinâmica a versão de software da biblioteca.
i. Se a versão de hardware estiver disponível, ela é carregada no PLD (631), mas somente se todos os recursos
Petição 870180052284, de 18/06/2018, pág. 44/45
19/19 necessários estiverem disponíveis (memória, blocos de E/S, circuitos de clock, etc.) (614).
ii. Se a versão de hardware não estiver disponível ou se os recursos de hardware necessários não estiverem disponíveis, o sistema operacional carrega a versão de software da biblioteca (615), ou seja, retorna à solução disponível antes do conceito descrito neste documento.
e) Depois de todas as bibliotecas necessárias serem carregadas (616), o sistema operacional envia o controle de volta para o aplicativo principal (602) e cada vez que ele chama uma função na qual a biblioteca correspondente é carregada no hardware (603), uma versão wrapper de software mínima da biblioteca envia os parâmetros para o PLD (621) e inicia a execução de rotina no hardware (632), que executa extremamente mais rápido do que uma execução na própria CPU devido à natureza paralela do conceito de circuitos digitais.
f) Após a execução da rotina de hardware, os dados do resultado são coletados pela biblioteca wrapper de software (622) e retornados ao aplicativo de chamada (604). O último não tem informações se a execução ocorreu na CPU ou PLD.
[0036] Embora a presente descrição tenha sido descrita em conexão com certas concretizações preferidas, deve ser entendido que não se destina a limitar a divulgação a essas concretizações particulares. Em vez disso, destinase a cobrir todas as alternativas, modificações e equivalentes possíveis dentro do espírito e escopo da divulgação conforme definido pelas reivindicações anexas.

Claims (8)

  1. REIVINDICAÇÕES
    1. Método para gerenciar um circuito lógico programável invocando uma função de biblioteca dinâmica, o método caracterizado por compreender as seguintes etapas:
    a) invocar uma função de API (521) por um aplicativo (511) a partir de um objeto compartilhado (512), tal como uma biblioteca dinâmica ou pacote semelhante;
    b) carregar dinamicamente a biblioteca (512) na memória e vinculada sob demanda se já não estiver carregada;
    c) associar a biblioteca a um arquivo de configuração de circuito lógico que descreve as conexões lógicas dentro do Dispositivo Lógico Programável (PLD) (513);
    d) Se o PLD não estiver configurado com o arquivo de configuração relacionado à função de API, ele é transmitido e carregado no PLD (522) para mapear as configurações do circuito lógico;
    e) escrever através da biblioteca dinâmica, os valores de dados de entrada na entrada de circuito e sinais de clock (523), se necessário, para conduzir a execução lógica da função mapeada no Hardware;
    f) coletar através da biblioteca dinâmica os valores de dados de saída (524) que resultam da execução de circuitos lógicos ao ler a saída do circuito lógico;
    g) converter adequadamente através da biblioteca dinâmica, a saída do circuito lógico para o tipo de dados esperado especificado pela função de API;
    h) retornar através da função de API o resultado de dados (525) para o aplicativo de chamada.
    Petição 870180020723, de 14/03/2018, pág. 30/37
  2. 2/3
    2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o sistema operacional pode gerenciar e configurar os recursos de hardware no PLD, alocando e liberando automaticamente os circuitos sob demanda e otimizando o uso de recursos de hardware.
  3. 3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o circuito digital é descarregado automaticamente quando não é necessário por qualquer aplicativo em execução.
  4. 4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que circuitos lógicos em PLD podem ser configurados usando bítstream ou códigos de HDL.
  5. 5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a função de API invocada a partir de uma biblioteca dinâmica ou pacote semelhante pode ser implementada a partir de bibliotecas personalizadas ou bibliotecas tradicionalmente disponíveis no Sistema Operacional.
  6. 6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a execução de algoritmos intensivos em computação ocorre explicitamente por hardware em circuitos lógicos programáveis versus por aplicativos de software, ou automaticamente dependendo da disponibilidade de recursos e dos critérios de desempenho.
  7. 7. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que os parâmetros de entrada são conduzidos para os circuitos programados, uma sequência limitada de sinais de clock pode ser conduzida para esses circuitos e os sinais de resultado ficam disponíveis como
    Petição 870180020723, de 14/03/2018, pág. 31/37
    3/3 dados para serem retornados ao aplicativo de chamada através dos objetos dinâmicos.
  8. 8. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que os blocos de construção de circuitos lógicos programáveis podem ser tão complexos quanto: microprocessadores, buffers, multiplexadores ou conversores que podem ser conectados através da programação de uma matriz de conexões.
BR102018005101-6A 2018-03-14 2018-03-14 Método para gerenciar circuitos lógicos programáveis para aplicativos invocando bibliotecas dinâmicas BR102018005101A2 (pt)

Priority Applications (2)

Application Number Priority Date Filing Date Title
BR102018005101-6A BR102018005101A2 (pt) 2018-03-14 2018-03-14 Método para gerenciar circuitos lógicos programáveis para aplicativos invocando bibliotecas dinâmicas
US16/059,230 US10607037B2 (en) 2018-03-14 2018-08-09 Method for managing programmable logic circuits for applications invoking dynamic libraries

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
BR102018005101-6A BR102018005101A2 (pt) 2018-03-14 2018-03-14 Método para gerenciar circuitos lógicos programáveis para aplicativos invocando bibliotecas dinâmicas

Publications (1)

Publication Number Publication Date
BR102018005101A2 true BR102018005101A2 (pt) 2019-10-01

Family

ID=67904089

Family Applications (1)

Application Number Title Priority Date Filing Date
BR102018005101-6A BR102018005101A2 (pt) 2018-03-14 2018-03-14 Método para gerenciar circuitos lógicos programáveis para aplicativos invocando bibliotecas dinâmicas

Country Status (2)

Country Link
US (1) US10607037B2 (pt)
BR (1) BR102018005101A2 (pt)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113033137B (zh) * 2021-03-05 2022-02-01 北京润尼尔网络科技有限公司 数字元器件模型的建立方法、装置和服务器

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6078736A (en) 1997-08-28 2000-06-20 Xilinx, Inc. Method of designing FPGAs for dynamically reconfigurable computing
US6230307B1 (en) 1998-01-26 2001-05-08 Xilinx, Inc. System and method for programming the hardware of field programmable gate arrays (FPGAs) and related reconfiguration resources as if they were software by creating hardware objects
US6742173B2 (en) 2002-03-22 2004-05-25 Rincon Research Corporation Communication and control model for field programmable gate arrays and other programmable logic devices
US7073158B2 (en) * 2002-05-17 2006-07-04 Pixel Velocity, Inc. Automated system for designing and developing field programmable gate arrays
GB0304628D0 (en) 2003-02-28 2003-04-02 Imec Inter Uni Micro Electr Method for hardware-software multitasking on a reconfigurable computing platform
US20050257186A1 (en) 2004-05-13 2005-11-17 Michael Zilbershlag Operation system for programmable hardware
US7757198B1 (en) * 2007-04-10 2010-07-13 Lattice Semiconductor Corporation Scan chain systems and methods for programmable logic devices
US8191021B2 (en) * 2008-01-28 2012-05-29 Actel Corporation Single event transient mitigation and measurement in integrated circuits
US9530386B2 (en) 2014-03-27 2016-12-27 Intel Corporation Methods and apparatus to provide extended graphics processing capabilities

Also Published As

Publication number Publication date
US10607037B2 (en) 2020-03-31
US20190286779A1 (en) 2019-09-19

Similar Documents

Publication Publication Date Title
Ismail et al. FUSE: Front-end user framework for O/S abstraction of hardware accelerators
So et al. A unified hardware/software runtime environment for FPGA-based reconfigurable computers using BORPH
US20180074843A1 (en) System, method, and computer program product for linking devices for coordinated operation
US8316414B2 (en) Reconfiguring a secure system
JP2008171428A (ja) プロセッサが規格合致するように見えるアーキテクチャ・レベルを選択するための方法および装置
US20200356406A1 (en) Framework-agnostic agile container launches through lateral reuse of capabilities in standard runtimes
US11301225B2 (en) Reducing application startup time by generating bytecode from metadata at build time
JP2008532162A (ja) プロセッサ中の再構成可能論理
WO2018032653A1 (zh) 一种Java卡应用的功能实现方法及装置
US8429394B1 (en) Reconfigurable computing system that shares processing between a host processor and one or more reconfigurable hardware modules
Najem et al. Extended overlay architectures for heterogeneous FPGA cluster management
US11663020B2 (en) Bootstrapping frameworks from a generated static initialization method for faster booting
BR102018005101A2 (pt) Método para gerenciar circuitos lógicos programáveis para aplicativos invocando bibliotecas dinâmicas
US10795704B2 (en) Serialization of objects to java bytecode
Vidal et al. Dynamic applications on reconfigurable systems: from UML model design to FPGAs implementation
US20020013891A1 (en) Configurable hardware block
CN114281404B (zh) 一种工控机算法代码的移植方法及装置
Andrews et al. Programming models for reconfigurable manycore systems
CN112214213B (zh) Linux内核的开发和管理方法、装置、计算机设备和存储介质
US9710315B2 (en) Notification of blocking tasks
JPH11120210A (ja) 再構成可能な回路の設計装置、及び再構成可能な回路装置
Goulding-Hotta Specialization as a Candle in the Dark Silicon Regime
Skvortsov et al. Sharing resources in heterogeneous multitasking computer systems based on FPGA with the use of partial reconfiguration
US11086605B1 (en) Processing portable extensions at build time
Saldaña et al. Using partial reconfiguration in an embedded message-passing system

Legal Events

Date Code Title Description
B03A Publication of an application: publication of a patent application or of a certificate of addition of invention