He estado aprendiendo Verilog y Vivado en la escuela, y ahora estoy muy confundido por el uso de autobuses y matrices. ¿Alguien puede aclarar lo siguiente?
- ¿Cuál es la diferencia entre una matriz y un bus?
- Durante la declaración, un bus se vería como
reg [9:0]data
mientras que una matriz seríareg data[9:0]
. ¿Existe una diferencia sutil (o no tan sutil) en la forma en que el lenguaje maneja estos casos? - ¿Por qué se declara un bus con un índice delante del nombre de la variable, pero se hace referencia con un índice detrás? Por ejemplo,
data[3]
funcionaría independientemente de sidata
se declara como una matriz o bus.
- Durante la declaración, un bus se vería como
- Descubrí que es posible (aunque confuso) crear declaraciones como
reg [4:0]busArray[3:0]
, lo que crearía registros 4x de 5 bits.- ¿Es esta mala práctica?
- ¿En qué se diferencia esto de la matriz 2d declarada
reg arrayArray[4:0][3:0]
?
- ¿Cuándo debo usar un autobús y cuándo debo usar una matriz?
También tengo otras preguntas relacionadas ...
- Cuando tiene una declaración como
reg [7:0]data[1023:0]
, ¿es posible acceder a bits y rangos individuales?- He tenido problemas para acceder a rangos de bits. Por ejemplo,
data[7:0][4]
parece funcionar, perodata[0][255:0]
odata[3:1][512:64]
produce un error de sintaxis. ¿Existen reglas sobre cómo puede acceder a los elementos en buses y matrices?
- He tenido problemas para acceder a rangos de bits. Por ejemplo,
- ¿Es posible declarar un bus multidimensional? (algo como
reg [15:0][8:0]data
) - ¿Hay una manera de escribir cast una matriz para que sea tratada como un bus? Esto podría ser útil para pasar una matriz a un módulo diseñado para aceptar un bus.