Estoy intentando ejecutar un viejo proyecto de minería de Bitcoin en Vivado. El código antiguo está escrito en Verilog y el resto de mi proyecto está en System Verilog.
Tengo un error de sintaxis que no sé cómo resolver. Básicamente se reduce a una sola línea (que puedes ver en el código fuente completo aquí)
data15_p1 <= 'S1( S[i-1].data['IDX(15)] );
Expandiendo la macro manualmente y limpiándola para replicar el error, obtengo:
data15_pl <= ( { S[i-1].data[511:480][16:7] } );
Esto es lo que entiendo que está sucediendo: la macro IDX toma un subconjunto de 32 bits de los datos de 512 bits s []. [16: 7] luego se usa para intentar tomar los bits 16 a 7 de esos 32, pero Vivado se queja con el error "No se permite el rango en un prefijo".
¿Debo volver a escribir el código utilizando una variable temporal wire
para que esto funcione?
Editar: no creo que no pueda usar un cable en ese ámbito? Usar un registro agregaría retrasos. ¿Quizás la única opción es expandir y cambiar manualmente todas las definiciones?