Ошибка в строке, на которую ругается.
И output нельзя опсать как двумерный массив
module shift
#(parameter n = 8)
(
input C,
input [n-1:0] SI,
output [16*n-1:0] PO
);
reg [15:0] temp [n-1:0];
integer i;
always @(posedge C)
begin
for(i = 0; i < n; i = i + 1)
temp[i] <= {temp[i][14:0], SI[i]};
end
genvar j;
generate for(j = 0; j < n; j = j + 1)
begin:bit_a
assign PO[16*(j+1)-1:16*j] = temp[j];
end
endgenerate
endmodule