Altifigence Academy

1 / 37 · Conceito

RTL: descrever circuitos concorrentes

Separe a ordem do software da estrutura paralela e especifique estado atual, próximo estado e observação.

O circuito continua operando

RTL descreve valores passando entre registradores através de lógica combinacional. Um módulo delimita hardware; duas instâncias formam estruturas que interagem, não chamadas executadas uma após outra. O circuito permanece ativo quando entradas mudam. Transforme portas, armazenamento e máquinas de estados em interfaces SystemVerilog explícitas e verificações reproduzíveis. Antes de implementar, explique largura, acionamento, validade e reset de cada sinal.

Separe estado atual e próximo

O módulo completo acumula sample sem sinal de quatro bits em um registrador de oito. Reset síncrono, ativo alto, tem prioridade sobre enable. Uma borda habilitada soma, as demais mantêm sum. A aritmética retorna ao início módulo 256.

SystemVerilog
module accumulator (
  input  logic       clk, rst, enable,
  input  logic [3:0] sample,
  output logic [7:0] sum
);
  logic [7:0] next_sum;
  assign next_sum = sum + {4'b0000, sample};
  always_ff @(posedge clk) begin
    if (rst) sum <= 8'b0;
    else if (enable) sum <= next_sum;
  end
endmodule

next_sum é combinacional: pode mudar com sum ou sample sem borda de clock. sum armazena estado e muda na subida. Declarar ambos logic não lhes dá o mesmo papel. A ausência do else final neste bloco com clock mantém o registrador; uma atribuição ausente no combinacional pode exigir latch. Primeiro identifique o bloco.

Calcule uma tabela antes de simular

Use estado e entradas anteriores à borda e observe depois das atualizações não bloqueantes.

Bordarstenablesamplesum antessum depois
E0119Desconhecido0
E101303
E200733
E301538
E4111580

Em E4, reset vence e não há soma. Com sum anterior 250 e sample aceito 10, os oito bits dão 4. Preservar um nono bit exige mudar interface e contrato aritmético.

Ordem local e concorrência estrutural

Atribuições bloqueantes = no procedimento combinacional seguem ordem procedural. Procedimentos separados e atribuições contínuas são processos concorrentes. As não bloqueantes <= calculam o lado direito com valores disponíveis ao executar e agendam atualizações. A ordem textual não especifica latência. Não use #10 no acumulador para esperar um clock: atrasos e geração de clock pertencem ao banco de simulação geral. Transição sintetizável usa bordas e estado, não sleep.

Prática: altere um requisito

Troque o retorno por saturação em 255. Estenda operandos e some em nove bits; se o bit 8 for 1, guarde 255, senão 7:0. Mantenha prioridades. Teste 0+0,250+5,250+6, borda desabilitada e reset/enable simultâneos: espere 0,255,255, estado mantido,0. Só 250+5 não revela perda de carry; inclua 250+6. Guarde fonte, tabela e expectativas. Marcar a aula concluída registra estudo, não uma execução de simulador.

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