out needs to be a reg type to be assigned in an always block.
-
IEEE Std 1364-1995 and above
output [31:0] out; reg [31:0] out; -
IEEE Std 1364-2001 and above (recommenced)
output reg [31:0] out;
Other problem, i0 through 3 are in in the sensitivity list of your always block. This infers complex latching logic.
-
IEEE Std 1364-1995 and above
always @(s0 or i0 or i1 or i2 or i3) -
IEEE Std 1364-2001 and above (recommenced)
always @* // or @(*)
solved Mips instruction single cycle datapath