Prev Problem
Next Problem

70. Universal Barrel Shifter

Back To All Submissions
Previous Submission
Next Submission

Solving Approach

How do you plan to solve it?

 

Code

/*Write your code here*/
module univ_barrel8
(
input wire [7:0] x,
input wire [2:0] sh,mode,
output reg [7:0] y
);
always@*
begin
    case(mode)
    3'd0:y=x;
    3'd1:
        begin
            case(sh)
            3'd1:y={x[6:0],1'd0};
            3'd2:y={x[5:0],2'd0};
            3'd3:y={x[4:0],3'd0};           
            3'd4:y={x[3:0],4'd0};
            3'd5:y={x[2:0],5'd0};
            3'd6:y={x[1:0],6'd0};
            3'd7:y={x[0],7'd0};
            3'd0:y=x;
            endcase
        end
    3'd2:        
        begin
            case(sh)
            3'd1:y={1'd0,x[7:1]};
            3'd2:y={2'd0,x[7:2]};
            3'd3:y={3'd0,x[7:3]};          
            3'd4:y={4'd0,x[7:4]};
            3'd5:y={5'd0,x[7:5]};
            3'd6:y={6'd0,x[7:6]};
            3'd7:y={7'd0,x[7]};
            3'd0:y=x;
            endcase
        end
    3'd3:        
        begin
            case(sh)
            3'd1:y={x[7],x[7:1]};
            3'd2:y={{2{x[7]}},x[7:2]};
            3'd3:y={{3{x[7]}},x[7:3]};          
            3'd4:y={{4{x[7]}},x[7:4]};
            3'd5:y={{5{x[7]}},x[7:5]};
            3'd6:y={{6{x[7]}},x[7:6]};
            3'd7:y={{7{x[7]}},x[7]};
            3'd0:y=x;
            endcase
        end
    3'd4:
        begin
            case(sh)
            3'd0:y=x;
            3'd1:y={x[6:0],x[7]};
            3'd2:y={x[5:0],x[7:6]};
            3'd3:y={x[4:0],x[7:5]};
            3'd4:y={x[3:0],x[7:4]};
            3'd5:y={x[3:0],x[7:3]};
            3'd6:y={x[1:0],x[7:2]};
            3'd7:y={x[0],x[7:1]};
            endcase
        end
    3'd5:        
        begin
            case(sh)
            3'd0:y=x;
            3'd1:y={x[0],x[7:1]};
            3'd2:y={x[1:0],x[7:2]};
            3'd3:y={x[2:0],x[7:3]};
            3'd4:y={x[3:0],x[7:4]};
            3'd5:y={x[4:0],x[7:5]};
            3'd6:y={x[5:0],x[7:6]};
            3'd7:y={x[6:0],x[7]};
            endcase
        end
    3'd6:y=x;
    3'd7:y=x;
    endcase
end

endmodule

 

Was this helpful?
Upvote
Downvote