Academia.eduAcademia.edu

Projetos de Sistemas Computacionais com Suporte de Simulação, de Plataformas Abertas de Prototipação e de Hardware Reconfigurável com o CompSim

2021

Projetos de Sistemas Computacionais com Suporte de Simulação, de Plataformas Abertas de Prototipação e de Hardware Reconfigurável com o CompSim Eduardo Carlos Pereira da Silva Proto1, Guilherme Álvaro Rodrigues Maia Esmeraldo1, Edson Barbosa Lisboa2, Edna Natividade da Silva Barros3 1 2 3 Instituto Federal do Ceará (IFCE) – Crato – CE – Brazil Instituto Federal de Sergipe (IFS) – Aracaju – SE – Brazil Centro de Informática (CIn) – Universidade Federal de Pernambuco (UFPE) – Recife – Brazil [email protected], [email protected], [email protected], [email protected] Abstract. Designing new computational systems is not a simple task, as it deals jointly with hardware and software issues. To address this complexity, the Platform Based Design approach considers the use of a predefined microprocessor-based hardware architecture (Platform), which can be programmed and modified to meet the design requirements. This paper presents CompSim, a tool for designing computational systems, which uses simulation for functional validation and supports physical implementation of the system under development on open prototyping and reconfigurable hardware platforms. The results show that it is possible to establish trade-offs among distinct metrics to support the choice of the most suitable platform. Resumo. Projetar novos sistemas computacionais não é uma tarefa simples, pois lida-se conjuntamente com aspectos de hardware e de software. Para tratar essa complexidade, a abordagem de Projetos Baseados em Plataforma considera o uso de uma arquitetura de hardware predefinida baseada em microprocessador (Plataforma), que pode ser programada e modificada para atender aos requisitos de projeto. Este artigo apresenta CompSim, uma ferramenta de projeto de sistemas computacionais, que utiliza simulação para validação funcional e suporta implementação física do sistema em desenvolvimento em plataformas abertas de prototipação e de hardware reconfigurável. Os resultados mostram que é possível estabelecer trade-offs entre métricas distintas para apoiar a escolha da plataforma mais adequada. 1. Introdução Atualmente, o estado da arte em sistemas computacionais abrange diferentes aplicações, tais como Internet das Coisas (IoT), Smart Cities, Indústria 4.0, Robótica, Computação de Alto Desempenho, Inteligência Artificial, Computação em Nuvem, entre outras [Ghaffarian 2016] [Esmeraldo et al. 2020]. O projeto de novos sistemas computacionais não é uma tarefa simples, pois deve-se considerar conjuntamente aspectos de hardware e software. Além disso, no projeto de novos sistemas eletrônicos deve-se equilibrar os custos de produção com o tempo e o custo de desenvolvimento, tendo em vista as restrições da aplicação, tais como desempenho, funcionalidades e dimensões do produto [Sangiovanni-Vincentelli and Martin 2001]. Para tratar essa complexidade, na literatura, surgiram diferentes abordagens de projeto de sistemas computacionais, como é o caso de Projeto Baseado em Plataforma (Platform Based Design - PBD) [Davare et al. 2007]. Nesta abordagem, considera-se uma arquitetura de hardware predefinida e baseada em microprocessador, chamada de Plataforma, que pode ser modificada para atender aos requisitos de uma determinada aplicação ou classe de aplicações. Durante um projeto baseado em plataforma, uma aplicação sofre o particionamento de suas funções, as quais serão mapeadas para implementação em hardware ou em software. Isto pode implicar em necessidade de modificações na plataforma, tais como substituição, inclusão, configuração de componentes de hardware e ajustes na estrutura de comunicação, e/ou no software que será executado pela plataforma. Esse processo é iterativo e, a cada ciclo, novos refinamentos são realizados para estabelecer o software e a plataforma de hardware mais adequados à solução. De uma forma geral, há duas tecnologias base que podem ser adotadas para a implementação física de plataformas, que são: ASIC (Application Specific Integrated Circuit) e FPGA (Field Programmable Gate Array) [Barkalov, Titarenko and Mazurkiewicz 2019]. Em PBD, os ASICs implementam sistemas computacionais programáveis, tais como os System-on-Chips (SoCs), que podem conter processadores e/ou microcontroladores, memórias on-chip, funções de periféricos e de aceleradores de hardware. Já um FPGA, que também possui uma estrutura fixa de fabricação, traz uma abordagem mais flexível, pois com ela pode-se modelar o comportamento do hardware, de maneira que é possível ter diferentes módulos independentes executando simultaneamente e com alta frequência de operação [Rajewski 2017]. Naturalmente, a escolha da tecnologia mais adequada para implementação da plataforma requer que o projetista caracterize os dados mais representativos da arquitetura do sistema que ele deseja implementar [Barkalov, Titarenko and Mazurkiewicz 2019]. No entanto, de forma mais pragmática, frequentemente, as escolhas são baseadas em estabelecer trade-offs entre quatro métricas principais: custo, tamanho físico, desempenho e consumo de energia [Kuon and Rose 2007]. Compreende-se, desta maneira, que, mesmo com a abordagem de PBD, é necessário optar por uma determinada tecnologia e realizar ajustes na plataforma e no software, visando explorar o espaço de projeto para identificar a melhor solução. Este artigo apresenta o simulador CompSim que tem como objetivo suportar o projeto de novos sistemas computacionais, apoiado na abordagem de PBD. A ferramenta proposta inclui uma plataforma virtual, a qual é possível modificar suas configurações, programá-la, simular a execução de um sistema computacional e analisar os resultados da simulação para validação dos requisitos funcionais. Após a validação funcional, é possível exportar o sistema, de forma automatizada, para plataformas abertas de prototipação (que incluem ASICs) e/ou de hardware reconfigurável (FPGA). Com isso, pode-se estabelecer um fluxo de projeto de novos sistemas computacionais que inclui a validação funcional durante a simulação e flexibilização da sua implementação física em diferentes plataformas de hardware, visando atender aos requisitos/restrições de projeto. Observa-se que, na literatura, há um lack de ferramentas de simulação que lidam com plataformas de hardware, como mostra o estudo em [Esmeraldo et al. 2019]. Podese destacar o simulador SimuS, que permite exportar o sistema para plataformas abertas de prototipação baseadas em Arduino [Arduino 2018], e o cMIPS, que consiste de uma implementação do processador MIPS em linguagem de descrição de hardware (HDL). O restante do artigo está dividido da seguinte forma: A Seção 2 apresenta o simulador CompSim; As Seções 3 e 4 detalham os recursos de exportação do sistema virtual para plataformas abertas de prototipação e de hardware reconfigurável, respectivamente; Na Seção 5, apresenta-se os resultados experimentais; e, por fim, a Seção 6 apresenta as considerações finais e demarca os trabalhos futuros. 2. O Simulador CompSim CompSim consiste de um ambiente virtual para apoio ao ensino-aprendizado em Arquitetura e Organização de Computadores e ao projeto de novos sistemas computacionais [Esmeraldo and Lisboa 2017]. A arquitetura de software do CompSim está dividida em três camadas, que são: 1) Plataforma de Hardware Virtual (PHV): consiste de uma plataforma de hardware parametrizável e simulável, cujos componentes são desenvolvidos em software e possuem as características dos principais componentes do computador, buscando oferecer cenários de projeto semelhantes aos reais. A PHV possui os seguintes componentes: A) CPU de 16-bits com arquitetura CISC (Complex Instruction Set Computer), que inclui as principais características de processadores reais, tais como registradores, diferentes tipos de instruções, Unidade Lógica e Aritmética e Unidade de Controle; B) Memória Principal (RAM), capaz de armazenar dados e instruções, bem como é parametrizável no número de linhas e de colunas, e o tamanho do bloco de dados. A RAM possui espaço de endereçamento máximo de 12-bits ou 4096 posições endereçáveis; C) Memória Cache, utilizada para minimizar o número de acessos à memória RAM pela CPU, inclui os seguintes parâmetros: número de linhas e de palavras por linha, técnicas de mapeamento (Direct, Associative e Set Associative), políticas de atualização (Write-Through e Write-Back), de alocação (Write-Allocate e Write-Around) e de substituição (First-In, First-Out - FIFO, Least Recently Used - LRU e Random); D) Dois barramentos compartilhados, sendo um deles de Sistema, que conecta CPU e memórias Cache e RAM, e o outro de Periféricos; e E) Subsistema de Entrada/Saída (E/S), que é conectado ao barramento de periféricos e permite a comunicação com até 256 periféricos. A Figura 1 ilustra a PHV do CompSim, onde visualiza-se a interligação de seus componentes; Figura 1. Plataforma de Hardware Virtual do simulador CompSim. 2) Interface Gráfica, que consiste de uma GUI (Graphical User Interface) que está integrada aos componentes da PHV e traz funções para criar uma plataforma, configurála, programá-la e simulá-la, visualizar os status dos componentes de hardware da PHV e elementos do programa, durante uma simulação, e, após uma simulação, realizar análises de desempenho do sistema computacional em desenvolvimento; e 3) Periféricos, que podem ser conectados ao Subsistema de E/S da PHV. O Subsistema de E/S permite a conexão automatizada de um novo periférico ao barramento de periféricos, tornando-o disponível para comunicação com os outros componentes da PHV. Os periféricos suportados pelo Subsistema de E/S do Simulador CompSim podem ser do tipo virtual (implementado em software e simula um periférico real) e físico (possui uma parte em software, para conexão com o barramento de periféricos, e uma parte em hardware físico). Na Figura 1, ilustra-se os periféricos Video e Teclado, como periféricos virtuais, e o periférico Arduino UNO, como físico. Ainda na camada de interface gráfica, há ferramentas que permitem exportar o sistema virtual em desenvolvimento para plataformas abertas de prototipação baseadas em Arduino e hardware reconfigurável (FPGA). As duas seções a seguir detalham esses recursos. 3. Exportando o Sistema para Plataformas Arduino O simulador CompSim permite exportar o sistema simulável em desenvolvimento (PHV e o programa) sob o formato de um emulador que pode ser executado em plataformas abertas de prototipação Arduino UNO e MEGA. O emulador consiste de um firmware que implementa a PHV e o respectivo programa na linguagem C/C++ nativa do Arduino. Desta maneira, ao exportar o emulador, os componentes da PHV serão copiados para a memória flash e sua memória RAM (com o programa para execução) será alocada na memória SRAM do microcontrolador da plataforma Arduino. Com isso, obtém-se uma implementação física do sistema computacional em desenvolvimento, com execução em modo standalone (que independe do simulador CompSim). A Figura 2 ilustra a ferramenta do CompSim em que é possível exportar o emulador do sistema para uma plataforma Arduino UNO. Figura 2. Ferramenta para Exportação do Sistema como Emulador para Arduino UNO. Na Figura 2, à esquerda, deve-se configurar: 1) Frequência de operação da CPU (“CPU frequency”), que consiste do número de instruções executadas por segundo pela CPU da PHV, na plataforma Arduino; e 2) Porta serial (“Serial port to connect to Arduino UNO”), que consiste da porta serial na qual o Arduino UNO está conectado fisicamente ao computador e é utilizada como canal para gravação do firmware do emulador no microcontrolador do Arduino UNO, com apoio do ambiente Arduino IDE. O emulador trata as operações de E/S digitais e analógicas do Arduino como periféricos da PHV. Assim, pode-se criar sistemas computacionais cujos periféricos aproveitam os recursos de plataformas Arduino para interagir com usuários, outros sistemas eletrônicos e o próprio ambiente. À direita da Figura 2, pode-se observar um diagrama que ilustra o mapeamento entre os endereços de periféricos (“portas”) da PHV e os respectivos recursos do Arduino UNO. Por exemplo, a porta 2 (“Port 2”) está mapeada nos pinos 8 a 13 da board Arduino UNO, nos quais é possível realizar operações de leitura e escrita digitais. 4. Exportando o Sistema para Plataformas com Hardware Reconfigurável Para tornar possível a exportação dos sistemas simuláveis para plataformas com hardware reconfigurável, e desta forma compor os respectivos sistemas digitais, o primeiro passo consistiu em descrever os componentes da PHV do CompSim em linguagem de descrição de hardware. No caso, optou-se por utilizar a linguagem VHDL (Very High Speed Integrated Circuit Hardware Description Language), por ser uma das mais utilizadas na descrição de sistemas digitais em fluxos modernos de projeto com FPGA [Lameres 2019]. Atualmente, estão descritos em VHDL os componentes CPU, memória RAM, Subsistema de E/S e barramentos da PHV do CompSim. Por se tratar de um componente de maior complexidade funcional e estrutural, bem como sua ausência não impede a criação e a execução de sistemas computacionais digitais, determinou-se que o projeto da memória Cache somente será realizado no próximo ciclo de desenvolvimento da especificação em VHDL. As descrições em VHDL dos componentes CPU, memória RAM, Subsistema de E/S e barramentos seguem os comportamentos dos respectivos componentes de simulação da PHV do CompSim. No entanto, por se tratar de um sistema digital, cujo comportamento e interface de comunicação são definidos em função da combinação de elementos lógicos e de sinais digitais (bits), respectivamente, foi necessário incluir mais detalhes à interface de comunicação dos componentes descritos. A Figura 3 apresenta um diagrama esquemático de blocos com as interfaces de comunicação entre CPU-Memória RAM, CPU-Subsistema de E/S e Subsistema de E/S-Periféricos. Figura 3. Diagrama Esquemático de Blocos em VHDL da PHV do CompSim. Observa-se, na Figura 3, à direita, que o barramento entre os componentes CPU e RAM inclui: 12-bits para o barramento de endereços (MAddr); 1-bit para indicar operação de leitura e 1-bit para indicar operação de escrita (MRd e MWr, respectivamente); e 16-bits para o barramento de dados (MDt). Ao centro e à esquerda da Figura 3, o barramento de periféricos, que permite a comunicação entre a CPU e o Subsistema de E/S inclui: 8-bits para barramento de endereços (IOAddr); 1-bit para indicar operação de leitura e 1-bit para indicar operação de escrita (IORd e IOWr, respectivamente); 1-bit para indicar que uma operação em periférico foi concluída (IORdy); e 8-bits para o barramento de dados (IODt). Com um barramento de endereços de 12-bits para RAM (MAddr), é possível endereçar 4096 (212) diferentes posições de memória, e com 8-bits para periféricos (IOAddr), pode-se endereçar até 256 (28) periféricos distintos. É importante destacar que o componente Clock é responsável por gerar os estímulos necessários para coordenar e sincronizar as operações da CPU, memória RAM e Subsistema de E/S, bem como da comunicação entre eles. Porém, como pode ser visto na Figura 3, à esquerda, para a comunicação entre Subsistema de E/S e periféricos, o barramento implementa um protocolo assíncrono de comunicação (“handshake”), o qual utiliza troca de sinais para coordenar as operações de leitura e escrita entre o Subsistema de E/S e diferentes tipos de periféricos. A interface que implementa a comunicação com cada um dos periféricos é composta por: 8-bits para o barramento de dados (IOADtx); 1-bit para habilitar o periférico para uma operação de leitura ou de escrita (IOEnx); 1-bit para indicar o tipo de operação (leitura ou escrita) (IORW); e 1-bit para que o periférico informe, ao Subsistema de E/S, a conclusão de uma operação de E/S (IORdy). Ao contrário da abordagem que trata da exportação do sistema para Arduino, cujo mapeamento entre portas e recursos do Arduino é fixo, o CompSim traz uma ferramenta que, além de exportar o sistema para uma plataforma com hardware reconfigurável, é possível mapear os sinais entre Subsistema de E/S e periféricos nos pinos de comunicação de uma board com FPGA. Essa abordagem torna o desenvolvimento de sistemas em plataformas de hardware reconfigurável mais flexível, seguro e produtivo, dado que projetos que envolvem FPGA são complexos e propensos a diversos tipos de erros. A Figura 4 (a) ilustra a ferramenta do CompSim em que é possível configurar uma board com FPGA com o sistema descrito em VHDL. (a) Painel de configuração. (b) Painel de mapeamento de pinos. Figura 4. Ferramenta para Exportação do Sistema para FPGA. Na Figura 4 (a), no painel à esquerda, para configuração da plataforma, o primeiro passo envolve selecionar os dados do FPGA (“Family”, “Prefix” e “Device”) e da memória (“Memory”), suportados na board adotada para o projeto. Ainda na Figura 4(a), no painel direito e acima, deve-se informar o pino da board onde estará disponível o sinal de clock (“Device’s Clock Pin”), pois ele será utilizado para conduzir as operações síncronas da PHV. No painel logo abaixo, estão as configurações da plataforma no FPGA, em que deve-se informar a frequência de operação do sistema (“CPU frequency (Hz)”) e o número de periféricos que a PHV suportará. Ressalta-se aqui que cada fabricante de soluções com FPGA pode incluir diferentes periféricos na board, tais como leds, chaves e displays, os quais são mapeados em pinos da interface do FPGA, fazendo com que o mapeamento de pinos, em alguns casos, tenha que ser personalizado. O botão “Config I/O Interfaces”, abre o painel ilustrado na Figura 4(b), onde é possível personalizar o mapeamento entre portas e pinos, alterando as atribuições geradas de forma automática. Em seguida, ao clicar no botão “Export to FPGA”, a ferramenta utilizará os scripts de linha de comando do ambiente de projeto de sistemas digitais Intel Quartus Prime Design Suite (IQPDS) para gerar as configurações do sistema descrito em VHDL (PHV com o respectivo programa alocado em sua RAM) e as devidas configurações de mapeamento de portas-pinos da board, para o modelo de FPGA informado. Em seguida, a ferramenta aqui apresentada utilizará o IQPDS para configurar o FPGA com o respectivo sistema digital, obtendo, dessa maneira, a implementação física do sistema em desenvolvimento. 5. Resultados Experimentais O Simulador CompSim vem sendo utilizado por estudantes de diferentes turmas de um curso de Técnico em Eletrônica e de um Bacharelado em Sistemas de Informação. Com o suporte de exportação da sua PHV para plataformas de hardware físico, os estudantes são estimulados a criar diferentes sistemas computacionais, tais como para: piscar leds (“árvore-de-natal”, semáforos e jogos); exibição de dados em displays (contadores numéricos, relógio e menu interativo); monitoramento (temperatura, umidade, luminosidade, proximidade e infravermelho); sinalizadores (alarme e código morse); movimento (hélices, carrinho e braço mecânico); e que interagem com outros sistemas eletrônicos tais como o próprio Arduino e sistemas digitais em FPGA. Nesse sentido, tem-se uma abordagem de projeto mista, baseada em PBD, que envolve tanto o desenvolvimento do hardware do periférico, quanto do respectivo software para controlá-lo. A Tabela 1 apresenta um comparativo entre as plataformas adotadas para implementação física de sistemas virtuais criados no simulador CompSim. Tabela 1. Comparativo entre plataformas para implementação física de sistemas virtuais criados no simulador CompSim. Métrica Arduíno UNO Arduino MEGA Intel/Altera Cyclone IV EP4CE6 13% de 32 KiB de memória flash 4% de 256 KiB de memória flash 22% de 6.272 elementos lógicos Posições endereçáveis de RAM 900 3.900 4.096 Área (cm²) ≃ 36 ≃ 54 ≃ 70 16 16 472,5 R$ 55,00 R$ 100,00 R$ 250,00 PHV (consumo médio) Frequência do oscilador (MHz) Custo médio (R$)* * Calculado a partir de consultas a diversos websites de vendas de produtos eletrônicos. De acordo com a Tabela 1, ao exportar o sistema para plataformas Arduino, o emulador consome, em média, 13% e 4% das capacidades de armazenamento das memórias flash dos modelos UNO e MEGA, respectivamente. Já no cenário com hardware reconfigurável, a PHV consome em média 22% dos elementos lógicos do FPGA (adotou-se aqui o device Intel/Altera Cyclone IV EP4CE6). Observa-se ainda que, ao utilizar as plataformas Arduino UNO e MEGA, não é possível alocar todo o espaço de endereçamento da memória RAM da PHV, dadas as restrições das capacidades de armazenamento das memórias SRAM dos microcontroladores, sendo portanto possível dispor de 900 e 3.900 posições no espaço de endereçamento da memória RAM, respectivamente. Como a SRAM da plataforma com FPGA dispõe de maior capacidade de armazenamento (33.750 KiB), é possível alocar todo o armazenamento projetado para a RAM da PHV (4096 posições endereçáveis). Ainda na Tabela 1, para a escolha da plataforma mais adequada a uma determinada aplicação, pode-se estabelecer um trade-off entre: capacidade de armazenamento da memória RAM da PHV, área física ocupada pela board, desempenho (cuja medida se baseia na frequência de operação do oscilador da board) e custo de aquisição da plataforma. A plataforma Arduino UNO apresenta menores custos de aquisição e área física, porém possui as menores capacidades de armazenamento de RAM e desempenho. Arduino MEGA, dentre as três plataformas, apresenta custo de aquisição e área física intermediários, bem como alta capacidade de armazenamento, porém apresenta baixo desempenho. Por fim, a plataforma com FPGA apresenta maiores custo de aquisição e área física, entretanto dispõe das maiores capacidades de armazenamento da RAM e desempenho. 6. Conclusões Neste artigo apresentou-se o CompSim, uma ferramenta integrada para projetos de sistemas computacionais com abordagem PBD, que utiliza simulação para validação funcional, bem como plataformas abertas de prototipação baseadas em Arduino e de hardware reconfigurável para implementação física do sistema em desenvolvimento. Os resultados mostraram que é possível estabelecer compromissos entre diferentes métricas para escolha de uma plataforma física que melhor se adeque aos requisitos de uma determinada aplicação. Os trabalhos futuros compreendem a inclusão de novos componentes de simulação à PHV, para oferecer novos cenários de projeto, e o suporte de mais plataformas de hardware, visando ampliar as opções de implementações físicas. Referências Arduino. (2018) ”What is Arduino?”, https://www.arduino.cc/en/Guide/Introduction, February. Barkalov A., Titarenko L. and Mazurkiewicz M. (2019) “Design of Embedded Systems”, In: Foundations of Embedded Systems. Studies in Systems, Decision and Control, 195. Springer, Cham. Davare, A., Densmore, D., Meyerowitz, T., Pinto, A., Sangiovanni-Vincentelli, A., Yang, G., Zeng, H. and Zhu, Q. (2007) “A next-generation design framework for platform-based design”, In: Conference on using hardware design and verification languages, 152. Esmeraldo, G. and Lisboa, E. B. (2017) “Uma ferramenta para exploração do ensino de organização e arquitetura de computadores”, In: International Journal of Computer Architecture Education, 6(1), p. 68-75. Esmeraldo, G. A. R. M., Lisboa, E. B., Mendes, C. S. R., Cartaxo, L. F., Ribeiro, C. V., Santos, P. S., Morato, L. F. B. and Nascimento, M. S. (2020) “Uma Abordagem Integrada de Hardware e Software para o Aprendizado de Subsistemas de Entrada/Saída em Projetos de Sistemas Computacionais”, In: International Journal of Computer Architecture Education (IJCAE), 9(1), p. 1-9. Esmeraldo, G. A. R. M., Mendes, C. S. R., Cartaxo, L. F. And Lisboa, E. B. (2019) "Apoio ao Aprendizado em Arquitetura e Organização de Computadores: Um Estudo Comparativo entre Simuladores Computacionais", In: Revista Tecnologias na Educação, 31, p. 1-17. Ghaffarian, R. (2016) “Microelectronics packaging technology roadmaps, assembly reliability, and prognostics”, In: Facta universitatis-series: Electronics and Energetics, 29(4), p. 543-611. Kuon, I. and Rose, J. (2007) “Measuring the gap between FPGAs and ASICs”. In: IEEE Transactions on computer-aided design of integrated circuits and systems, 26(2), p. 203-215. Lameres, B. J. (2019) “Quick start guide to VHDL”. Springer. Rajewski, J. (2017) “Learning FPGAs: Digital Design for Beginners with Mojo and Lucid HDL”. 1st Edition. O'Reilly Media. Sangiovanni-Vincentelli, A. and Martin, G. (2001) “Platform-based design and software design methodology for embedded systems”, In: IEEE Design & Test of Computers, 18(6), p. 23-33.