Verilog: назначить взвешенную сумму параметризованной длины

Я пытаюсь реализовать регистр сдвига с линейной обратной связью с параметризованной шириной и коэффициентами:

// ...
    parameter width = 16;
    parameter [width-1:0] coeff = 16'b1110101100110110;
// ...

Есть ли способ назначить XOR-цепочку на входной триггер, то есть какой разумный способ реализовать что-то вроде

assign input_wire = (coeff[0] & flops[0]) xor ... xor (coeff[width-1] & flops[width-1]);

Очевидным, но незаконным способом было бы использование цикла for. Есть ли способ сделать это вне всегда блока?

Спасибо

1 ответ

Решение

Побитовое И и унарный XOR-оператор делают свое дело:

assign input_wire = ^(coefficients[width-1:0] & flops[width-1:0]);

Побитовое И выполняет взвешивание триггерных выходов.

Другие вопросы по тегам