7 votos

¿Cuál es la diferencia entre una matriz y un autobús en Verilog?

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ía reg 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 si data se declara como una matriz o autobús.
  • 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, pero data[0][255:0] o data[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?
  • ¿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.

10voto

Ben Puntos 444

Un autobús permite definir valores que son más amplios que un bit. Si quieres almacenar o transmitir (en paralelo) un valor entre 0 y 15, necesitas un bus de 4 bits. Una matriz permite almacenar varios valores con un solo nombre.

La diferencia entre "[7:0] datos" y "datos[7:0]" es que el primero es un valor único de 8 bits de ancho, mientras que el segundo es un valor de 8 bits de ancho.

Es totalmente normal y útil crear una serie de autobuses. A veces se llaman memorias, porque puedes usarlas para modelar la ROM o la RAM. Tu software de síntesis suele reconocer cuando has definido algo que se parece a la ROM o la RAM (por ejemplo, reg [7:0] datos[1023:0] es básicamente 1K por 8 bits de RAM) y lo sintetiza como ROM o RAM física real en el chip.

Para entender qué construcción usar, sólo pregúntese qué es lo que tiene. ¿Tienes un único valor multi-bit? Eso es un autobús. ¿Tienes un montón de valores de un solo bit que quieres referenciar usando un solo nombre? Entonces usa una matriz. ¿Tienes un montón de valores multi-bit? Entonces usa una memoria.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X