[Verilog] >>, <<, >>>, <<< 연산자 시뮬레이션 결과
Revision history:
220928 최초 작성
Verilog에서 >>, << 연산자와 <<<, >>> 연산자가 있다.
계산 예를 보고 차이점을 직관적으로 알 수 있다.
Vivado2020.2 Xsim 코드 및 결과
wire signed [3:0] w_val = 4'b1011 ; // Signed로 명시 필요
wire [3:0] w_val_0 ;
wire [3:0] w_val_1 ;
wire [3:0] w_val_2 ;
wire [3:0] w_val_3 ;
wire [3:0] w_val_4 ;
wire [3:0] w_val_5 ;
wire [3:0] w_val_6 ;
wire [3:0] w_val_7 ;
// >> 연산자 사용
assign w_val_0 = w_val >> 0 ;
assign w_val_1 = w_val >> 1 ;
assign w_val_2 = w_val >> 2 ;
assign w_val_3 = w_val >> 3 ;
// >>> 연산자 사용
assign w_val_4 = w_val >>> 0 ;
assign w_val_5 = w_val >>> 1 ;
assign w_val_6 = w_val >>> 2 ;
assign w_val_7 = w_val >>> 3 ;
w_val에 '>>' 연산자를 사용하면 MSB에 0이 채워지고
w_val에 '>>>' 연산자를 사용하면 MSB에 Singed bit로 채워진다.
그외 시뮬레이션
wire signed [3:0] w_val = 4'b0011 ;
wire [3:0] w_val_0 ;
wire [3:0] w_val_1 ;
wire [3:0] w_val_2 ;
wire [3:0] w_val_3 ;
wire [3:0] w_val_4 ;
wire [3:0] w_val_5 ;
wire [3:0] w_val_6 ;
wire [3:0] w_val_7 ;
assign w_val_0 = w_val >> 0 ;
assign w_val_1 = w_val >> 1 ;
assign w_val_2 = w_val >> 2 ;
assign w_val_3 = w_val >> 3 ;
assign w_val_4 = w_val >>> 0 ;
assign w_val_5 = w_val >>> 1 ;
assign w_val_6 = w_val >>> 2 ;
assign w_val_7 = w_val >>> 3 ;
wire [3:0] w_val = 4'b1011 ;
wire [3:0] w_val_0 ;
wire [3:0] w_val_1 ;
wire [3:0] w_val_2 ;
wire [3:0] w_val_3 ;
wire [3:0] w_val_4 ;
wire [3:0] w_val_5 ;
wire [3:0] w_val_6 ;
wire [3:0] w_val_7 ;
assign w_val_0 = w_val >> 0 ;
assign w_val_1 = w_val >> 1 ;
assign w_val_2 = w_val >> 2 ;
assign w_val_3 = w_val >> 3 ;
assign w_val_4 = w_val >>> 0 ;
assign w_val_5 = w_val >>> 1 ;
assign w_val_6 = w_val >>> 2 ;
assign w_val_7 = w_val >>> 3 ;
wire signed [3:0] w_val = 4'b1011 ;
wire [3:0] w_val_0 ;
wire [3:0] w_val_1 ;
wire [3:0] w_val_2 ;
wire [3:0] w_val_3 ;
wire [3:0] w_val_4 ;
wire [3:0] w_val_5 ;
wire [3:0] w_val_6 ;
wire [3:0] w_val_7 ;
assign w_val_0 = w_val << 0 ;
assign w_val_1 = w_val << 1 ;
assign w_val_2 = w_val << 2 ;
assign w_val_3 = w_val << 3 ;
assign w_val_4 = w_val <<< 0 ;
assign w_val_5 = w_val <<< 1 ;
assign w_val_6 = w_val <<< 2 ;
assign w_val_7 = w_val <<< 3 ;