por msamsoniuk » 28 Jun 2016 13:01
acho que depende da aplicacao... eu particularmente acho dificil viver sem logica programavel: ateh dah para fazer bastante coisa com glue-logic 74xx, mas uma simples CPLD jah ajuda bastante! alem do espaco que economiza, custa preco de banana: a mais barata na digikey eh uma CPLD da lattice com 40 elementos logicos e 64 pinos, por 90 centavos de dolar. e daih as opcoes sao varias, com muitos encapsulamentos acessiveis e densidades variadas. claro, a medida que aumenta o tamanho, aumenta o preco, CPLDs quebram um galho para logicas pequenas, para logicas maiores, uma FPGA eh melhor. e se vc procurar por FPGAs na digikey, a mais barata tambem eh uma FPGA da lattice, mas com generosos 640 elementos logicos e 16 pinos por 1.30 USD. o problema eh que eh um BGAzinho... a menor opcao nao-BGA e nao-QFN eh uma FPGA da lattice com 1280 elementos logicos, 64kbit de ram e 100 pinos (LQFP) por 4.95 USD. segundo o datasheet, essas FPGAs tem uma memoria de configuracao nao-volatil programavel via SPI. alternativamente, pode ser programada a partir de uma memoria SPI ou programada via SPI, a partir de um microcontrolador. se vale a pena? depende da aplicacao:
- se a aplicacao for simples, muito provavelmente um microcontrolador simples dah conta, sendo mais simples e mais barato de usar.
- se a aplicacao for complexa, muito provavelmente um processador potente dah conta, sendo mais simples e mais barato de usar.
parece um paradoxo neh? pois eh... tem que pensar bem: um microcontrolador mais simples jah tem toda uma plataforma de desenvolvimento, tem um custo baixo e tem um monte de perifericos de todo tipo, eh soh procurar bem. embora existam FPGAs baratas, o volume de logica disponivel nao permite bater um microcontrolador tipico, precisando de uma FPGA com mais recursos, o que custa mais caro. por outro lado, no caso de aplicacoes mais complexas, muito provavelmente um processador mais potente vai ser uma melhor opcao, pq tb jah tem toda uma plataforma de desenvolvimento, tem um custo baixo e tem um monte de perifericos maneiros de todo tipo, daqueles que vc nunca vai conseguir escrever com facilidade usando uma FPGA. ok, entao em que caso se utilizaria uma FPGA? como falei, eh dificil viver sem logica programavel: se eu procurar por aqui nos sistemas que eu trabalho, tem uma FPGA em 9 de cada 10 placas. mas tambem tem um processador em 8 de cada 10 placas. e em 7 de cada 10 placas, o processador nao depende da FPGA para bootar, mas o sistema como um todo provavelmente depende da FPGA funcionando, ou seja, a FPGA eh um periferico muito importante. e se vc sair abrindo caixas por aih, eh um cenario bem tipico.
nao eh dificil entender se tiver alguns exemplos de caso... por exemplo, digamos que hipoteticamente vc trabalha na cisco e querem redesenhar uma interface WIC. eh uma interface obsoleta, mas digamos que tem clientes que ainda compram. existe nela um componente muito interessante que eh o 68LC302: ele possui um core 68000 de 32 bits, endereca alguns megabytes de memoria e possui alguns perifericos interessantes, como UARTs e controladores HDLC capazes de operar a 2Mbps, com um encapsulamento simples LQFP de 100 pinos. o componente eh bom, mas estah ficando caro (31 USD), pode descontinuar a qualquer momento e vc quer ter uma solucao para garantir o fornecimento para alguns clientes chave no terceiro mundo. colocar um ARM novo? nem pensar... alem de ter que reescrever o software todo, nao teria uma solucao confiavel para o HDLC... a solucao simples seria apelar para uma FPGA, ao menos eh o que o seu chefe diria: nao tem uma FPGA compativel pino a pino que de para trocar direto? infelizmente a resposta eh nao. uma FPGA capaz de hospedar um core 68000 de 32 bits requer uns 300 mil gates, custa 23 USD e vem com um encapsulamento BGA256. se for considerar o redesign da PCB com mais layers para acomodar o BGA, pode ficar caro demais. lembra-se: seu chefe eh americano! se for para ficar caro, melhor descontinuar o produto e perder o cliente. mas dah para melhorar isso: vc pode optar por um 68SEC000 de 10 USD, que eh o proprio core em um encapsulamento QFP-64 e uma FPGA de 5 USD com encapsulamento LQPF-100. o preco vai cair praticamente pela metade, a compatibilidade com o core original eh perfeita e nao vai precisar usar encapsulamentos muito mais complexos. em relacao ao chip original, vc tem uma solucao de 2 chips ao inves de 1... eventualmente, se no produto original tinha uma CPLD ou alguma glue-logic (sempre tem), vc consegue acomodar tudo no mesmo espaco sem aumentar o custo da PCB. o exemplo eh bem realista: acho que 8 entre 10 projetos em que vi FPGAs sendo utilizadas foram para substituir algo que jah existia antes (ASIC, DSP, CPLD, FPGA, glue-logic, etc). eventualmente, um e outro projeto com processador embarcado, mas bem raro. via regra, eh mais para substituir ASICs antigos e caros, do contrario nao eh muito competitivo.
em resumo: FPGAs tem que competir com tudo que eh tipo de coisa: ASIC, DSP, CPLD, glue-logic, microcontrolador, processador, periferico, etc. para valer a pena, tem que ser mais barato e/ou pratico, do contrario eh obvio que nao vale a pena. e quanto a bater algo que nao existe? eh mais raro ainda eh algo comecar em cima de uma FPGA, mas existe. acho que a unica aplicacao realmente inedita que eu jah vi surgir em FPGA sao interfaces ethernet de 100GbE e 400GbE: neste caso, nao existe realmente ASIC de onde copiar, o que significa que eh uma aplicacao onde nao existe limite de preco: o cliente quer, o cliente paga o quanto for necessario. um dia, vao surgir ASICs que fazem isso de forma mais barata, mas agora nao existem ainda.
tem sempre que lembrar: FPGA eh um ASIC programavel e essa flexibilidade tem um custo: existe um overhead triplo no chip: logica basica, logica de roteamento e programabilidade. se vc tem um ASIC de 70 mil gates (processador 68SEC000, por exemplo), vc vai gastar uns 70 mil gates para ter ele na FPGA, mais uns 70 mil gates para fazer o roteamento (e isso eh uma exigencia intrinsica da FPGA), totalizando uns 140 mil gates. em cima disso, vc vai ter programabilidade de tudo, o que implica em outros quase 140 mil gates, o que totaliza quase 300 mil gates. se desse para pegar o ASIC de 70 mil gates e colocar em uma FPGA de 70 mil gates, seria realmente mais barato, mas devido ao overhead, vc tem que pensar em 280 mil gates. e daih fica caro. tem como fazer? provavelmente sim! em uma FPGA de 50 mil gates que custa metade de um 68SEC000, eu consigo colocar dois processadores rodando com 4x o clock dele. isso representa um ganho de 8x na performance com 50% do custo. mas entao pq nao serve? pq nao eh compativel com o processador antigo. as coisas tem uma densidade de custo: eu posso economizar uma fortuna usando uma FPGA, mas o impacto eh gastar uma fortuna reescrevendo software.
eu tenho uma teoria sobre densidade computacional: um problema pode ser escrito de diversas formas, seja software, seja hardware, seja temporal, seja espacial... existem formas mais adequadas e menos adequadas, mas quase sempre problemas medios do mundo real podem ser escritos de diversas formas e acabam custando quase a mesma coisa. ou seja, se vc economizar no hardware, eh bem provavel que gaste mais no software e vice-versa. como no caso que citei do 68LC302 da WIC: a maior economia, em geral, nao ocorre com uma solucao extrema, mas sim com uma solucao equilibrada.