LHS de siempre bloque en verilog debe estar registrado, pero el índice de matriz en LHS de siempre bloquear no puede ser un registro, ¿es cierto? [duplicar]

-3

Estoy tratando de sintetizar un archivo verilog con una parte de código como esta (obviamente no había declarado el módulo y otras variables de entrada y salida)

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];

donde había usado reg como índice del elemento de matriz, por lo que no es válido, aunque este módulo dentro de mi archivo verilog no se sintetizó, ya que contiene un elemento de memoria, pero solo quiero confirmar que es válido usar reg como índice de matriz? No quiero encontrar nada en la red a este respecto, pero si se toma el registro como índice, haré que la matriz actúe como búfer y creo que debe ser un código válido.

    
pregunta shailendra

1 respuesta

3

Un reg puede usarse como el valor de índice de la matriz en LHS de siempre bloquear.

Un reg es un valor que puede almacenar un valor. No necesita la asignación continua como un wire . reg no es sinónimo de flop (o latch) y esto donde algunos se confunden. Flops y latches son decididos por el sintetizador basado en el estilo de codificación RTL. Ejemplos:

reg [15:0] a, b, c, q, idx;
always @(posedge clk) a <= q; // 'a' will be a flop
always @* if(en) b <= a; // 'b' will be a latch
always @* c = a ^ b; // 'c' will be wire (continuous assignment)
always @(posedge clk)
  for(idx=0; idx<16; idx=idx+1) // 'idx' will be omitted in synthesis
    q[idx] <= idx%2 ? a[idx]^c[15-idx] : a[15-idx]^c[idx]; // 'q' will be a flop
    // synthesis will create an intermediate wire(s) for the D pin to the 'q' flop

reg s debe asignarse dentro de un bloque always para sintetizarse. Para el modelo de comportamiento, reg también se puede asignar en cualquier initial bloques, task y function .

    
respondido por el Greg

Lea otras preguntas en las etiquetas