이번 글에서는 반감산기, 전감산기 , 4bit 전감산기 만들고 전감산기 테스트벤치로 검증을 해보겠습니다.

module half_subtractor (half_a,half_b,difference,borrow);
input half_a, half_b;
output difference, borrow;
xor(difference, half_a, half_b);
and(borrow, half_a, ~half_b);
endmodule

module full_subtractor(full_a,full_b,borrow_in,difference_out, borrow_out);
input full_a,full_b, borrow_in;
output borrow_out, difference_out;
wire ha1_ha2_difference, ha1_borrow, ha2_borrow;
half_subtractor inst_half_substractor1(.half_a(full_a),.half_b(full_b), .difference(ha1_ha2_difference), .borrow(ha1_borrow));
half_subtractor inst_half_substractor2(.half_a(borrow_in), .half_b(ha1_ha2_difference), .difference(difference_out), .borrow(ha2_borrow));
or(borrow_out, ha1_borrow, ha2_borrow);
endmodule
전감산기의 진리표는 다음과 같습니다.
| A | B | Bin | D | Bout |
| 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 |
이에따라 테스트벤치를 작성합니다.
`timescale 1ns/1ns
module tb_full_subtractor;
// Inputs
reg full_a;
reg full_b;
reg borrow_in;
// Outputs
wire difference_out;
wire borrow_out;
full_subtractor inst_full_subtractor (
.full_a(full_a),
.full_b(full_b),
.borrow_in(borrow_in),
.difference_out(difference_out),
.borrow_out(borrow_out)
);
initial begin
#10;
full_a = 0;
full_b= 0;
borrow_in = 0;
#10;
full_a = 0;
full_b = 0;
borrow_in = 1;
#10;
full_a = 0;
full_b = 1;
borrow_in = 0;
#10;
full_a = 0;
full_b = 1;
borrow_in = 1;
#10;
full_a = 1;
full_b = 0;
borrow_in = 0;
#10;
full_a = 1;
full_b = 0;
borrow_in = 1;
#10;
full_a = 1;
full_b = 1;
borrow_in = 0;
#10;
full_a = 1;
full_b = 1;
borrow_in = 1;
end
endmodule


이렇게하며 4bit 전감산기를 만들었습니다.
다음내용은 다음에
'나의 전자 공부방 > Verilog 공부' 카테고리의 다른 글
| 클럭펄스 플립플롭 D플립플롭,T플립플롭,JK플립플롭, SR플립플롭 (1) | 2023.05.15 |
|---|---|
| 반감산기를 이용해 전감산기를 만들기 (1) | 2023.05.08 |
| fulladder 4개를 연결하여 4비트 전가산기 만들고 검증하기, 전가산기 4bit 2개 연결 (0) | 2023.04.23 |
| 반가산기(halfadder) 2개로 전가산기(fulladder) 만들기, 테스트벤치짜기 (0) | 2023.04.23 |