Altifigence Academy

20 / 37 · Conceito

generate: construir circuitos estáticos com laços

Use genvar e generate-if para hierarquias nomeadas e confira a distribuição dos lanes.

O laço cria instâncias, não ciclos

genvar/generate repetem estrutura estática antes da execução. Um laço em always_comb descreve cálculo procedural, com hardware determinado na síntese. Nenhum significa automaticamente uma iteração por clock; processamento serial exige estado e controlador. Aqui o barramento packed é dividido em LANES palavras de W bits, calculando uma paridade por palavra. Ambos parâmetros são positivos.

SystemVerilog
module lane_parity #(
  parameter integer W = 8,
  parameter integer LANES = 3
) (
  input  logic [W*LANES-1:0] data,
  output logic [LANES-1:0] parity
);
  genvar lane;
  generate
    for (lane = 0; lane < LANES; lane = lane + 1) begin : g_lane
      wire [W-1:0] word_data;
      assign word_data = data[lane*W +: W];
      assign parity[lane] = ^word_data;
    end
  endgenerate
endmodule

data[base +: W] seleciona W bits desde base em direção a índices maiores; W é constante. W=8, LANES=3 liga 7:0 ao lane 0,15:8 ao 1,23:16 ao 2. g_lane cria hierarquia estável, como g_lane[1].word_data.

Leia a ordem dos lanes

data=24'h03_01_80 tem 80,01,03 do lane 0 em diante. Paridades 1,1,0 dão parity[2:0]=011. O byte mais à esquerda é lane 2. Separe índice, exibição e transmissão. Todos calculam simultaneamente, sem latência registrada. Mais LANES aumenta lógica, não ciclos; fanout, roteamento e temporização física são verificações adicionais.

generate-if escolhe estrutura fixa

Sua condição é constante, como parâmetro para incluir registro. Sinal dinâmico pertence a bloco combinacional ou com clock. Incluir registro muda validade, exigindo atualização do contrato e checker. Não desative barramento usando zero: [−1:0] não é objeto de largura zero seguro. Rejeite configuração ou mantenha interface bem definida numa ramificação estática.

Prática: detecte troca de lanes

Teste o exemplo e acenda um bit em cada lane: só a paridade correspondente muda. Dois bits ativos dão paridade par 0. Dados iguais em todos lanes ocultam slices trocados. Extraia lanes numericamente na referência e conte bits 1. Teste W=1,8 e LANES=1,3, cobrindo byte, hierarquia e mínimos. Registre depois a paridade e defina reset, enable e comparação com barramento atual ou capturado na borda anterior.

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