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]);
Побитовое И выполняет взвешивание триггерных выходов.