Error de compatibilidad de asignación en verilog

0
//Universal shift register..32 bit
// en_out=1 serial out..
//en_out=0..parallel out
module Uni_shft_reg(data_out,
data_in,
s1,s0,
lft_shf,
ryt_shf,
en_out,load,
clk,reset);
output reg [31:0]data_out;
input [31:0]data_in;
input s1,s0,clk,reset,lft_shf,ryt_shf,en_out,load;

reg temp1[31:0],temp2 [31:0],temp3[31:0];
reg f1,f2;


always @(posedge clk or negedge reset)

begin
 if (!reset)
  begin data_out <= 32'd0; end
 else
  begin
   case ({s1,s0})
    2'b00 : data_out <= data_out;
    2'b01 :begin
            if(en_out==1)
             data_out <= {ryt_shf,data_out[31:1]};
            else begin
                     temp1[31] <= ryt_shf;
                     data_out <= temp1;
                     temp1 <= {temp1[30:0],1'b0};
               end

           end
    2'b10 :begin
            case(en_out)
           1'b1: data_out <= {data_out[30:0],lft_shf};

            1'b0: begin
                     temp2[0] <= lft_shf ;
                     data_out <= temp2;

                     temp2 <= {temp2[30:0],1'b0};
 end
             endcase
           end

    2'b11 : begin
            if(en_out==0)
             data_out<=data_in;
            else
                begin
                 if (load)
                 temp3 <= data_in;
                 else
                begin  data_out<= temp3[31];
                 temp3 <= {temp3[30:0],1'b0};end
               end
            endcase
            end
   endcase
  end
end
endmodule

este es el código que he escrito para el registro de desplazamiento universal .. Al compilar ... Tengo un error que no puedo solucionar. Por favor, ayúdame ... gracias.

ERROR : Assignment compatible type required for assignment.

errores en la línea
línea 33, 34 44 46 58 61 63

    
pregunta Kiitian

1 respuesta

2

En la línea 15, estás declarando matrices: reg temp1[31:0],temp2 [31:0],temp3[31:0] mientras que tu data_out es un vector de 32 bits, no una matriz.

Entonces, en la línea 33 está asignando un valor de matriz a un solo valor vectorial. En ModelSim 10.1d obtengo

  

** Error: design.sv (33): Comparación de elementos de caso: Asignación ilegal al tipo 'reg [31: 0]' del tipo 'reg $ [31: 0]': No se puede asignar un desempaquetado   escriba a un tipo empaquetado.

Ahí lo tienes, dice que el error ocurrió aquí: Cannot assign an unpacked type to a packed type . Debes declarar las variables temporales de esta manera:

reg [31:0] temp1,temp2, temp3;

Además, hay un endcase sintaxis adicional en la línea 61. Aquí está su código modificado

    
respondido por el hassansin

Lea otras preguntas en las etiquetas