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
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 :)
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.
ResponderExcluirMesmo 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.
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.
ResponderExcluirAté eu que não manjo destes assuntos consegui entender seu texto! :-D
ResponderExcluirVocê explica muito bem. :-)
Que louco este negócio, muito legal. Não conhecia as FPGAs, mas fiquei curioso e entusiasmado.
ResponderExcluirRealmente 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.
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.
ResponderExcluirJeronimo
www.blogdoje.com.br
Avr, Arduino & ARM
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.
ResponderExcluirMuito 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.
ResponderExcluiro 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...
ResponderExcluirpra 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
Esse post é um terço da palestra do FISL :)
ResponderExcluirDeixa eu te perguntar uma coisa, alias, seria pra Ila :)
ResponderExcluirPor 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!)
Oi Luciano!
ResponderExcluirMe 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!
Muito bacana seu texto. Sua explicação no FISL sobre como funciona FPGAs foi muito boa.
ResponderExcluirAtualmente, 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
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.
ResponderExcluirNa época de faculdade tentei comprar uma placa da Altera com desconto mas a própria faculdade não ajudou.
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
ResponderExcluirComo sempre, didático, claro, simples e o mais importante: DIVERTIDO!
ResponderExcluirParabéns!!!
Por mais que o código VHDL faça a mesma coisa em duas FPGAs, ele pode ter uma implementação muito diferente.
ResponderExcluirComo 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
Você poderia escrever algo sobre interfaces JTAG em paralelo com este novo post?
ResponderExcluirGostei da explicação! Está bem clara.
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.
ResponderExcluirUm abraço :)