Altifigence Academy

5 / 24 · Conceito

Leia as transferências entre registradores nas bordas de clock

Separe o estado anterior do próximo estado e acompanhe como as habilitações preservam os valores armazenados.

Todos os registradores leem o estado anterior

Comece identificando as informações que devem sobreviver entre ciclos. Um acumulador, operandos capturados, um contador de laço e a validade da saída são estado. A soma do acumulador atual com o operando é um valor combinacional. Escrever uma variável, por si só, não explica o armazenamento; especifique o evento que captura seu valor.

Este acumulador soma x apenas nas bordas de subida com en ativo. Com en baixo, ele mantém seu valor. Um intermediário de nove bits explicita a soma; selecionar seus oito bits menos significativos define o comportamento módulo 256. As atribuições não bloqueantes em always_ff programam o próximo estado usando os valores lidos na borda atual. Ler o bloco como atribuições imediatas de software leva à interpretação errada quando há vários registradores envolvidos.

SystemVerilog
logic [7:0] acc;
logic [8:0] next_sum;
assign next_sum = {1'b0, acc} + {1'b0, x};
always_ff @(posedge clk) begin
  if (rst) acc <= 8'd0;
  else if (en) acc <= next_sum[7:0];
end

O reset é síncrono e tem prioridade sobre a habilitação. Omitir uma atribuição sequencial quando en está baixo significa manter o valor do registrador. Já omitir uma atribuição em um caminho combinacional pode implicar um latch não intencional. Na lógica combinacional do próximo estado, forneça valores padrão e depois os substitua para condições específicas.

Bordarstenxacc anterioracc novo
0119Desconhecido0
101707
20010077
30125071

Na borda 2, a entrada visível 100 não foi aceita. Na borda 3, 7+250=257 é reduzido para 1. Distinguir apresentação de aceitação continua essencial quando en posteriormente se torna valid AND ready.

Para a<=x; b<=a;, os valores anteriores a=5 e x=9 produzem os novos valores a=9 e b=5. Se b deve receber 9, conecte sua entrada a x. Complete primeiro a coluna do estado anterior e, em seguida, calcule todos os valores do próximo estado juntos; isso revela desencontros de um ciclo entre dados e controle.

Experimente

Inicialmente, a=4 e b=0. As entradas x são 8 e depois 12, com a<=x; b<=a em cada borda. Quais são a e b após a segunda borda?

Ler a explicação

Após a primeira borda, a=8 e b=4. Após a segunda, a=12 e b=8. Cada atualização de b usa o valor anterior de a, portanto x=12 não passa pelos dois registradores em uma única borda.

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