Altifigence Academy

14 / 37 · Conceito

Flip-flops, enable e prioridade de controle

Defina manutenção, carga e reset como próximo estado e evite criar gating de clock involuntário.

Um registrador armazena uma função de próximo estado

Seja QkQ_k o valor anterior à borda, DkD_k a entrada capturada e Qk+1Q_{k+1} o valor atualizado. Um registradorRegistrador Circuito que armazena vários bits de estado. Os registradores síncronos deste curso capturam a entrada especificada na borda de clock. Saiba mais com prioridade de reset sobre enable obedece a:

Qk+1={0rk=1Dkrk=0, ek=1Qkrk=0, ek=0Q_{k+1}=\begin{cases} 0 & r_k=1\\ D_k & r_k=0,\ e_k=1\\ Q_k & r_k=0,\ e_k=0 \end{cases}

Com enable=0, o valor armazenado é mantido mesmo que D mude. Omitir explicitamente esse ramo em um bloco sequencial difere de omitir uma atribuição combinacional: manter o registrador faz parte da especificação.

SystemVerilog
module enabled_register (
  input logic clk, rst, en,
  input logic [7:0] d,
  output logic [7:0] q
);
  always_ff @(posedge clk) begin
    if (rst) q <= 8'b0;
    else if (en) q <= d;
  end
endmodule

É um reset síncrono ativo em nível alto. Se reset e enable coincidirem em 1 numa borda, armazena-se 0. Inverter a ordem muda a função: registre a prioridade no código e nos testes, além dos comentários.

Cada coluna abaixo registra uma borda de subidaBorda de subida Instante em que o clock passa de 0 para 1. É diferente do nível alto, que abrange todo o intervalo com CLK=1. Saiba mais. As entradas são anteriores à borda; o estado marcado «depois» é posterior à atualização. As colunas ordenam amostras, não desenham atrasos físicos de propagaçãoAtraso de propagação Tempo entre uma mudança de entrada e a estabilização da saída no valor correto. Equivalência lógica e comportamento temporal são propriedades distintas. Saiba mais. Q começa em 0xA5: a primeira coluna mantém, a segunda escreve e a terceira confronta reset com enable.

Prioridade entre reset, enable e manutenção
Ver os dados da forma de onda
Dados da forma de onda: cada caractere é um intervalo; um ponto mantém o estado anterior; p representa um ciclo de clock.
SinalForma de ondaValores do barramento
borda2345E0 → E1 → E2 → E3
reset0.10
enable01.0
D2.343C → 99 → 77
Q depois234.A5 → 3C → 00

Enable não recorta diretamente o clock

Usar arbitrariamente gated_clk = clk & en como clock permite que mudanças de en produzam pulsos curtos ou bordas inesperadas. O fluxo de síntese e implementação decide como mapear o RTL com clock enable. A economia de energia por clock gating é projetada separadamente, com células adequadas e verificação temporal.

As prioridades aparecem quando reset, load e enable se sobrepõem; ativar cada controle isoladamente não basta. Por exemplo, com q=A5, en=0 e d=3C, q é mantido; se en=1 na próxima borda, deve armazenar 3C.

Experimente

Partindo de q=0xA5, passe uma borda com rst=1, en=1, d=0x3C e a seguinte com rst=0, en=0. Qual é q depois de cada borda?

Ler a explicação

Na primeira, 0 porque reset tem prioridade; na segunda continua em 0 porque enable=0. Se reset fosse colocado dentro de en, poderia ser perdido com en=0; teste também essa combinação.

Sua escolha vale neste navegador. Altere-a a qualquer momento no rodapé.