본문 바로가기
나의 전자 공부방/Verilog 공부

반감산기, 전감산기 , 4bit 전감산기 만들고 전감산기 테스트벤치로 검증하기.

by 나만의생각 2023. 4. 24.

이번 글에서는 반감산기, 전감산기 , 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 전감산기

 

 

이렇게하며 4bit 전감산기를 만들었습니다.

 

다음내용은 다음에