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.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
Um registrador armazena uma função de próximo estado
Seja o valor anterior à borda, a entrada capturada e 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:
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.
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.
Ver os dados da forma de onda
| Sinal | Forma de onda | Valores do barramento |
|---|---|---|
| borda | 2345 | E0 → E1 → E2 → E3 |
| reset | 0.10 | |
| enable | 01.0 | |
| D | 2.34 | 3C → 99 → 77 |
| Q depois | 234. | 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.