La forma más fácil, si no necesitas parametrizar cosas, sería usar el enlace, es decir, { }
.
Para su ejemplo usando un input_sig
de 8 bits, puede hacer esto de la siguiente manera:
reg [1:0] part0, part1, part2, part3;
always @(input_sig)
{part3, part2, part1, part0} = input_sig;
Esa última línea esencialmente hace un gran cable de cada parte y asigna input_sig
al nuevo cable a nivel de bits (como si el nuevo cable fuera cualquier otro cable de 8 bits). Entonces, si input_sig fue 10111011: part3 = 10, part2 = 11, part1 = 10, y part0 = 11.
Luego puedes manipular las partes como desees. Si te preocupan los parámetros, podrías usar un bucle for, pero la lógica podría tener un poco de complejidad (al menos para mi gusto). Esta solución no será demasiado complicada incluso para dividir una señal en 16 partes.