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?

the arithmetic shift operator >>> works only on signed values, by default the values are unsigned, you need to explicitly tell the input is signed , using $signed . 

Code

/*Write your code here*/
module univ_barrel8(input[7:0] x,input[2:0] sh,mode,output reg[7:0]y);
always@(*)begin
  
   
    
case(mode)
3'b000: y=x;
3'b001: y=x<<sh;
3'b010: y=x>>sh;
3'b011: 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

 

Was this helpful?
Upvote
Downvote