bitwise operation 시 nbit 와 1bit를 계산하는 실수를 할 수 있다.
module top_module(
input [31:0] a,
input [31:0] b,
input sub,
output [31:0] sum
);
wire [31:0] b_sub;
wire carry;
wire cout;
assign b_sub = b ^ {32{sub}}; // 이 부분을 주의하자.
add16 add16_1 (a[15:0] , b_sub[15:0] , sub , sum[15:0], carry);
add16 add16_2 (a[31:16] , b_sub[31:16] , carry , sum[31:16], cout);
endmodule
특히 subtractor를 만들 때 operand를 2의 보수를 취해야 할 일이 있는데
이럴 때 operand와 sub(1 bit) 신호를 XOR 해줘야한다. 이때 bitwise 연산이 들어가는데, 이럴 때 sub 신호를 operand의 bit 수 만큼 복제해줘야 컴파일 에러가 나지 않는다.