Considere uma expressão como:
assign x = func(A) ^ func(B);
onde a saída da função tem 32 bits de largura ex é um fio de 16 bits. Quero atribuir apenas os 16 bits mais baixos do xor resultante.
Eu sei que o código acima já faz isso, mas também gera um aviso. A abordagem "óbvia" não funciona:
assign x = (func(A) ^ func(B))[15:0]; // error: '[' is unexpected
No seu exemplo, você está truncando bits implicitamente.
Tornar o truncamento explícito geralmente pode remover os avisos em simulação / fiapos / síntese.
Uma maneira de fazer isso em linha é usar um operador de conversão, por exemplo:
Essa abordagem pode fazer sentido se for óbvio, no contexto, que todos os bits que estão sendo descartados são zeros.
Se alguns bits podem ser diferentes de zero, sugiro ainda usar uma rede intermediária como @dwikle sugerida em uma resposta anterior , pois fica mais claro que você está realmente jogando bits fora. Aqui está novamente para referência.
fonte
Eu acho que isso pode ajudar a manter a contagem decrescente.
Não tenho certeza se isso é válido com atribuições.
fonte