module univ_barrel8(
input [7:0] x,
input [2:0] sh, mode,
output reg [7:0] y
);
always @(*)begin
case (mode)
3'b0: y = x;
3'b1: y = x<<sh;
3'b10: y = x>>sh;
3'b11: y = $signed(x)>>>sh;
3'b100: y = x<<sh | x>>(8-sh);
3'b101: y = x>>sh | x<<(8-sh);
default: y = x;
endcase
end
endmodule