가산기와 증분기 구현
가산기
구현
- 코드를 작성해보기 전에 가산기의 동작을 생각해보자.
LSB는 반가산기를 통해서 더해주고, 나머지는 carry 비트가 추가적으로 필요하니 전가산기를 써주면 될 것 같다.
- 코드를 작성해보기 전에 가산기의 동작을 생각해보자.
HDL
CHIP Add16 { IN a[16], b[16]; OUT out[16]; PARTS: HalfAdder(a= a[0], b= b[0], sum= out[0], carry= carry0); FullAdder(a= a[1], b= b[1], c= carry0, sum= out[1], carry= carry1); FullAdder(a= a[2], b= b[2], c= carry1, sum= out[2], carry= carry2); FullAdder(a= a[3], b= b[3], c= carry2, sum= out[3], carry= carry3); FullAdder(a= a[4], b= b[4], c= carry3, sum= out[4], carry= carry4); FullAdder(a= a[5], b= b[5], c= carry4, sum= out[5], carry= carry5); FullAdder(a= a[6], b= b[6], c= carry5, sum= out[6], carry= carry6); FullAdder(a= a[7], b= b[7], c= carry6, sum= out[7], carry= carry7); FullAdder(a= a[8], b= b[8], c= carry7, sum= out[8], carry= carry8); FullAdder(a= a[9], b= b[9], c= carry8, sum= out[9], carry= carry9); FullAdder(a= a[10], b= b[10], c= carry9, sum= out[10], carry= carry10); FullAdder(a= a[11], b= b[11], c= carry10, sum= out[11], carry= carry11); FullAdder(a= a[12], b= b[12], c= carry11, sum= out[12], carry= carry12); FullAdder(a= a[13], b= b[13], c= carry12, sum= out[13], carry= carry13); FullAdder(a= a[14], b= b[14], c= carry13, sum= out[14], carry= carry14); FullAdder(a= a[15], b= b[15], c= carry14, sum= out[15], carry= carry15); }
증분기
구현
- 이전에 증분기의 동작을 생각해보자.
증분기는 입력으로 들어온 값에 1을 더해주는 칩이다.
그러면 b가 0000…01(16비트)인 b값을 가지는 가산기로 생각할 수 있다.
그러니 반가산기만 사용해서 더해주면 된다.
- 이전에 증분기의 동작을 생각해보자.
HDL
CHIP Inc16 { IN in[16]; OUT out[16]; PARTS: HalfAdder(a= in[0], b= true, sum= out[0], carry= carry0); HalfAdder(a= in[1], b= carry0, sum= out[1], carry= carry1); HalfAdder(a= in[2], b= carry1, sum= out[2], carry= carry2); HalfAdder(a= in[3], b= carry2, sum= out[3], carry= carry3); HalfAdder(a= in[4], b= carry3, sum= out[4], carry= carry4); HalfAdder(a= in[5], b= carry4, sum= out[5], carry= carry5); HalfAdder(a= in[6], b= carry5, sum= out[6], carry= carry6); HalfAdder(a= in[7], b= carry6, sum= out[7], carry= carry7); HalfAdder(a= in[8], b= carry7, sum= out[8], carry= carry8); HalfAdder(a= in[9], b= carry8, sum= out[9], carry= carry9); HalfAdder(a= in[10], b= carry9, sum= out[10], carry= carry10); HalfAdder(a= in[11], b= carry10, sum= out[11], carry= carry11); HalfAdder(a= in[12], b= carry11, sum= out[12], carry= carry12); HalfAdder(a= in[13], b= carry12, sum= out[13], carry= carry13); HalfAdder(a= in[14], b= carry13, sum= out[14], carry= carry14); HalfAdder(a= in[15], b= carry14, sum= out[15], carry= carry15); }
'개발 > 개발 공부' 카테고리의 다른 글
검색 구현을 위한 기초 공부 (0) | 2025.05.05 |
---|---|
[밑바닥부터] 8일차 - 2장 불 연산: ALU 구현 및 테스트 (0) | 2025.04.13 |
[밑바닥부터] 6일차 - 2장 불 연산: 반가산기, 전가산기 구현 (0) | 2025.04.13 |
[밑바닥부터] 5일차 - 2장 불 연산: 가산기 아키텍처, ALU 설계 (0) | 2025.04.10 |
[밑바닥부터] 4일차 - 2장 불 연산: 이진수 표현, 2의 보수법 (0) | 2025.04.10 |