De C ao silício: como implementar a solução de software / firmware como hardware?

13

À luz dessa pergunta, fiquei pensando se havia um processo bastante padrão para transformar uma solução de software em uma implementação de hardware. Perdoe a mim e à minha imaginação, mas haveria um compilador que pudesse pegar um programa C e compilá-lo em termos de um esquema de transistores, resistores etc. ou talvez até PCBs bem conhecidos?

Percebo que poderia estar olhando para esse cenário da perspectiva errada. Historicamente, por minha própria experiência, normalmente você tem algum hardware que alguém implementou como solução de software (pense em emulação de hardware). Este conceito, ao contrário, existe? Como essas empresas maiores fazem isso, como roteamento IP de software versus hardware?

Chad Harrison
fonte
Consulte também "por que não consigo automaticamente tornar meu programa C de cabeça única multithread?"
Pjc50
@ pjc50: Onde posso ver "por que não consigo fazer meu programa C de cabeça única multithread?" ?
Davidcary
Não tenho um exemplo específico em mente, mas é uma pergunta que já vi pessoas perguntando antes. Também está relacionado que o hardware é intrinsecamente paralelo, enquanto o software é "naturalmente" seqüencial em termos da maneira como as pessoas pensam e escrevem programas.
Pjc50

Respostas:

11

Não, não há solução padrão para transformar software em hardware. De um modo geral, levar um software que não foi escrito com uma implementação de hardware em mente não pode ser facilmente convertido em hardware sem grandes desperdícios e ineficiências. Geralmente, a melhor coisa a fazer é criar um chip com CPU e ROM - e colocar o software na ROM.

Ao longo dos anos, houve compiladores que pegavam o código "C-Like" e o compilavam no hardware - da mesma maneira que o VHDL ou o Verilog podem ser compilados no hardware. Mas o principal é que é "C-Like", e não C. Você ainda não pode usar, por exemplo, um programa C / C ++ que calcula o PI e magicamente o converte em hardware que calcula o PI. A maioria desses idiomas da linha C desapareceu ou não é usada em nenhum número. Uma das versões mais populares disso é o SystemC , mas é importante observar que não é C / C ++ e não é útil para genéricos "vamos escrever software e depois compilá-lo em hardware". Você ainda precisa "escrever algum hardware, que também possa ser compilado em software".

Switches e roteadores geralmente possuem hardware, o que faz com que a maioria das funções críticas comuns do roteador sejam usadas (procurando informações em tabelas de roteamento, gerenciando filas etc.) em hardware e, em seguida, use uma CPU para executar todas as funções não tão comuns (tratamento de exceções, erros, atualizações da tabela de roteamento, etc.). De muitas maneiras, isso é semelhante ao funcionamento da CPU moderna, onde os códigos de operação mais comuns são feitos no hardware e, ocasionalmente, alguns códigos de operação são implementados no software (por exemplo, instruções de ponto flutuante quando uma FPU não está presente).


fonte
O SystemC não é apenas C ++ real, é apenas uma biblioteca C ++. Você pode usar qualquer código C ++ comum que desejar com o SystemC. Dito isto, o SystemC não tem muito a ver com a geração automática de hardware. É mais orientado para a simulação de sistemas, ajudando a tomar decisões de arquitetura e permitindo que as equipes de software iniciem antes que o hardware esteja disponível.
Theran
Isso realmente me ajuda a entender por que há hardware específico que executa tarefas específicas.
Chad Harrison
Existem muitos outros compiladores de C a HDL que foram projetados para essa finalidade.
Anderson Green
5

O mais próximo seria o compilador C-to-Hardware (C2H) da Altera . Isso pode fazer parte do que você está sugerindo. Mas existem advertências desafiadoras. Você não pode transformar qualquer código C em hardware, nem gostaria. Mas funções específicas funcionam muito bem e você pode ver um aumento dramático no desempenho.

Normalmente, você implementaria um processador softcore NIOS II em um FPGA da Altera. Você escreveria algum código ANSI C para ele, como faria com qualquer outro processador. Então, digamos que uma das funções C que você escreveu envolva alguma matemática pesada que se beneficiaria com o desempenho de alguma execução paralela. Você invoca o compilador C2H, diga "Implementar no hardware" e, basicamente, transforma essa função em um periférico do processador softcore NIOS II.

Aqui está um exemplo de codificação de uma computação Mandelbrot no ANSI C e, em seguida, implementando-a no hardware:

O algoritmo Mandelbrot acelerado pelo compilador C2H resulta em uma melhoria de velocidade de pelo menos 60x em comparação com o mesmo algoritmo em execução no processador Nios II mais rápido, usando o nível 2 de otimização do compilador (-O2). Esse aumento de velocidade se deve ao paralelismo e às rápidas velocidades de iteração que o hardware pode fornecer, o que não é possível em uma unidade de processamento de uso geral.

Voltando ao seu exemplo, o processador NIOS II pode executar o Linux. E certas funções que seriam necessárias para executar tarefas de roteamento poderiam se beneficiar da aceleração de hardware. Provavelmente teria um desempenho melhor do que um roteador de software puro. Mas nunca abordará o desempenho de ASICs dedicados especialmente projetados.

Embedded.kyle
fonte
1
O Xilinx possui uma ferramenta comparável chamada Vivado HLS (síntese de alto nível), anteriormente conhecida como AutoESL. Aplicam-se advertências semelhantes: ele faz um bom trabalho ao converter código para RTL, se for o tipo de código fácil de converter automaticamente para RTL.
Theran
@Theran Eu não sabia que a Xilinx tinha um produto concorrente. Vou ter que verificar isso. Obrigado!
embedded.kyle
2

Você menciona "C to Silicon" em seu título e menciona produtos no nível da placa no corpo. Vou me concentrar apenas na parte dessa equação que existe -> fluxos de design "C para silício". O C em si não é um ajuste natural para a descrição do hardware, pois carece de algum suporte fundamental para o paralelismo inerente ao hardware, a necessidade de evitar condições de corrida e outros problemas, e não é notavelmente expressivo por poder representar esses conceitos. Ou não tanto quanto Verilog e VHDL.

O código C sintetizável (ou seja, pode ser renderizado em uma descrição de hardware) e aqui hardware = lógica digital, não venceria nenhum concurso de codificação julgado pelos desenvolvedores de software.

Aqui está uma lista de alguns fornecedores notáveis ​​que fornecem ferramentas C -> Silicon para a multidão de fluxo ASIC.

  • Cynthesizer Forte

  • Catapulta Mentor

  • BlueSpec C

  • Synopsys Synphony (ex- Synfora)

  • Cadência C-para-Silício

espaço reservado
fonte
1

Transformar software em hardware não é uma tarefa completamente trivial se você espera um hardware razoável. O hardware tende a precisar de mais arquiteturas para gerenciar cuidadosamente o uso de recursos relacionado à área / custo. Dito isto, existem várias ferramentas que usam C de alguma forma, permitem adicionar informações específicas de hardware (por exemplo, qual é a interface de hardware?) E gerar hardware otimizado. Usuários proficientes podem facilmente obter melhores resultados em menos tempo que o RTL codificado manualmente.

Brett Cline
fonte