Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [XX]" en el archivo de registro 8x32.v

0

Hola, estoy haciendo un archivo de registro 8x32 en verilog, el sim se ve bien, pero cuando compilo en quartus lo hace

Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [31]" en el archivo de registro 8x32.v (21) Error (10029): controlador constante en registerfile8x32.v (32) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [30]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [29]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [28]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [27]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [26]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [25]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [24]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [23]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [22]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [21]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [20]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [19]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [18]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [17]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [16]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [15]" en registerfile8x32.v (21) Error (10028): No se pueden resolver varios controladores constantes para la red "rf [7] [14]" en registerfile8x32.v (21) Error: no se puede elaborar la jerarquía de usuarios de nivel superior Error: Análisis Quartus II & La síntesis no tuvo éxito. 21 errores, 4 advertencias     Error: Memoria virtual pico: 300 megabytes.     Error: Procesamiento finalizado: sábado 27 de octubre 19:20:08 2018     Error: tiempo transcurrido: 00:00:01     Error: Tiempo total de CPU (en todos los procesadores): 00:00:01 Error: la compilación completa de Quartus II no tuvo éxito. 23 errores, 4 advertencias

// Defino todos los parametros, entradas, salidas, regs,etc.
module registerfile8x32(addrsrc1_i,addrsrc2_i,addrdest_i,dest_i,
                        src1_o,src2_o,clk_i,rst_n_i,wr_i);

  input [2:0] addrsrc1_i;
  input [2:0] addrsrc2_i;
  input [2:0] addrdest_i;
  input [31:0] dest_i;
  input clk_i,rst_n_i,wr_i;

  output [31:0]src1_o;
  output [31:0]src2_o;

  reg [31:0] rf[7:0];
  reg [31:0]src1_o;
  reg [31:0]src2_o;
  integer i; //Necesito este iterador para el bucle for, con el que lleno todos los reg de 0s.

  // Esta parte de codigo es ASINCRONA, lo primero que miro es el reset, si esta a 0 reseteo todos
  // los registros.
  always@(negedge rst_n_i)
    begin
      if (rst_n_i == 0) // Miro si el reset esta a 0
        begin
          for(i=0; i<8; i=i+1) // Si lo está, lleno los registros de 0s.
          rf[i]<= 32'b0;
        end
    end

  // Positive edge clock y write enable.
  // Esta parte del codigo es nuestra parte SINCRONA, con el reloj y el write enable.
  always@(posedge clk_i or wr_i)
    begin
      if (wr_i) // Si write enable esta a 1
        begin
        rf[addrdest_i] <= dest_i; // Escribo en el registro de destino.
      end
      else if (!wr_i) // Si WE no esta activo, el registo mantiene el valor que ya tenia.
        begin
          rf[addrdest_i] <= rf[addrdest_i];
        end
    end
  // Esta parte del codigo vuelve a ser ASINCRONA mira las direcciones de lectura

  always@(addrsrc2_i or addrsrc1_i)
    begin
      src1_o <= rf[addrsrc1_i];
      src2_o <= rf[addrsrc2_i];
    end
  endmodule
    
pregunta Gabe Logan

1 respuesta

0

No puede realizar asignaciones a una señal (como rf[] ) en más de un bloque always .

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas