No geral existem três opções: Reset síncrono, Reset assíncrono e um híbrido dos dois resets. Neste artigo pretendo discutir um pouco sobre os pros e cons de cada um deles
Reset Assíncrono
Reset assíncrono é definido como um sinal de entrada de um registrador que quando válido (seja em 0 ou 1) reseta o registrador independente do clock. Um process de um reset assíncrono é descrito da seguinte forma:
Figura 1: Reset assíncrono |
Desvantagens
A utilização de resets assíncronos pode causar problemas difíceis de se verificar, devido a característica de um circuito digital certos atrasos podem ser maiores em algumas trilhas o que pode fazer com que o reset chegue primeiro a um módulo e depois a outro e com isso os módulos saiam do reset em tempos distintos, o que é um problema - muito - grave. Vamos imaginar o exemplo abaixo:
Figura 2: FF recebendo valores diferentes em Reset assinc |
No reset o Flip-Flop(1) recebe '0' (R) e o Flip-Flop(2) recebe '1' (S), após a liberação do reset o valor do FF1 e do FF2 se alternam a cada pulso de clock (Figura 3), vamos supor que por causa de atrasos na trilha de reset os registradores não são liberados do reset ao mesmo tempo, o FF(1) é liberado antes do pulso de clock e o FF(2) após o pulso de clock. Com isto ambos FFs ficariam em 1 ao invés de alternarem o valor (Figura 4).
Figura 3: Comportamento normal. |
Figura 4. Resets soltos em tempos diferentes |
Vantagens
Figura 5: Uma fábrica com reset síncrono sem clock no estado de aquecer |
Outra vantagem é a velocidade, o reset assíncrono é instantâneo e não depende da borda de clock. Por ser assíncrono algumas verificações de timing não são realizadas sobre o sinal de reset o que pode gerar um tempo de compilação menor. Quanto a utilização de lógica é necessário verificar a arquitetura do seu FPGA e como se da a implementação de um reset assíncrono no seu circuito sintetizado.
Reset Síncrono
Reset síncrono é definido como um sinal de entrada de um registrador que quando válido (0 ou 1) reseta o sistema na borda de clock. Um process com reset síncrono é descrito da seguinte forma:
Quando se utiliza reset síncrono a ferramenta de síntese realiza os testes de timing para diferentes tensões, temperaturas e variações entre os chips. Caso não apareça erros de timing na sua trilha de reset você pode ficar tranquilo que todos os seus flip-flops serão resetados no mesmo instante de tempo, evitando os problemas vistos no reset assíncrono. Este tipo de reset TENDE a consumir menos lógica.
Reset Híbrido
E porque não utilizar as vantagens dos dois designs e reduzir as desvantagens? Para isto temos o "Reset Híbrido".
Ele é assíncrono quando ativado e síncrono quando liberado, utilizando está técnica você garante que mesmo sem clock o seu sistema vá para a condição de reset e que quando liberado o sinal chegue em todos os flipflops ao mesmo tempo, também evita o problema de metaestabilidade! Porém este tipo de reset consome mais recursos do seu FPGA e é sintetizado para uma lógica um pouco mais lenta.
process(clk,rst)
begin
if(rst = '0') then -- reset assincrono
sync_reg <= '0'
out_reset = '0';
elsif(rising_edge(clk)) then
sync_reg <= '1';
out_reset <= sync_reg; -- deassert no reset somente apos passar por um ff sincronizado
end if;
end process;
Caso você tenha problemas de timing nesta abordagem é recomendado usar mais flipflops para sincronizar o circuito!
E você, que tipo de reset usa no seu design e porque? Lembrando que nada impede de utilizar diferentes tipos de reset em um só projeto mas é necessário tomar muito cuidado.
A Figura 5 é meramente ilustrativa = )
As Figuras 2,3 e 4 foram retiradas do livro "100 Power Tips For FPGA Designers" que falei sobre aqui.
Nenhum comentário:
Postar um comentário