Eu tenho que escolher entre um curso sobre microcontroladores avançados e um curso sobre FPGA avançados.
Eu tive cursos introdutórios em ambas as disciplinas, e o que me preocupa agora é que eu já sou muito bom no desenvolvimento de firmware para microcontroladores, e não consigo ver quais produtos / projetos eu posso fazer com um FPGA e não com um microcontrolador / DSP.
Você pode criar alguns aplicativos / produtos / projetos em que um microcontrolador ou DSP não seria suficiente e por quê?
Câmeras? Câmeras de alta velocidade? Processamento de imagem em alta velocidade?
microcontroller
fpga
dsp
Jolle
fonte
fonte
Respostas:
Veja também FPGA's vs Microcontrollers
Processamento de imagem ou vídeo em alta velocidade é um bom exemplo. Ou processando 'imagens' que não são imagens ópticas diretas, como sistemas baseados em radar ou laser.
A principal coisa a considerar são os requisitos de taxa de transferência e latência . Um microcontrolador pode atender uma interrupção (aproximadamente) uma vez por microssegundo. Só pode atender uma interrupção de uma vez. Se você precisar processá-lo de maneira elaborada, isso limita a quantidade de serviços em um determinado momento.
Com um FPGA, você geralmente pode responder a um evento de entrada imediatamente (bem, no próximo ciclo do relógio). Você pode ter muitas unidades de processamento em paralelo. Se você sabe que seu filtro leva 20 ciclos, isso é totalmente independente de qualquer outra coisa acontecendo.
A computação intensiva de números altamente paralelos funciona melhor em FPGAs, especialmente se houver dependências de dados complexas. No entanto, eles não têm muita memória integrada; você pode adicionar um pouco de DRAM ao lado, mas ao custo da latência.
Você também pode querer um para os periféricos ou falar sobre um barramento digital de alta velocidade. Você não pode conectar ou desconectar HDMI em um microcontrolador. Você não pode construir uma placa PCI em torno de uma.
fonte
Bem, eu faço processamento em tempo real de vídeo HD em FPGAs. Parte do que faço pode ser feita em um chip GPU, mas não em um microcontrolador ou DSP. O FPGA é mais flexível.
Muitos sistemas combinam FPGAs e MCUs / DSPs para obter o melhor dos dois mundos. Um projeto em que posso estar trabalhando em breve envolve o reconhecimento de objetos em um fluxo de vídeo. As etapas preliminares (remoção de ruído, normalização, detecção de borda etc.) são melhor executadas no FPGA, mas a lógica de nível superior que decide quais recursos de baixo nível são partes dos objetos reconhecidos é melhor executada em uma CPU ( dentro ou fora do FPGA).
Por fim, você desejará estar familiarizado em ambas as áreas, portanto, é realmente apenas uma questão de qual você faz primeiro.
fonte
Em resumo, os FPGAs são bons quando você precisa executar um pouco de processamento em muitos dados, e as CPUs são boas onde você precisa executar muito processamento em poucos dados.
Um fluxo de vídeo HDMI é um monte de dados. Isso pode ser feito por uma CPU, GPU ou ASIC no caso geral de vídeo, mas se você precisar fazer um pouco de trabalho nele (adicione uma sobreposição, por exemplo), poderá escolher um FPGA.
Um fluxo de áudio não contém muitos dados, mas se você precisar executar um reconhecimento de fala, preferirá uma CPU a um FPGA.
Embora você possa executar rádio definido por software em uma CPU, você pode lidar com uma porção muito maior do espectro com um FPGA com mais facilidade do que em uma CPU.
Embora você possa criar um controlador de teclado a partir de um FPGA, um microcontrolador será mais barato, consumirá menos energia e mais fácil de desenvolver software avançado de teclado (macros, funções de jogo, remapeamento) para um FPGA.
É claro que você pode fazer qualquer coisa em qualquer uma delas, com vantagens e desvantagens, mas se você for proficiente em ambas, poderá ponderar as vantagens com mais competência e evitará o custo mais alto das peças ou do tempo de desenvolvimento em que incorreria escolhendo o solução errada para um determinado problema.
fonte
Geralmente, você usa um microcontrolador quando ele pode fazer o trabalho. Um microcontrolador executa a lógica executando instruções seqüenciais.
Um FPGA executa a lógica porque seus portões de hardware são logicamente conectados para isso. Isso significa que ele pode fazer as coisas muito mais rapidamente, e várias dessas coisas ao mesmo tempo. Geralmente é mais complicado e difícil criar e depurar a mesma lógica em um FPGA e em um micro; portanto, você usa um FPGA quando a velocidade extra e a baixa latência são necessárias.
fonte
Uma aplicação que ainda não vi mencionada é a engenharia microeletrônica ou o design dos próprios chips MCU / CPU / GPU / ASIC. Esses chips geralmente são prototipados, projetando-os em HDL e depois implementados em um FPGA. Isso os torna mais fáceis, baratos e rápidos de testar e modificar antes de finalmente usar o HDL para criar o layout necessário para a produção do silício real no processador ou ASIC.
Um comentarista mencionou isso na forma de chips de núcleo mole (embora eles tenham cometido um erro de digitação e os tenham chamado de chips de núcleo de classificação). Você pode pegar um ARM / 8051 / etc. periféricos de núcleo macio e quaisquer periféricos de núcleo macio que você precisa e, essencialmente, projeta seu próprio microcontrolador personalizado implementado em um FPGA. Então, supondo que você tenha os recursos, você poderá fazer isso em seu próprio microcontrolador.
Se esse tipo de aplicativo é algo que lhe interessa, dê uma olhada no OpenCores para ver o que é possível.
fonte
Construímos instrumentos de radar (principalmente abertura sintética) que usam FPGAs extensivamente. Não acho que os requisitos de tempo apertado possam ser atendidos facilmente por um microcontrolador. Acredito que muitos instrumentos LIDAR também usam FPGAs.
Basicamente, qualquer coisa em que os requisitos de tempo estejam nos nanossegundos precisa de FPGAs ou ASICs.
fonte
Um microcontrolador pode processar dados apenas sequencialmente, uma instrução de cada vez; portanto, se você tiver uma operação muito cara, convém tornar a computação paralela de alguma forma. O processamento de áudio / vídeo é um bom exemplo disso. Para atender a essa necessidade, foram desenvolvidos processadores de sinais digitais que podem executar determinadas tarefas em paralelo, mas eles não são generalizados o suficiente para implementar qualquer algoritmo arbitrário; portanto, esses processadores funcionarão para muitas tarefas, mas não para todas as tarefas. Um FPGA é uma peça de hardware generalizada. Como você pode definir, essencialmente, o design de sua própria peça de hardware e, em seguida, fazer o download para o FPGA, ele pode implementar qualquer algoritmo imaginável, desde que tenha recursos suficientes para isso.
Um exemplo concreto: Ken Perlin sugere uma implementação de hardware de seu algoritmo de ruído simplex. Isso pode ser feito relativamente rápido com a CPU ou microcontrolador tradicional, mas pode ser super rápido com o hardware personalizado. Como duvido que um DSP funcione para isso, a coisa mais fácil seria um FPGA. A maneira mais difícil, é claro, seria fabricar um chip físico real para você, o que é incrivelmente caro. http://www.csee.umbc.edu/~olano/s2002c36/ch02.pdf
fonte
Uma resposta que não está aqui é a aquisição de dados. Se você deseja usar um ADC para amostrar um sinal (por exemplo, um sinal de RF) a 200 MHz e processá-lo, um microcontrolador simplesmente não será capaz de processar os dados com rapidez suficiente. Uma placa FPGA DAQ típica recebe, filtra, executa um DDC e passa os dados de RF para uma CPU com uma frequência muito mais baixa. Os FPGAs também podem executar FFTs e operações de canalização no espectro de RF.
Outra aplicação é o roteamento de pacotes, por exemplo, um dispositivo que gerencia uma (ou várias) interfaces Ethernet XAUI operando a 10 Gb / s cada. Esses FPGAs filtram e agendam filas de pacotes para diferentes destinos. Um microcontrolador / CPU convencional não seria capaz de lidar com a largura de banda dessas interfaces.
fonte
A razão fundamental pela qual microprocessadores e microcontroladores podem fazer tanto com uma quantidade comparativamente pequena de circuitos é que, se o micro precisar executar apenas alguns cálculos complexos 1.000 vezes por segundo e levar 20 microssegundos (o micro estará trabalhando no cálculo). % do tempo), a maior parte do hardware que seria usado para esse cálculo pode ser usada para outros fins nos 98% restantes. Assim, os microcontroladores podem usar uma quantidade modesta de hardware para executar um número muito grande de funções distintas, desde que as funções não sejam necessárias simultaneamente.
A quantidade de circuitos em um FPGA geralmente será comparável à de um microcontrolador (os FPGAs variam em tamanho em algumas ordens de magnitude, assim como os microcontroladores, mas os intervalos se sobrepõem). Ao contrário de um microcontrolador, no entanto, cujos elementos do circuito serão conectados de maneira a facilitar o uso para muitas tarefas não simultâneas, um FPGA será projetado para dedicar partes de seus circuitos a várias tarefas "em tempo integral". Se alguém quiser que um microcontrolador conte o número de pulsos que ocorrem em cada uma das 100 entradas, seria limitado a contar pulsos lentos o suficiente para que o controlador pudesse manipulá-los seqüencialmente, individualmente - se todas as entradas pudessem pulsar independentemente, mesmo um controlador rápido teria problemas para contar mais do que alguns milhares de pulsos por segundo por entrada. Por contraste,
fonte
O FPGA implementa um circuito lógico de hardware ou um bloco funcional; em teoria, ele pode implementar o que você quiser. E esses blocos estão sendo executados simultaneamente, improvável um MCU convencional executando a programação linha por linha. Portanto, o desempenho do FPGA é muito melhor que o MCU, mas é necessário conhecer a linguagem HDL ou VHDL que difere da linguagem de programação em termos de sintaxe, estilo e conceito.
Como eu disse, ele pode implementar qualquer coisa, portanto, não é surpresa que você possa implementar um MCU com bloco funcional para facilitar seu desenvolvimento com alto desempenho. Existe um bloco funcional fornecido pelo Xilinx para você incorporar o MCU, chamado Microblaze. Portanto, você também pode executar o programa do sistema incorporado no FPGA.
Por exemplo, você gostaria de implementar um equalizador de áudio programável e a parte mais pesada da computação, como a FFT, pode ser implementada por bloco funcional, em vez de executar o cálculo do software. Mas algumas das tarefas simples, como LCD, interface de E / S, podem ser realizadas pelo MCU. E o FPGA permite que você tenha blocos funcionais de sistema e hardware incorporados ao MCU ao mesmo tempo.
fonte