Por que atrasos não podem ser sintetizados no Verilog?


8

Eu sempre li que os atrasos declarados no código RTL nunca podem ser sintetizados. Eles são feitos apenas para fins de simulação e as ferramentas de síntese modernas apenas ignoram as declarações de atrasos no código.

Por exemplo: x = #10 y;será considerado como x = y;pela ferramenta de síntese.

Quais são as razões pelas quais as declarações de atraso em qualquer linguagem de descrição de hardware (por exemplo, VHDL, Verilog ou Sytem-Verilog) não podem ser sintetizadas?


1
Essa é uma pergunta com postagem cruzada , pois se situa entre a sobreposição de SO e ElectronicsSE.
pre_randomize

Respostas:


14

Sintetizar significa, de alguma forma, converter o que você descreveu (no Verilog aqui) em hardware real .

Agora, no seu Verilog, você diz que tem um atraso de 50ns. Ok, mas agora, em termos de hardware, como você os converteria em hardware real?

Se você estiver usando um FPGA, como você criaria seu atraso de 50ns usando os recursos FPGA disponíveis (LUT, Registradores, Elemento Ram, ...)? Adicionando atrasos de roteamento adicionais? imagine que você especifique 1s de atraso! Impossível sem usar TODA a capacidade de roteamento do seu chip (talvez não o suficiente). Seu design não pode ser ajustado. O mesmo para um ASIC. Você usaria 80% da superfície do silício para adicionar um atraso a uma linha.

A maneira como deve funcionar é que você use o design síncrono e implemente o atraso usando contadores ou outras técnicas. Mas os atrasos devem ser múltiplos do relógio desse elemento.

Normalmente, você encontra coisas como teses "após 10 ns" que são atrasos na propagação. Ao fazer uma simulação ideal em um simulador Verilog, as saídas acontecem exatamente quando as entradas mudam. Isso não é realista e não descreve a maneira como o hardware real funciona. Para explicar isso, você pode especificar após quanto tempo sua saída será alterada: usando a declaração de atraso.


2
Observarei que "porque isso consumiria todo o chip" não é realmente uma razão pela qual algo não pode ser sintetizado, é uma razão pela qual algo não pode ser ajustado ou colocado dentro dos limites definidos.
W5VO

@ W5VO Você está certo. Pretendia-se mostrar algo absurdo que justificaria encontrar outro caminho. Corrigido.
Blup1980

5

Portando minha resposta do SO . Que enfoca por que é impraticável sintetizar atrasos absolutos

Ao sintetizar árvores de relógio, a ferramenta de síntese os equilibra adicionando atrasos, para que todos os nós recebam o relógio ao mesmo tempo, de modo que parece que a ferramenta de síntese tem a capacidade de adicionar atrasos.

No entanto, quando os ASICs são fabricados, há uma variação na velocidade; em um nível alto, isso pode ser visto como Lento, Típico e Rápido. Na prática, existem centenas de variações desses cantos em que certos tipos de dispositivos no silício correm rápido e outros lentos.

Esses cantos do silício também têm classificação de temperatura, o pior caso pode ser + 140C silício rápido e -40C silício lento. A variação do atraso através de um buffer neste caso pode ser de 1ns para dizer 30ns.

Para trazer isso de volta ao Verilog, se #10fosse sintetizável, você obteria 155 + -145, ou seja, 10ns a 300ns, se você também projetou algo #20para fazer parte da mesma interface ou estrutura de controle, ele terá um intervalo de 20ns a 600ns . Portanto, a coisa toda não é realmente válida em relação ao seu design. Você não entende exatamente#10 e #20que foram especificados.

As árvores de relógio são projetadas de forma a limitar os atrasos máximos e mínimos e, assim, todos os nós na árvore de relógio escalam um em relação ao outro. Eles nunca recebem uma regra tão estrita que deve ser o número 10ns, pois isso é fisicamente impossível de garantir em um circuito combinatório.


3

A única unidade de tempo absoluta seria de um relógio externo. De onde viria o atraso arbitrário - que tipo de equivalente lógico digital discreto o produziria a partir do relógio?

Se você deseja um atraso sintetizável, precisará usar a entrada do relógio externo e uma máquina / contador de estados apropriado que conte para um número específico de ciclos de relógio.


Este pensamento passou pela minha cabeça. Por que precisamos confiar no relógio para gerar atraso? Por que o atraso não pode ser sintetizado em um circuito RC simples com o Vdd?
Anand

1
A síntese preenche principalmente valores em tabelas de pesquisa e elementos de roteamento. Acho que é muito mais difícil criar um circuito RC programável em campo, especialmente um que não seja muito afetado pela temperatura. Muito mais fácil sincronizar tudo no mesmo limite do relógio do que esperar os tempos de propagação exatos.
maxy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.