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 autobús?
- Durante la declaración, un autobús se vería algo así como
reg [9:0]data
mientras que una matriz seríareg data[9:0]
. ¿Hay una diferencia sutil (o no tan sutil) en la forma en que el lenguaje maneja estos casos? - ¿Por qué se declara un autobús 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 autobús.
- Durante la declaración, un autobús se vería algo así como
- He encontrado que es posible (aunque confuso) crear declaraciones como
reg [4:0]busArray[3:0]
que crearía registros de 4 y 5 bits.- ¿Es una mala práctica?
- ¿En qué se diferencia 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?
Tengo algunas otras preguntas relacionadas también...
- Cuando tienes una declaración como
reg [7:0]data[1023:0]
es posible acceder a los bits y rangos individuales?- He tenido problemas para acceder a los rangos de bits. Por ejemplo,
data[7:0][4]
parece funcionar, perodata[0][255:0]
odata[3:1][512:64]
resulta en un error de sintaxis. ¿Hay reglas sobre cómo se puede acceder a los elementos en los autobuses y matrices?
- He tenido problemas para acceder a los rangos de bits. Por ejemplo,
- ¿Es posible declarar un autobús multidimensional? (algo así como
reg [15:0][8:0]data
) - ¿Hay alguna manera de escribir a máquina una matriz para que sea tratada como un autobús? Esto podría ser útil para pasar una matriz a un módulo diseñado para aceptar un autobús.