Estou entrando nos FPGAs e, se entendi direito, você está conectando portas lógicas usando código. Portanto, se eu projetar uma CPU no Verilog, ela deverá conectar algumas portas lógicas e funcionar, mas como sei com que rapidez minha CPU DIY pode funcionar? Do que isso depende?
fpga
cpu
homebrew-cpu
Uwe Keim
fonte
fonte
Respostas:
A velocidade de um design é limitada por várias coisas. O maior provavelmente será o atraso de propagação através da lógica combinatória em seu design, chamada caminho crítico . Se você usa um FPGA rápido e escreve seu HDL com muito cuidado, provavelmente poderá atingir 700 MHz em algo como um Virtex Ultrascale +. Em um FPGA de extremidade inferior, por exemplo, um Spartan 6, um número razoável provavelmente é mais parecido com 250 MHz. Isso requer pipeline em todos os lugares, para que você tenha a quantidade mínima absoluta de lógica combinatória entre componentes com estado (minimiza os níveis de lógica), baixa quantidade de fan-outs (minimiza o carregamento de elementos lógicos) e não há ninhos de ratos congestionados (caminhos de roteamento eficientes).
A lógica de fabricação de diferentes FPGAs terá parâmetros de tempo diferentes. FPGAs mais rápidos e mais caros terão atrasos menores e, como resultado, podem atingir frequências de clock mais altas com o mesmo design ou executar um design ou design mais complexo com menos pipelining na mesma frequência. O desempenho em um processo específico pode ser semelhante - por exemplo, o Kintex Ultrascale e o Virtex Ultrascale são feitos no mesmo processo e têm atrasos semelhantes nas células e no roteamento. É impossível dizer com que rapidez um determinado projeto será executado sem executá-lo na cadeia de ferramentas e sem olhar para os relatórios de tempo da análise de tempo estático.
Ao executar execuções de cadeia de ferramentas para determinar a velocidade máxima do relógio, lembre-se de que as ferramentas são controladas por tempo: elas tentarão atender às restrições de tempo especificadas. Se nenhuma restrição de tempo for especificada, o resultado poderá ser muito ruim, pois as ferramentas não tentarão otimizar o design para velocidade. Geralmente, as ferramentas precisam ser executadas várias vezes com restrições de período de relógio diferentes para encontrar qual a frequência de clock máxima possível.
Se você pode otimizar seu design para que o caminho crítico não seja o limite, você encontrará limitações na geração e distribuição de clock (PLLs, DCMs, buffers de clock e redes de clock globais). Esses limites podem ser encontrados em folhas de dados de peças, mas é difícil chegar perto deles com um design não trivial. Eu executei coisas em uma ultra-escala Virtex a 500 MHz, mas isso foi apenas um punhado de contadores para fornecer sinais de disparo a outros componentes.
fonte
Você sintetiza seu design na tecnologia de destino (um FPGA específico) e permite que as ferramentas de análise de tempo estático lhe digam qual é o período mínimo de clock.
Ou, em primeiro lugar, você adiciona restrições ao design e, em seguida, as ferramentas informam se elas são atendidas ou não.
fonte
A velocidade que sua CPU executará será baseada no maior atraso de flop a flop em seu design sintetizado. O atraso de flop para flop incluirá o tempo de clock para Q, roteamento, lógica / LUT e tempo de configuração do flop. Esses itens somados formam o caminho crítico de sua temporização, que você pode inspecionar na saída do relatório de temporização pela ferramenta de localização e rota.
Existem disciplinas de design inteiras dedicadas a criar arquiteturas que minimizem esse atraso para obter o máximo de um determinado processo - pipelining, execução paralela, execução especulativa e assim por diante. É uma tarefa fascinante e envolvente, que extrai a última gota de desempenho de um FPGA (ou, nesse caso, de um ASIC).
Dito isto, os fornecedores de FPGA fornecerão diferentes graus de velocidade para suas peças, o que corresponde a uma taxa máxima de MHz. Por exemplo, um -2 Xilinx Artix é uma parte de '250 MHz', apesar de ser capaz de taxas de clock mais altas para projetos com pipelines.
Quando você interage com a síntese FPGA e as ferramentas de local e rota, você precisará fornecer restrições ao seu design. Isso informa à ferramenta o fluxo de atraso de flop para flop desejado que você está tentando atingir. Em Quartus (Altera) e Vivado (Xilinx), essas restrições usam uma sintaxe chamada SDC, que significa Synopsys Design Constraints. O SDC veio inicialmente do mundo ASIC e também foi adotado pelo setor de FPGA. Conheça o SDC - ele ajudará você a obter os resultados desejados.
Altera e Xilinx têm comunidades online para obter ajuda sobre como usar a sintaxe SDC e muitos outros tópicos.
Dito isso, se você se preocupa com a velocidade, considere um FPGA com uma macro rígida de CPU, como o Zynq.
fonte
A CPU não funciona mais rápido que os relógios globais, o que colocaria um limite superior na velocidade com que poderia ser executada. Geralmente, as informações sobre a taxa máxima de clock estão listadas nas folhas de dados da FGPA.
fonte