들어가며
복잡한 소프트웨어가 원활히 동작하려면 단순히 코드만 잘 짜는 것으로는 부족합니다. 트랜잭션 처리나 대규모 데이터 연산처럼 높은 성능을 요구하는 작업일수록, 컴퓨터 구조 그 밑단에서 실제 신호가 어떻게 흐르고 연산이 어떻게 병렬 처리되는지를 알아야 최적화와 병목 해소가 가능합니다. 하드웨어 레벨의 동작 원리를 이해하면 추상화된 코드가 메모리와 연산 유닛 사이에서 어떤 과정을 거치는지 선명히 보이기 때문에, 더 효율적인 알고리즘 설계와 디버깅이 가능해집니다.
지난주에는 진리표 작성, 불 대수 간략화, 진법 변환, 논리 회로 구현까지 단계별 미션을 수행하며 Logisim 사용법과 기본 회로 설계 과정을 익혔습니다.
이번 2주차에서는 “만들면서 쉽게 배우는 컴퓨터 구조” 스터디의 두 번째 미션으로, 이전에 익힌 논리 연산과 회로 구성 스킬을 확장해, 터널링으로 배선을 정리하고, 다수 입력을 다루는 대용량 MUX, 산술·논리 연산을 수행하는 ALU, 그리고 RAM까지 직접 구현해 봄으로써 하드웨어 설계 역량을 한 단계 끌어올리고자 합니다.
- 미션1. 모든 회로 연결을 터널(Tunnel)로 대체
- 미션2. 8비트 32입력 MUX 제작
- 미션3. 10비트 입력 두 개(A, B)를 계산하는 ALU 설계
- 미션4. 32비트 RAM 구현
각 미션별 설계 전략과 인사이트를 공유합니다.
미션1. 모든 회로 연결을 터널(Tunnel)로 대체
목표
- 복잡한 배선 대신 Logisim의 Tunnel 컴포넌트를 사용해 회로 가독성을 높인다.
구현 방법

- 기존에 배선으로 직결된 신호선(Selection, 각 입력/출력)을 터널로 모두 대체.
- Tunnel 이름을 부여해 입력·출력 라벨 역할을 수행하도록 설정.
구현 후
- 배선이 모두 숨겨져 캔버스가 한결 깔끔해졌고, 각 터널 간 신호 흐름을 라벨만으로 직관적으로 파악할 수 있게 되었습니다.
미션2. 8비트 32입력 MUX 제작
목표
- 32개의 8비트 입력 IN_0…IN_31 중 하나를 선택해 출력하는 MUX를 구현.
- SELECTION 으로 0~31 중 하나를 지정.
구현 방법

- Logisim 기본 내장된 32-to-1 MUX 컴포넌트를 사용.
- 각 입력에 8비트 버스를 연결하고, 출력도 8비트 버스로 설정.
구현 후
- 32개의 입력 버스와 8비트 출력이 매끄럽게 동작함을 확인.
- 선택선 값을 바꿔가며 각 입력이 정확히 출력으로 전달되는지 검증하였습니다.
미션3. 10비트 입력 두 개(A, B)를 계산하는 ALU 설계
목표
- 10비트 입력 A, B에 대해 덧셈(또는 뺄셈)이 가능한 ALU를 설계.
- Carry-in(SU), Carry-out(CF), Zero Flag(ZF), SUM을 생성.
구현 방법

- 연산 선택: SU=0일 때 덧셈, SU=1일 때 뺄셈
- 풀 애더 체인: 10개의 Full Adder를 직렬로 연결하여 비트 단위 연산 수행.
- 뺄셈 지원: B 입력을 XOR 게이트로 반전하고 Carry-in을 SU로 연결.
- Zero Flag: 출력 버스의 비트를 연산해 0일 때 ZF=1.
- Carry Flag: 마지막 Full Adder의 Carry-out을 CF에 연결.
구현 후
- SU=0 상태에서 10비트 덧셈, SU=1 상태에서 보수 덧셈(뺄셈)이 정상 동작함을 확인.
- 여러 조합(예: A=0000000111, B=0000000001)으로 테스트하여 Carry와 Zero Flag가 올바르게 생성되는지 검증했습니다.
미션4. 32비트 RAM 구현
목표
- 4비트 주소, 32비트 데이터 입력, 쓰기 활성화(ENABLE_WRITE), 읽기 활성화(ENABLE_OUT) 지원 RAM 구현.
구현 방법

- 디코더: 디코더를 사용해 ENABLE_WRITE와 AND 연산 → 각 레지스터의 Load 신호 생성.
- 읽기: ADDRESS 에 따라 출력 버스 선택
구현 후
- 주소에 따라 해당 레지스터만 쓰기·읽기가 활성화됨을 확인.
- ENABLE_WRITE=1일 때 DATA_IN이 선택된 레지스터로 로드되고, ENABLE_OUT=1일 때 읽기 MUX로 정상 출력됨을 테스트했습니다.
느낀 점
- 터널 활용의 중요성
- 복잡 회로일수록 배선 가독성이 떨어지는데, 터널로 대체하면 회로 블록의 논리 구조에 더 집중할 수 있습니다.
- 대용량 MUX 설계 경험
- 32입력 MUX 같은 대규모 컴포넌트는 직접 게이트로 구현하기보다 Logisim 내장 기능을 활용해 신속히 구축하는 것이 효율적입니다.
- 풀 애더 체인과 플래그 회로
- ALU 설계 과정에서 Carry-in 처리와 Zero Flag 회로 연결 방식을 반복 학습해, 나중에 더 복잡한 산술 연산 장치도 자신 있게 설계할 수 있게 되었습니다.
- 레지스터 파일 구조
- 디코더 + 레지스터 + MUX 조합이 CPU 레지스터 파일의 기본 패턴임을 체득했습니다.
마치며
이번 미션을 통해 터널링, 대용량 MUX, 산술 논리 장치, 레지스터 파일이라는 CPU 설계의 핵심 요소를 모두 구현해 보았습니다. 각 블록을 손수 연결·검증하면서 “소프트웨어가 어떻게 하드웨어에서 동작하는가”를 더욱 선명하게 체감할 수 있었습니다. 앞으로도 이 경험을 바탕으로 더 복잡한 회로 설계와 최적화에 도전해 나가겠습니다. 감사합니다!