André Castelan
"Em teoria não há diferença entre a pratica e a teoria, já na pratica..."

sexta-feira, 16 de agosto de 2013

Tipos de Reset em FPGA: Reset síncrono, Reset assíncrono e Reset híbrido.

A escolha de um esquema de reset tem grande impacto no desempenho, utilização de lógica e robustez de um projeto. Ainda hoje não há uma unanimidade de um melhor reset para todas as situações então é necessário verificar qual o melhor reset para as suas necessidades, discussões sobre esquemas de reset são quase como discutir religião.

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
Este cenário não é hipotético e pode acontecer no seu circuito, com isto máquinas de estados podem ir para estados inválidos e outros sinais de controle podem se perder, também é necessário ficar de olho no tempo de recovery e de removal (análogos ao tempo de setup e de hold de um flip-flop) dos resets para não acontecer metaestabilidade.

Vantagens


O uso de reset assíncronos oferece algumas vantagens, a primeira delas é a não necessidade de um clock para que o sistema entre em estado de reset, imagine uma máquina de estados que controla um processo químico, por alguma razão o clock para de entrar no seu sistema e você está no estado de "aquecer". Se o seu reset depender do clock você só vai conseguir parar de "aquecer" quando tirar o circuito da tomada ou a fabrica explodir, utilizando um reset assíncrono você consegue garantir que seu sistema vá para o estado inicial mesmo se houver um problema no clock.

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:

Figura 6: Reset síncrono
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