Рассмотрим выражение вроде:
assign x = func(A) ^ func(B);
где вывод функции имеет ширину 32 бита, а x представляет собой провод из 16 бит. Я хочу назначить только 16 младших битов полученного xor.
Я знаю, что приведенный выше код уже делает это, но он также генерирует предупреждение. «Очевидный» подход не работает:
assign x = (func(A) ^ func(B))[15:0]; // error: '[' is unexpected
В вашем примере вы неявно усекаете биты.
Явное усечение может часто удалять предупреждения в моделировании / удалении / синтезе.
Один из способов сделать это in-line - использовать оператор приведения, например:
Этот подход может иметь смысл, если из контекста очевидно, что все отбрасываемые биты равны 0.
Если некоторые биты могут отличаться от нуля, я бы по-прежнему предлагал использовать промежуточную сеть, такую как @dwikle, предложенную в предыдущем ответе , поскольку это делает более понятным, что вы на самом деле выбрасываете биты. Здесь это снова для справки.
источник
Я думаю, что это может помочь уменьшить счет.
Не уверен, если это действительно с назначениями, хотя.
источник