CPUs FPGA, como encontrar a velocidade máxima?

14

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?

Uwe Keim
fonte
12
@KingDuken Estou curioso sobre a alternativa ao Verilog para projetar algo como CPU que você tem em mente (não VHDL, presumo :))?
Eugene Sh.
1
@KingDuken Esse não é o problema que estou tendo, eu já fiz minha CPU e sua arquitetura na placa de ensaio e quero portá-la para um FPGA. Minha pergunta é: como posso calcular qual seria o clock de frequência máxima para minha CPU, o que o limita?
4
Você pode querer pesquisar no Google "estática análise de tempo"
The Photon
14
@KingDuken Como alguém que projetou duas CPUs, não é realmente demorado. Você pode ter um processador funcionando em 1-2 meses, se souber o que está fazendo.
user110971
2
@KingDuken Curiosidade: a Sun / Oracle lançou o código-fonte Verilog em seus processadores UltraSPARC T1 e T2. Eu já vi várias pessoalmente, e todas elas funcionaram. Para sua informação, eles foram até ganhar o SPECint_rate2006! : D Isso mostra claramente como é impossível projetar CPUs no Verilog ou em outros HDLs. Eu fiz assim eu mesmo algumas vezes como um hobby, e ele realmente não é nada impossível (uma vez que você grok-lo, como sempre)
Richard o Spacecat

Respostas:

29

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.

alex.forencich
fonte
22

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.

Dave Tweed
fonte
O que faria com que as restrições não fossem atendidas? O que limita o período do relógio? É dependente do uso FPGA I ou é o mesmo para toda a família de FPGA de? (Ou talvez para cada FPGA na existência?)
3
Depende da velocidade do FPGA e da quantidade de lógica combinatória que você coloca entre os FFs em seu projeto.
Dave Tweed
9
@ appmaker1358, você tentou ler a folha de dados de um FPGA? A classificação de velocidade é um dos parâmetros mais importantes mencionados na folha de dados.
The Photon
2
A velocidade será limitada pelo caminho de tempo mais longo, que será o maior atraso de propagação através da lógica e do roteamento entre dois elementos com estado (flip-flops, RAMs, etc.). FPGAs diferentes terão parâmetros de tempo diferentes e, portanto, um design alcançará velocidades diferentes em FPGAs diferentes. Existem algumas partes do FPGA com frequência limitada - componentes de distribuição de clock e PLLs geralmente têm limites, mas é difícil escrever HDL que se aproxime daqueles para projetos não triviais.
alex.forencich
3
Além disso, você sempre precisa adicionar restrições de tempo. O posicionamento e o roteamento levam em consideração as restrições e trabalham para tentar atendê-las. Se você não adicionar restrições, as ferramentas não se esforçarão muito e você não receberá um número muito otimista.
alex.forencich
13

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.

hacktastical
fonte
-2

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.

Voltage Spike
fonte