terça-feira, 13 de outubro de 2009

Stallman e o hardware livre

Hoje em dia, é difícil achar quem trabalhe com computação e não saiba quem é o Richard Stallman. A primeira vez que vi o nome dele foi lendo os sources do bison, e não demorou muito pra descobrir que ele era o cabeça por trás de vários softwares que eu usava, como o gcc e o emacs. E não apenas isso, ele também foi o criador do conceito de software livre e do projeto GNU.

Mas mesmo com todo o seu talento, o Stallman não escapa de ser uma espécie de Michael Jackson da computação. Embora seja inegável que ele é um gênio que influenciou toda uma indústria, também não há como negar que ele não é exatamente um modelo de conduta. Na verdade, conta-se que pessoalmente ele é bastante desagradável, e sua higiene pessoal é de deixar o Cascão com inveja.


Além disso, de vez em quando o Stallman também vacila. Por exemplo, em 1999 perguntaram pra ele se algum dia seria possível ter hardware livre, assim como havia o software livre. Ele respondeu com um artigo sobre o assunto, sendo que em um dado ponto ele escreve que "você não pode baixar hardware pela net, e nós não temos copiadores automáticos para hardware (talvez quando tivermos nanotecnologia)".

O vacilo do Stallman é que você não precisa de nanotecnologia, desde 1985 já existe uma tecnologia que permite o surgimento do hardware livre: a FPGA.

A FPGA é um chip reprogramável. Ela sai da fábrica vazia, mas você pode reprogramá-la pra virar, por exemplo, uma CPU. Se você mudar de idéia, pode reprogramá-la mais uma vez, e ela vira uma memória. Ou um processador de vídeo, ou um controlador de rede, o que der na telha!

Pra entender como isso é possível, vamos voltar lá pra linha de produção. Chips são feitos em um substrato de silício apelidado de bolacha. O mapa com os circuitos que compõem o chip é impresso sobre a bolacha com um processo químico parecido com a revelação de filmes fotográficos. A parte importante é notar que esse processo é uma espécie de carimbo: você faz centenas de cópias iguais do circuito sobre a bolacha, e, depois de carimbado, não dá mais pra mudar o que foi impresso.


Bolacha (wafer)

Mas se o circuito é carimbado e não pode ser mudado, como podemos reprogramar o hardware? Há pelo menos duas maneiras de fazer isso. Para exemplificar, vamos imaginar que queremos implementar uma função booleana qualquer, como a função abaixo:


S = ((not A and B) or (A and not B)) and C

Esse é um circuito combinatório simples, então podemos levantar a tabela da verdade dele:


Agora fica clara qual é a sacada, basta interpretar esse circuito como se fosse uma memória! No caso, a tripla ABC é como se fosse um bus de endereçamento para oito posições de memória, onde cada palavra tem um único bit: a saída S. Memórias reprogramáveis nós sabemos fazer, certo? Nosso circuito reprogramável pode ser implementado como uma simples memória RAM.

A segunda maneira é lembrando que existem portas lógicas que exibem universalidade. Aquela mesma equação booleana pode ser implementada usando apenas portas NAND:


Novamente, a idéia se apresenta. Podemos carimbar na bolacha um monte de portas NAND, e, para reprogramar basta mudar a conexão entre elas (por exemplo, usando uma RAM que funcionaria como se fosse um array de ponteiros).

As FPGAs utilizam uma mescla dos dois métodos. Elas são formadas de uma série de elementos repetidos, chamados CLB (configurable logic block). No modelo que eu uso em casa, cada CLB é formado de quatro slices, e esse aqui é o conteúdo de um terço de cada slice:


Parte de um slice da Spartan 3E

Os slices são levemente mais complicados que uma porta NAND, mas isso permite que você consiga aproveitar melhor a arquitetura. Às vezes, dá pra colocar um bom pedaço de lógica em um único slice. Além disso, se você prestar atenção no slice, tem um bloco chamado LUT (look-up table), que é essencialmente aquela RAMzinha do primeiro método.

Para completar, no canto direito tem um flip-flop tipo D. Até agora, estávamos falando apenas de circuitos combinatórios, mas FPGAs podem usar esses flip-flops para fazer circuitos sequenciais também. Alguns modelos de FPGA vão além, e possuem até mesmo DACs e PLLs que podem ser usados para sintetizar circuitos analógicos.


A FPGA também tem uma outra vantagem, que pra mim é fundamental. Embora eu adore eletrônica, sou muito ruim para soldar componentes (nunca aprendi como fazer isso tendo só dois braços). Mas as FPGAs não são programadas com soldas, ao invés disso, elas são programadas com descrições em texto, muito parecidas com as linguagens de programação. Após finalizar a descrição, que é uma espécie de código-fonte do hardware, você usa um compilador e faz upload para a placa, sem precisar de estanho e nem de ferro de solda.

E melhor, essas descrições em texto podem ser compartilhadas como qualquer arquivo texto. Aplique nelas uma licença apropriada, e temos então o hardware livre que queríamos! Hoje em dia, existem até repositórios de hardware livre, como o Open Cores, de onde você pode baixar de tudo, desde clones do Z80 até aceleradores de H264.

Se você ainda não conhecia FPGAs, deve estar bem curioso pra saber como você pode brincar com isso. No próximo post eu vou fazer um pequeno tutorial de como criar um circuito do zero, então fique ligado no blog :)

18 comentários:

  1. Poxa, FPGAs são muito interessantes. Eu já tinha usado em arquitetura de computadores e gostei bastante justamente por ser muito melhor que ficar montando protoboard aahahaha.

    Mesmo assim o texto esclareceu bem o método de fabricação de um FPGA que era algo que sempre me deixou curioso mas eu nunca fui atrás com muito entusiasmo.

    ResponderExcluir
  2. Você provavelmente conhece o Arduino... enfim, é uma referência legal pros seus (futuros) artigos, pra quem quiser um nível de abstração ainda maior.

    ResponderExcluir
  3. Até eu que não manjo destes assuntos consegui entender seu texto! :-D

    Você explica muito bem. :-)

    ResponderExcluir
  4. Que louco este negócio, muito legal. Não conhecia as FPGAs, mas fiquei curioso e entusiasmado.
    Realmente protoboard era um saco, ainda mais pra transportar aquele trem sem desmontar, tinha que botar dentro da caixa de sapato e tomar um cuidado danado pra andar com aquele trem dentro do ônibus. O povo devia usar este trem na aula de eletrônica digital, seria bem mais prático.

    ResponderExcluir
  5. Hardware livre não é somente "baixar" um codigo de programação para uma FPGA. É sobre divulgar o esquema de construção, os componentes usados, como a mecanica e a embalagem foram concebidas e usando as licenças adequadas, permitir a sua replicação e adaptação. O Arduino é um dos exemplos bem sucedidos de open-hardware.
    Jeronimo
    www.blogdoje.com.br
    Avr, Arduino & ARM

    ResponderExcluir
  6. Mas você pode pegar uma descrição VHDL e mandar fazer diretamente um ASIC com ela. Fica caro, mas só porque é livre não quer dizer que seja barato.

    ResponderExcluir
  7. Muito bacana esse post! Quando eu fiz o projeto de formatura na Poli, todo o mundo pedia para o Guido Stolfi soldar as FPGAs por medo de estragar o chip :-) Eu lembro que um problema para ter um sistema totalmente livre era que os fabricantes não revelavam o protocolo para carregar a descrição no chip. Mesmo que você fizesse o projeto em plataforma livre, era preciso usar o programa do fabricante para transferi-lo para a FPGA. Não sei o quanto isso mudou nos últimos anos.

    ResponderExcluir
  8. o Stallman falou a mesma coisa qdo eu perguntei pra ele qual seria a próxima "open source" thing... ele falou q nada mais seria open source, pq só software é de graça...

    pra rodar software vc precisa investir num computador, senão de nada adianta o seu software.

    Pra fazer um protótipo mecânico, vc precisa investir em algo, talvez uma RepRap da vida...

    pra usar VHDL, vc precisa de um kit ou uma gravadora (fora o chip FPGA)

    Enfim... Stallman == meio babacão, mas com razão, já q o movimento open hardware (numa visão maior q VHDL) ainda tem poucos adeptos..

    E só quero lembrar q continuo esperando a palestra do FISL...

    Abraços
    Pirolla

    ResponderExcluir
  9. Esse post é um terço da palestra do FISL :)

    ResponderExcluir
  10. Deixa eu te perguntar uma coisa, alias, seria pra Ila :)

    Por acaso se baseou no Cascão da turma da Mônica Jovem? Se não se baseou, saiba que ficou muito, mas MUITO parecido o desenho! (sim, eu leio e estou colecionando, tô achando um barato!)

    ResponderExcluir
  11. Oi Luciano!

    Me inspirei no Cascão da Turma da Mônica Jovem sim! se eu fizesse ele criança achei que ia destoar... :-P

    Também estou gostando da nova série!

    ResponderExcluir
  12. Muito bacana seu texto. Sua explicação no FISL sobre como funciona FPGAs foi muito boa.

    Atualmente, tem um pessoal (inclusive eu) que tem usado FPGAs em Computação de Alto Desempenho, pois em alguns casos é melhor adequar um hardware a um algoritmo do que um algoritmo a um conjunto de instruções(CPU).

    Estou esperando o tutorial.
    []s

    ResponderExcluir
  13. Você poderia dar uma dica de placa de desenvolvimento ou quem sabe o circuito pra montar. Essas placas estão com o preço um pouco salgado.

    Na época de faculdade tentei comprar uma placa da Altera com desconto mas a própria faculdade não ajudou.

    ResponderExcluir
  14. Há algum tempo atrás eu procurei informações sobre o funcionamento mais "underground" da FPGA (este papo sobre slices e LUT) e nunca achei nada "inteligível e deglutível", basicamente este post explicou tudo, parabéns

    ResponderExcluir
  15. Como sempre, didático, claro, simples e o mais importante: DIVERTIDO!
    Parabéns!!!

    ResponderExcluir
  16. Por mais que o código VHDL faça a mesma coisa em duas FPGAs, ele pode ter uma implementação muito diferente.
    Como nos pinos não utilizados o compilador pode mandar a FPGA escrever qualquer lixo (pode ser útil para diminuir o número de LEs utilizadas), o mesmo código gera circuitos diferentes.

    Eu fiz um projeto em que um LED da placa onde a FPGA estava ficava acesso num programa que não usava o pino onde ele era conectado. Então acho até que dá pra dizer que harware não se baixa pela internet :)

    De qualquer maneira, não gosto do Stallman por mais que eu use vários softwares escritos parcialmente por ele.

    Por fim, ótimo texto. Abraços

    ResponderExcluir
  17. Você poderia escrever algo sobre interfaces JTAG em paralelo com este novo post?
    Gostei da explicação! Está bem clara.

    ResponderExcluir
  18. Tomei um susto quando vi um circuito desenhado. É justamente o assunto que estou aprendendo na faculdade (flip-flop). Acho que isso foi o que me fez ficar ligado no post inteiro. Pra mim ainda é dificil entender os circuitos que vejo na aula (tô cursando ciência da computação). Confesso que fiquei com medo depois que vi a tal Parte de um slice da Spartan 3E.

    Um abraço :)

    ResponderExcluir