베릴로그

Verilog - 1bit Half Adder, Full Adder (인스턴스화)

aude_ 2025. 3. 9. 21:50

Half Adder

1bit a와 b를 받아서 add

sum과 carry 발생

 

진리표 

a     b     |    s      c

_______|________

0     0     |    0      0

0     1     |    1      0

1     0     |    1      0

1     1     |    0      1

 

s = a^b  (a xor b)

c = a&b (a and b)

 

 

코드

Full Adder

1bit a와 b그리고 cin(carry)를 받아서 add

sum과 carry 발생

 

진리표

cin    a     b     |    s      c

___________|________

0      0     0     |    0      0

0      0     1     |    1      0

0      1     0     |    1      0

0      1     1     |    0      1

1      0     0     |    1      0

1      0     1     |    0      1

1      1     0     |    0      1

1      1     1     |    1      1

 

 

 

아래 그림처럼 1 bit Half Adder 2개로 1bit Full Adder를 만들 수 있습니다.

 

그림1

위에서 만든 Half Adder를 이용해보겠습니다.

 

 

인스턴스화

full_adder 모듈을 만들어 줬습니다.

그림 1을 참고해서 port를 구성해주었습니다.

 

현재까지의 코드 상황을 그림으로 표현하면 아래와 같습니다

full adder는 겉에 껍데기만 있는 상태고 안에는 아무것도 없는 상태입니다.

그림1에서 보았듯이 여기에 half_adder를 2개 넣어야 합니다.

이때 half_adder를 아래처럼 인스턴스화해서 2개를 만들어 넣어야합니다.

 

 

 

코드는 다음과 같습니다.

 

노란색으로 강조한 부분처럼 instance화 할 수 있습니다. ('모듈명 인스턴스명' 순서로)

.a, .b, .s, .c는 모듈의 포트명입니다.(half_adder)

 

우선 포트들을 연결해주겠습니다.

위 그림처럼 연결해주기 위해서 코드를 다음과 같이 해줍니다.

full _adder에 선언해준 port를 안의 인스턴스와 연결해줍니다

 

 

 

다음은 u_half_adder_1과 u_half_adder_2를 아래처럼 연결해주어야 합니다.

하지만 full_adder에서 선언해준 input 과 output들로  u_half_adder_1과 u_half_adder_2를 연결해 줄 수 없습니다. 

따라서 새로운 wire를 선언해주고 연결해주어야 합니다

위와 같이 선언해주면 아래 그림과 같은 상태가 됩니다.

 

 

 

여기서 cin도 마저 연결해줍니다.

 

 

 

 

 

마지막으로 그림1에서 보았던 것 처럼 u_half_adder_1과 u_half_adder_2에서 나온 각 c를 or를 이용해서 full_adder carry와 연결해주어야 합니다. 그럼 각각의 u_half_adder에서 와이어 1개씩 2개가 필요합니다.

위와 같은 그림을 만들어 주기위해 와이어 w_c1과 w_c2를 선언해줍니다.

그리고 or를 이용해서 carry와 연결 시켜줍니다.

코드는 아래와 같습니다

그럼 최종 코드와 모습은 아래와 같습니다.

 

이렇게 1bit half_ adder 모듈인스턴스화 해서 1bit full adder를 verilog code로 만들 수 있습니다.

'베릴로그' 카테고리의 다른 글

Verilog 1주차 - Testbench  (0) 2025.03.03
Verilog 1주차 - 기본 작성법  (0) 2025.03.03