Me gusta un desafío y me tomó varios intentos, pero lo conseguí trabajando para datos de W bits de ancho y D entradas. (D es una potencia de dos). Hice trampa un poco porque soy bastante más competente con Verilog. Esta es la vista RTL que me dio Xilinx:
No estoy regalando el código, solo para evitar que este sitio web se convierta en un '¡Ver: código libre!' pero puedo dar algunos consejos:
Comencé con la definición de D * (D + 1) buses de 8 bits. Esto hace que pueda usar el mismo nombre de bus en cualquier lugar de mi generación.
Conecte los primeros buses D a sus entradas, los últimos buses D a sus salidas.
En la etapa imparable usted pasa dos autobuses a lo largo de los cuales los índices de autobuses son muy desagradables. Una solución simple es que en la parte superior e inferior de cada estado impar renombro el bus. Para el bus superior esto es:
assign bus[stage*d+d] = bus[stage*d];
Ahora siempre tienes D buses por etapa y todos los bucles se vuelven regulares para los bucles.