Lectura y escritura de valores en matrices multidimensionales en verilog

1

¿Cómo podemos leer y escribir valores en una matriz multidimensional en verilog? He leído en este enlace sobre diferentes operaciones Eso se puede hacer en matriz multidimensional. como si hay una parte de código como esta

input [15:0] me;

reg [15:0] p_array [7:0];
reg abc_pqr [2:0];

abc_pqr[0] <= me[0];
abc_pqr[1] <= me[1];
abc_pqr[2] <= me[1];
p_array[abc_pqr[0]] <= me[0];
p_array[abc_pqr[1]] <= me[1];
p_array[abc_pqr[2]] <= me[2];

entonces, ¿este código funcionará y no producirá ningún error?

¿Cuál es la diferencia entre estos dos al asignar valor

"<=" y "=", he visto "<=" en la mayoría de los lugares durante los valores que pasan.     

pregunta shailendra

1 respuesta

2

Esta no es una pregunta, pero desglosa los puntos principales:

<= es una asignación no bloqueante que se usa cuando implica una salida de flip-flop.
= es una asignación de bloqueo que se usa cuando se implementa una salida combinatoria.

uso de ejemplo:

input [10:0] in_data;

reg [11:0] flip_flop;
reg [11:0] next_data

//Flip-flop
always @(posedge clock) begin
  flip_flop <= next_data;
end

//Combinatorial
always @* begin
  next_data = in_data + 11'd1;
end 

Has definido 3 tipos de datos diferentes:

input [15:0] me;
reg [15:0] p_array [7:0];
reg abc_pqr [2:0];          //Same as reg [0:0] abc_pqr [2:0]

me es una palabra estándar de 16 bits. p_array es una memoria profunda de 8 palabras de 16 bits.
NB: es típico definirlo como reg [15: 0] p_array [0: 7]; abc_pqr [2:0]; es una memoria de 1 bit de 3 bits.

Tienes:

abc_pqr[0] <= me[0]; //This is a 1 bit assignment:
abc_pqr[1] <= me[1];
abc_pqr[2] <= me[2]; //<-- corrected this to 2

Parece válido.

Entonces:

p_array[abc_pqr[0]] <= me[0];

p_array necesita un índice [7:0] de ancho, solo ha proporcionado 1 bit. y un elemento p_array tiene 16 bits de ancho, su lado izquierdo nuevamente tiene solo 1 bit.

    
respondido por el pre_randomize

Lea otras preguntas en las etiquetas