Xst: 528 - Fuente múltiple en la Unidad ved64 en la señal w51 [cerrado]

-8
module ved64 (a,b,p);
  input[63:0]a;
  input[63:0]b;
  output[127:0]p;
  wire [63:0]w0,w1,w2,w3,w4,w5,w6,t1,t2;
  vedic32 x1(a[31:0],b[31:0],w0[63:0]);
  vedic32 x2(a[31:0],b[63:32],w3[63:0]);
  vedic32 x3(a[63:32],b[31:0],w2[63:0]);
  vedic32 x4(a[63:32],b[63:32],w1[63:0]);
  rca64 x5(w2[63:0],w3[63:0],1'b0,w4[63:0],c1);
  assign t1={32'b0,w0[63:32]};
  rca64 x6(t1[63:0],w4[63:0],1'b0,w5[63:0],c2);
  assign t2={c1,31'b0,w5[63:32]};
  rca64 x7(w1[63:0],t2[63:0],1'b0,w6[63:0],c3);
  assign p[31:0]=w0[31:0];
  assign p[63:32]=w5[31:0];
  assign p[127:33]=w6[63:0];
endmodule

cómo resolver esto

    
pregunta arjun

1 respuesta

2

Su problema se encuentra al final del código donde tiene estas dos líneas:

assign p[63:32]  = ...
assign p[127:33] = ...

¿Observa cómo se superponen los bits que está asignando? Esto significa que los bits 63:33 están controlados por múltiples fuentes.

En cuanto a por qué el mensaje de error habla específicamente de w5<1> , bueno, internamente el sintetizador optimizará la existencia de p y lo reemplazará con los valores que le asignó. Los 32 bits más bajos se convertirán en w0 . Entonces el 32bit medio se convertirá en w5 . Pero luego estás intentando asignar w6 sobre la parte superior de w5 , por lo tanto, aparece el mensaje de error.

Creo que lo que quisiste decir es:

assign p[127:64] = w6;
    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas