Se você olhar através de projetos HDMI em um site como o hackaday , verá que praticamente todos envolvem um FPGA. Acho que não vi nenhum projeto DIY com saída HDMI que não tenha usado um FPGA.
Mas por que? Até onde eu sei, os FPGAs são caros, entre US $ 70 e US $ 100. Compare isso com um Raspberry Pi por US $ 35, que pode fazer coisas muito mais complexas e produzir saída HDMI. Por que um ARM não é usado? Ou um microcontrolador ainda mais barato?
No caso de atualizar o vídeo em sistemas de jogos antigos, a lógica não deve ser mais complicada que um microcontrolador barato pode suportar , mas eu continuo vendo o HDMI como um obstáculo impossível apenas enfrentado pelos FPGAs.
Respostas:
Basicamente, nenhum microcontrolador, mesmo o pi framboesa, é rápido o suficiente. O raspberry pi possui uma GPU integrada que gera a saída HDMI. Além disso, a capacidade de E / S do raspberry pi é incrivelmente limitada - a interface de maior largura de banda, além do HDMI, é USB. Muitos dos projetos de conversão HDMI envolvem pegar outro fluxo de vídeo em um formato estranho e retrabalhá-lo em algo que possa ser enviado para uma HDTV padrão por HDMI. Isso requer alguma lógica de interface personalizada para ler o sinal de vídeo, lógica de processamento de sinal para reformatá-lo, lógica de codificação HDMI TMDS e serializadores de alta velocidade para realmente direcionar a porta HDMI.
Trabalhar com streaming, vídeo não compactado e de alta definição requer o processamento de uma grande quantidade de dados, algo que não é viável em uma CPU de uso geral. Um sinal de vídeo 1080p a 30 quadros por segundo possui cerca de 62 milhões de pixels por segundo. O raspberry pi roda a 700 MHz, então você tem, oh, 11 instruções por pixel. E são 11 instruções para ler no formato de vídeo excêntrico em tempo real, redimensioná-lo, etc., etc. Não é possível. Período.
Em um FPGA, é possível gerar um pipeline de processamento longo que pode processar um ou mais pixels por ciclo de clock e fazê-lo de maneira altamente determinística (sem interrupções ou troca de tarefas!), Para que os dados de pixel estejam prontos para transmissão por HDMI exatamente na hora certa. Se você trabalhou extensivamente com CPUs de uso geral executando qualquer tipo de sistema operacional, saberá que obter tempo preciso em um nível de milissegundos é mais ou menos possível, mas em um nível de microssegundo é praticamente impossível. Para HDMI, você precisa de precisão em escala de nanossegundos. Não é possível em uma CPU de uso geral. Além disso, dê uma olhada no projeto de áudio / vídeo HDMI para o neo geo. Este não apenas precisa redimensionar o vídeo, mas também redimensionar o áudio e inseri-lo no fluxo de vídeo HDMI.
E isso ainda não está considerando a lógica personalizada necessária para ler em qualquer formato de dados de entrada que você tenha. Você precisará de hardware personalizado para interpretar isso. O software não é rápido o suficiente ou determinístico o suficiente. Você pode, por exemplo, reformatá-lo em algum tipo de fluxo baseado em USB, mas isso exigirá lógica digital personalizada de qualquer maneira, para que você possa apenas emitir HDMI diretamente.
Para implementar tudo isso, a lógica digital é realmente a única solução viável. E se você estiver fazendo lógica digital, os FPGAs são a única solução viável, pois é muito rápido e muito complexo para a lógica 7400 discreta e os ASICs são, bem, várias ordens de magnitude mais caras.
Outro componente necessário são os serializadores de alta velocidade e drivers diferenciais reais para gerar os fluxos de dados seriais paralelos que são enviados pelo cabo. Não é possível fazer bit-bang de dados seriais na ordem de um gigabit por segundo a partir de uma CPU de uso geral, isso requer hardware especializado. O raspberry pi possui uma GPU integrada que faz isso, mas é limitada em termos do que a GPU é capaz, sem mencionar o que está documentado. A maioria dos FPGAs contém pelo menos os drivers diferenciais necessários e chinelos DDR que são suficientes para suportar vídeo de baixa resolução e existem muitos FPGAs que também contêm os serializadores necessários (por exemplo, blocos Xilinx OSERDES) para gerar fluxos de HD completo. Não se esqueça que o fluxo serial não é 'banda base' como uma porta serial normal em que os dados reais são enviados literalmente com algumas informações de estrutura, mas os dados são realmente codificados com TMDS (sinalização diferencial minimizada por transição) para fornecer ao sinal certas características elétricas. É necessário um pouco de lógica para implementar isso, além dos serializadores de alta velocidade reais. Tudo isso é relativamente simples de se fazer na lógica digital pura (bem, a codificação de qualquer maneira - os serializadores são sem dúvida analógicos ou, pelo menos, sinal misto) em um ASIC ou FPGA.
Na verdade, é uma parte muito importante do processo geral de design de sistemas digitais / incorporados para descobrir quais partes de um sistema podem ser implementadas em software e quais requerem hardware, na forma de chips especializados de prateleira, FPGAs, personalizados. ASICs, IP rígido ou flexível (HDL, netlists, GDSII) etc. Nesse caso, é claro: a geração de sinal de vídeo requer hardware especializado, seja uma GPU emparelhada com uma CPU de uso geral, um FPGA com um disco rígido integral ou núcleo macio da CPU ou emparelhado com uma CPU externa ou algo mais especializado.
Edit: Acabei de perceber que o site fpga4fun e o projeto de vídeo geográfico são executados em 640x480 em vez de em full HD. No entanto, isso realmente não faz isso enquanto a operação é muito mais simples. O clock mínimo do pixel é de 25 MHz, com um clock de 250 MHz. Isso significa que o FPGA, na verdade, não requer serializadores para transmitir HDMI, apenas chinelos DDR. Isso ainda não alivia a questão da leitura dos dados do vídeo. Se você quiser fazer isso no raspberry pi sem ajuda de hardware, precisará ler o GPIO continuamente a 25 MHz. Qual é uma leitura a cada 175 instruções. Entrando no campo da possibilidade, mas a única maneira de fazer esse trabalho é no bare metal (sem Linux) com montagem codificada à mão.
fonte