¿Cuál es la diferencia entre una matriz y un bus en Verilog?

6

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ía reg 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 si data se declara como una matriz o bus.
  • 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, pero data[0][255:0] o data[3:1][512:64] produce un error de sintaxis. ¿Existen reglas sobre cómo puede acceder a los elementos en buses y matrices?
  • ¿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.
pregunta Caleb Reister

1 respuesta

7

Un bus le permite definir valores que son más anchos que un bit. Si desea almacenar o transmitir (en paralelo) un valor entre 0 y 15, necesita un bus de 4 bits. Una matriz le permite almacenar múltiples valores bajo un solo nombre.

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

Es totalmente normal y útil crear una matriz de buses. A veces se llaman memorias, porque puedes usarlas para modelar ROM o RAM. Su software de síntesis generalmente puede reconocer cuando ha definido algo que parece ROM o RAM (por ejemplo, los datos reg [7: 0] [1023: 0] son básicamente 1K por 8 bits de RAM) y sintetizarlos como ROM física real o RAM en el chip.

Para entender qué construcción usar, solo pregúntate qué tienes. ¿Tienes un solo valor de multi-bit? Eso es un autobús. ¿Tiene un grupo de valores de un solo bit al que desea hacer referencia con un solo nombre? Luego usa una matriz. ¿Tienes un montón de valores de múltiples bits? Luego usa una memoria.

    
respondido por el Willis Blackburn

Lea otras preguntas en las etiquetas