El rango debe estar delimitado por expresiones constantes - Verilog

0

¿Cómo puedo escribir en Verilog las siguientes líneas de código:

SF_D <= RAW1_i[(127 - (8*bytes_cnt)) : (124 - (8*bytes_cnt))];
SF_D <= RAW1_i[((8*bytes_cnt)-1) : ((8*bytes_cnt)-4)];

Me da un error al decir Range must be bounded by constant expressions. bytes_cnt está cambiando el valor, es un contador, así que supongo que este es el problema. Con valor constante funciona, con dinámico no funciona. ¿Cómo puedo hacer que funcione?

    
pregunta Linksx

1 respuesta

2

Use la selección de partes ( -: y +: ). Puede encontrar una descripción y ejemplos en IEEE Std 1800-2012 § 11.5.1 Vector de selección de bits y selección de parte de direccionamiento . La primera aparición de IEEE es IEEE 1364-2001 (Verilog) § 4.2.1 Selección de bits de vector y direccionamiento de selección de parte .

Ejemplo:

SF_D <= RAW1_i[ 124 - (8*bytes_cnt) +: 4];
SF_D <= RAW1_i[ (8*bytes_cnt)-1 -: 4];

También se analiza en el desbordamiento de pila:
enlace
enlace

    
respondido por el Greg

Lea otras preguntas en las etiquetas