ateh onde sei, vc escolhe a ferramenta de acordo com a familia que vai usar:
- vivado para familia 7 e acima: FPGAs kintex, artix, zinq, virtex-7, ultrascale diversas e futuras familias.
- ISE para as familias 6 a abaixo: spartan-2, spartan-3, spartan-6, virtex diversas (menos a 7), CPLDs e familias antigas
ambos sao free e, em essencia, ISE eh para coisa miuda, barata e antiga, vivado para coisas graudas, caras e novas.
em termos de escala, a comparacao entre uma XC2C32 (uma CPLD tipica) e uma XC3S50A (a menor FPGA) eh incrivelmente injusta... pensemos em aplicacoes praticas bem simples e didaticas:
- UART: consome uns 44 ou 48 flip-flops... pelo menos 8 para cada baudrate generator, mais 8 para buffer de dados em casa sentido, mais 4 para cada maquina de estado contar os bits. jah sao 40, mais um par para tirar meta-estabilidade do RX e um e outro para estado da interface... uns 44. na CPLD nao cabe, pq ela tem apenas 32 macrocelulas (1 flip-flop/macrocelula). assim, uma XC9572 seria muito melhor, pq tem 72 macrocelulas e, portanto, uma UART consumiria mais ou menos metade da logica. no caso de uma XC3S50A, embora seja a menor FPGA da xilinx, tranquilamente caberiam umas 30 UARTs, isso pq ela tem 704 slices (2 flip-flops/slice). vem sempre entao aquela comparacao: um microcontrolador nao daria conta melhor? no caso da CPLD, sim. no caso da FPGA, dificil achar algum com tantas UARTs. mas se vc nao precisa de tantas, a FPGA entao eh um desperdicio.
- PWM: consome uns 32 flip-flops... pelo menos 16 para um contador e 16 para o valor que comuta de 0 para 1. cabe na tampa em uma XC2C32, mas se vc for registrar saidas diferenciais, jah seriam 34. e daih uma XC9572 jah seria mais jogo, pq acredito que caberiam 3 x PWM. o que nao eh muito se considerar que tipicamente qualquer microcontrolador barato tem pelo menos 2 canais PWM. agora, chutando o pau da barraca com uma XC3S50A e seu pequeno mar de flip-flops (pequeno, visto ser a menor FPGA)... seriam provavelmente 60 canais nao diferenciais. existem flip-flops para muito mais, mas essa FPGA pequena nao possui IO suficiente para mais que isso e vc precisa pelo menos de uma interface SPI para programar os canais PWM. nesse caso, novamente, nao tem microcontrolador com essa capacidade. mas claro, se vc precisa de 2 ou 3 canais PWM, a FPGA entao eh um desperdicio.
a coisa eh meio ironica: a CPLD eh barata, mas a capacidade eh sempre meio que na estica e vc tem que se esforcar para conseguir fazer as coisas caberem nela. o lado bom eh que vc vai valorizar o espaco e vai fazer as coisas de forma economica e eficiente. a FPGA, por outro lado, eh mais cara, mas tem 40x mais capacidade logica. isso sem falar em *recursos magicos*, como geradores de clock, memorias de alta velocidade, multiplicadores em hardware, etc. na boa, vale cada centavo! hehehe
bom, eu diria que vale a pena aprender na CPLD, mas ela nao vai muito longe e qualquer microcontrolador barato acaba fazendo mais. para ir alem do feijao com arroz que jah existe no mercado, tem que ir pensando em uma FPGA no futuro!
