Error de sintaxis al seleccionar un rango de un rango

0

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?

    
pregunta Mara Ara

1 respuesta

0

El cambio de la extensión de archivo de .v a .sv me permitió superar el error de sintaxis y los errores de síntesis que no puedo corregir (parte seleccionada fuera del rango de prefijo), como algunas personas en el hilo antiguo de Xilinx, lo que me hace pensar Necesito volver a escribir esto.

    
respondido por el Mara Ara

Lea otras preguntas en las etiquetas