본문 바로가기
Digital Design/논리회로

[논리회로] Full Subtractor (Design with Verilog)

by 스테고사우르스 2023. 1. 2.

Full Subtractor (전감산기) 입니다.

 

 

먼저 진리표입니다.

 

INPUT OUTPUT
X Y Borrow_in Difference Borrow_out
0 0 0 0 0
0 0 1 1 1
0 1 0 1 1
0 1 1 0 1
1 0 0 1 0
1 0 1 0 0
1 1 0 0 0
1 1 1 1 1

 

Difference = X ⊕ Y ⊕ B_in

Borrow_out = X'Y + YBin + BinX'

 

 

 

이 결과를 바탕으로 회로를 만들어보면 다음과 같습니다.

 

Full Subtractor

 

Full Subtractor 역시 마찬가지로 Full Adder에 NOT gate만 추가해 주면 됩니다.

또한 Half Subtractor 두 개로 나누어 표현하여도 됩니다.

 

 


Verilog Code

Full Subtractor를 Verilog로 설계하였습니다.

 

DUT

`timescale 1ns / 1ps

module full_subtractor(
i_x,
i_y,
i_bor,
o_diff,
o_bor
    );

input i_x, i_y, i_bor;
output o_diff, o_bor;

assign o_diff =   i_x  ^ i_y ^ i_bor;
assign o_bor  = ((~i_x) & i_y) | ((~i_x) & i_bor) | (i_bor & i_y);

endmodule

 

Testbench

`timescale 1ns / 1ps

module tb_full_subtractor();

reg i_x, i_y, i_bor;
wire o_diff, o_bor;

full_subtractor fs ( .i_x    (i_x)     ,
                     .i_y    (i_y)     ,
                     .i_bor  (i_bor)   ,
                     .o_diff (o_diff)  ,
                     .o_bor  (o_bor)   );
                     
initial begin
    i_x = 1'b0; i_y = 1'b0; i_bor = 1'b0;  #10
    i_x = 1'b0; i_y = 1'b0; i_bor = 1'b1;  #10
    i_x = 1'b0; i_y = 1'b1; i_bor = 1'b0;  #10
    i_x = 1'b0; i_y = 1'b1; i_bor = 1'b1;  #10
    i_x = 1'b1; i_y = 1'b0; i_bor = 1'b0;  #10
    i_x = 1'b1; i_y = 1'b0; i_bor = 1'b1;  #10
    i_x = 1'b1; i_y = 1'b1; i_bor = 1'b0;  #10
    i_x = 1'b1; i_y = 1'b1; i_bor = 1'b1;  #10
    $finish;
end

endmodule

 

Simulation

댓글