HS: Higher level Design - Abstração, please!

Higher level Design

Ah, modelagem… Cada dia mais importante, não é mesmo? Novos requisitos de projeto estão forçando os limites e modelos de nível maior (higher level models) estão aqui para aumentar nosso poder de abstração.

 

Linguagens de Descrição de Hardware (HDL) como VHDL e Verilog foram criadas para documentar e simplificar o projeto de circuitos eletrônicos com uma linguagem simulável e padronizada. Elas aumentam a produtividade de projetistas e são ativamente usadas até hoje. No entanto, a complexidade continua escalando e a produtividade não está acompanhando...

 

Novas abordagens para projetar sistemas continuam sendo desenvolvidas, tentando simplificar o desenvolvimento e reduzir o custo de projetos aumentando a produtividade. Vamos bater um papo rápido sobre esse tema em alta!

 

Abstrações de um Projeto

 

O desenvolvimento de um projeto tem várias etapas para transformar sua ideia em um sistema. O conjunto destas etapas é o que chamamos de um fluxo de projeto. Ou no caso da microeletrônica digital, o fluxo digital (digital flow)!

 

“Ideia” é a completa abstração do que você quer fazer, enquanto “Sistema” é sua implementação final. Mas tem um enorme salto entre esses dois. Por isso nós tentamos fazer essa transformação em etapas, lentamente reduzindo a abstração das nossas ideias e as tornando em um sistema de fato. Podemos chamar o resultado dessas etapas intermediárias de modelo.

 

Muito abstrato? Vamos pensar em um smartphone.

 

Você decide que vai comprar um celular novo. Enquanto procura, você nota que é muito abrangente e precisa reduzir suas escolhas. Você realmente gosta de tirar fotos, então uma boa câmera é uma restrição. Pensando no tamanho da tela, você prefere celulares menores e vai escolher um mais compacto. Você vai continuar adicionando restrições e tomando decisões até definir um único smartphone que irá de fato comprar.

 

Pegar um celular novo é parecido com o fluxo de projeto. A ideia inicial é muito ampla uma vez que não está considerando muitas restrições. É muito abstrato e, portanto, tem muitas possíveis implementações. Isso é o que chamamos de um vasto espaço de design (design space). Nós criamos modelos do resultado final, iterativamente reduzindo as opções de design com restrições e escolhas até alcançarmos a implementação final. Isso nos permite explorar melhores algoritmos e arquiteturas para o nosso projeto [1].

 

Figura 1 - “Gap” de abstração aumentando com higher-level models (Fonte: [4]).

 

Modelos de um Circuito Digital

 

Esse conceito de abstrair um sistema é presente em muitas e muitas áreas, incluindo eletrônica. Vamos pensar no fluxo digital: o que queremos é transformar funcionalidade (alto nível de abstração) em um desenho com um conjunto de formas retangulares (baixo nível de abstração). Se você não estiver acostumado com eletrônica digital, eu posso parecer louco, mas deixa eu explicar…

 

Um circuito integrado (CI ou IC em inglês) é um conjunto de algumas camadas de metal com formatos. Componentes são organizados formando conexões e dispositivos, como transistores e diodos. Para conseguir isso, nós desenvolvemos um layout, um modelo com várias formas retangulares representando o CI. Esse desenho é feito a partir de um Gate-Level Netlist, um modelo que lista todas as instâncias e interconexões dos componentes de um circuito, como portas lógicas. Essa netlist é gerada pela síntense lógica a partir de um modelo RTL definindo blocos, interfaces e o comportamento do circuito. Viu? Funcionalidade para formas retangulares!

 

Modelos RTL foram de fato um grande passo de abstração para projetar circuitos digitais. Antes deles, precisávamos montar o circuito usando apenas portas lógicas. Agora, com VHDL e Verilog, nós os descrevemos com instruções como condicionais e operadores aritméticos. No entanto, quando a complexidade de um projeto aumenta, armas ainda mais poderosas são necessárias para fazer o trabalho de forma mais eficiente.

 

Modelos com um nível maior de abstração (higher-level models) são usados normalmente em projetos mais complexos a ajudam MUITO a entender o comportamento do sistema. Como são mais abstratos, criar eles é mais fácil e rápido comparado à implementação do circuito de fato. Então você acaba aprendendo rapidamente sobre todo o projeto botando a mão na massa. Nada mal, hein?

 

Um exemplo rápido: vamos supor que esteja desenvolvendo um algoritmo de ordenação (sort). Eles são muito usados como exercícios em aulas introdutórias de programação, onde usamos linguagens como C ou Python. Mas o circuito deles não é tão simples de modelar em VHDL ou Verilog. Então poderíamos fazer um higher-level model em C explorando algoritmos de ordenação antes de criar nosso modelo RTL em Verilog, por exemplo.

 

Maiores níveis de abstração também ajudam na estratégia de verificação. Ela permite que metodologias e padrões de projeto (design patterns) sejam usados, liberando um potencial incrível para ambientes de verificação complexos. É só ver o SystemVerilog e UVM! Não só isso, modelos do sistema podem ser usados como geradores de referência para seu testbench [1] enquanto valida seu RTL, por exemplo.

 

Figure 2 - Testbench usando modelo como gerador de referência.

 

É até interessante para o cliente! Modelos pode agir como especificações funcionais executáveis [1]. Mapeando a especificação em software permite simulações no início do fluxo de projeto. Isso ajuda a fazer uma checagem do que foi entendido pelos projetistas contra o que foi pedido pelo cliente. Bem ganha-ganha!

 

Algumas linguagens comuns que eu vejo sendo usadas na industria são Matlab/Octave, C, SystemC e Python. Para ser sincero, você pode usar a que preferir, mas essas eu vejo com mais frequência.

 

Desafios de design com nível maior de abstração

 

Lembra que projetos são basicamente um conjunto de passos para criar modelos progressivamente menos abstratos? Usando níveis ainda mais altos de abstração para seu projeto, a distância entre você e seu sistema final aumenta. E isso traz alguns problemas...

 

Abstração aumenta o espaço de design. Isso significa menos limitações, gerando mais possíveis implementações. A exploração dessas soluções pode ser bem desafiadora e requer experiência do projetista. Essa análise leva tempo e demanda mais simulações usando o(s) modelo(s).

 

A implementação do sistema não é a única atividade afetada. A verificação também fica mais complexa quando trabalhamos com níveis maiores de abstração. Casos de uso com poucas restrições podem fica muito abrangentes, gerando excessivos casos de teste. O desafio de desenvolvê-los também demanda tempo e experiência.

 

O questão mais sensível (em minha opinião) é como integrar essas abstrações em nosso fluxo digital. Ferramentas comerciais estão disponíveis para transformar RTL em netlist e netlist em layout, necessitando apenas algumas configurações do usuário para gerar exatamente o circuito desejado. Novas tecnologias não terão esse suporte, o que força desenvolvedores a criarem jeitos de inseri-la no fluxo com baixo esforço do usuário. Ao mesmo tempo, deve permitir flexibilidade suficiente para modelar qualquer circuito que precisemos. ISSO é muito difícil.

 

As abstrações padrões que temos hoje em dia em projetos de CI digital estão começando a não funcionar tão bem para a complexidade que estamos atingindo. Além disso, o número de pessoas envolvidas e o tempo sendo gasto em projetos continuam crescendo. Em situações como essa, investimentos e pesquisas aparecem tentando atacar esses problemas.

 

Figura 3 - Challenge accepted!

 

Um exemplo de investimento é da U.S. Defense Advanced Research Projects Agency (DARPA), que deu à Electronics Resurgence Initiative (ERI) um impulso de 1.5 bilhão de dólares ao longo de 5 anos. E grande parte dele é para “mudar como chips são projetados atualmente”. O objetivo é aumentar a produtividade e reduzir o número de projetistas necessários [2]. Se você quer trabalhar com microeletrônica, se prepare para notícias sobre isso em breve...

 

Diretor Bill Chappell da ERI da DARPA teve algumas ponderações interessantes em sua entrevista. Eletrônica está alcançando uma barreira física e os custos só aumentam. Coisas avançadas como arquiteturas reconfiguráveis e “hardware definido por software” estão sendo exigidas pela indústria. Com o passar do tempo, times menores devem ser capazes de desenvolver projetos bem maiores [2].

 

O que está acontecendo?

 

A medida em que integramos mais e mais funcionalidade em único chip com prazos curtíssimos, o usos de design em níveis maiores de abstração aparenta ser cada dia mais importante. E com eles, vêm os desafios que discutimos. Muitos pesquisadores estão desenvolvendo metodologias de higher-level modelling para juntar os benefícios da abstração e resolver essas complicações. Vamos falar um pouco de alguns exemplos com que tenho trabalhado.

 

Figure 4 - Logo of Chisel (UC Berkeley).

 

Chisel é uma Linguagem Embutida de Domínio Específico (Embedded Domain-Specific Language ou EDSL) de Scala da University of California, Berkeley. Ela foi desenvolvida como uma nova HDL, mais orientada à objetos e com muitas características interessantes. Ele tem um poderoso mecanismo de geração de circuito e atalhos para projetar o circuito de forma mais abstrata. Ela consegue gerar códigos Verilog para serem usados na fase de back-end digital (fácil de integrar no fluxo digital!). Não só isso, também consegue gerar simulações rápidas e “cycle-accurate” em C++ , bom para verificação [3].

 

Chisel já traz mais abstração comparando com seus velhos amigos Verilog e VHDL. Ela simplifica a complexidade enquanto mantem um estilo bem familiar. I brinquei um pouco com ela e gostei! Mas existem outras propostas mais “selvagens” e ambiciosas. É o caso das abordagens formais para projetar sistemas e eu trago ForSyDe [4] para representar essa área.

 

Figure 5 - Logo of ForSyDe (KTH).

 

Formal System Design (ForSyDe) é uma metodologia e uma EDSL de Haskell to Royal Institute of Technology, Estocolmo. Uma vez que os sistemas de hoje em dia são complexos e heterogêneos, custos de verificação e abstração do design continuam crescendo. ForSyDe propõe uma mistura de Modelos de Computação (Models of Computation ou MoC) para projetar o sistema em um nível muito alto de abstração. Usando processos de síntese “correta por construção”, ela reduz o “gap” de abstração entre modelo e implementação [4].

 

Chisel quer dar uma nova cara a modelagem RTL e ForSyDe quer mudar o projeto de sistemas como um todo. Eles tem objetivos diferentes e mostram a abrangência dessa “corrida de abstração”. Eu tenho mexido especificamente com esses, mas existem vários outros projetos em andamento.

 

Conclusão

 

Custo, prazo e recursos de projetos de sistema estão altos demais. Eles precisam ser simplificados e o desenvolvimento de produtos eletrônicos se inclui nisso. Esse cenário está gerando muitas pesquisas e investimentos para alcançar esse objetivo. Grandes mudanças estão vindo...

 

Abstrações mais poderosas são a aposta para resolver esse problema e higher-level modelling vai fazer sua parte. E uma nota pessoal: linguagens funcionais estão aparecendo com mais frequência para mim. Me parece que elas podem ser parte dessa evolução.

 

Vai se juntar nessa corrida de abstração? 🙂

 

Perguntas? Enviem para [email protected] Estou aqui é para ajudar! Falando sobre ajudar... Obrigado:

 

  • José Edil Guimarães (Professor Adjunto, Engenharia Elétrica, UnB)
  • Marcos Hervé (Projetista de CI digitais, Chipus Microeletrônica)

 

Vocês são demais! 😉

 

Referências

 

[1] M. Keating, P. Bricaud, ‘Reuse Methodology Manual For System-on-a-Chip Designs’, 3rd ed. Kluwer Academic Publishers, 2002

[2] S. K. Moore, ‘DARPA Plans a Major Remake of U.S. Electronics’, IEEE Spectrum, 2018. [Online]. Available: https://spectrum-ieee-org.cdn.ampproject.org/c/s/spectrum.ieee.org/tech-talk/computing/hardware/darpas-planning-a-major-remake-of-us-electronics-pay-attention.amp.html. [Accessed: Out. 19, 2018].

[3] J. Bachrach, H. Vo, B. Richards, Y. Lee, A. Waterman, R. Avižienis, J. Wawrzynek, K. Asanovic, ‘Chisel: Constructing Hardware in a Scala Embedded Language’. EECS Department, UC Berkeley, 2012

[4] I. Sander, ‘System Modeling and Design Refinement in ForSyDe’. Department of Microelectronics and Information Technology, Royal Institute of Technology, 2003.

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Tiago Vidigal
Projetista de CIs Digitais na Chipus Microeletrônica, gero conteúdo e dou cursos como hobbie na Kurios. Formado em Engenharia da Computação (UnB), atuo na área desde 2015 e sou completamente apaixonado por sistemas digitais!

Deixe um comentário

avatar
 
  Notificações  
Notificar