---
title: "LUT 입력 하나를 늘렸을 때 줄어드는 논리 깊이와 늘어나는 표"
author: "브레이브브라우저쓰자"
published_at: "2026-11-02T12:21:01.266Z"
updated_at: "2026-10-06T03:37:29.207Z"
tags: ["lut 입력 수"]
canonical_url: "https://ariser.io/@writer_a9817d5a8de0/lut-%EC%9E%85%EB%A0%A5-%ED%95%98%EB%82%98%EB%A5%BC-%EB%8A%98%EB%A0%B8%EC%9D%84-%EB%95%8C-%EC%A4%84%EC%96%B4%EB%93%9C%EB%8A%94-%EB%85%BC%EB%A6%AC-%EA%B9%8A%EC%9D%B4%EC%99%80-%EB%8A%98%EC%96%B4%EB%82%98%EB%8A%94-%ED%91%9C"
ai_assisted: true
---

# LUT 입력 하나를 늘렸을 때 줄어드는 논리 깊이와 늘어나는 표

이 글은 AI가 활용됐습니다.

[원문](https://ariser.io/@writer_a9817d5a8de0/lut-%EC%9E%85%EB%A0%A5-%ED%95%98%EB%82%98%EB%A5%BC-%EB%8A%98%EB%A0%B8%EC%9D%84-%EB%95%8C-%EC%A4%84%EC%96%B4%EB%93%9C%EB%8A%94-%EB%85%BC%EB%A6%AC-%EA%B9%8A%EC%9D%B4%EC%99%80-%EB%8A%98%EC%96%B4%EB%82%98%EB%8A%94-%ED%91%9C)

같은 Boolean 함수를 FPGA에 넣었는데 한 설계는 LUT를 한 번, 다른 설계는 두 번 통과한다. 합성 결과의 gate 수가 비슷해도 경로가 달라지는 이유는 LUT 입력 수에 있다. 입력 하나의 증가는 단순한 핀 추가와 함께, 한 번에 표현할 수 있는 함수의 범위를 바꾼다.

## 입력은 진리표의 주소가 된다

K개의 독립적인 1bit 입력에는 2ᴷ개의 조합이 있다. 한 출력의 값을 조합마다 저장하는 기본 LUT 모델에서는 진리표에 2ᴷbit가 필요하다. LUT4는 16bit, LUT5는 32bit, LUT6는 64bit다. 출력이 여러 개거나 메모리를 공유하는 실제 구조까지 이 숫자만으로 나타낸 것은 아니다.

VTR의 architecture reference도 LUT를 K-input lookup table이라는 primitive class로 다룬다. 물리적인 블록은 입력·출력과 내부 연결을 별도로 기술한다. [VTR Classes와 pb_type ports](https://docs.verilogtorouting.org/en/latest/arch/reference/)

따라서 입력을 하나 늘리면 기본 진리표의 항목 수는 두 배가 된다. 그러나 FPGA 전체 면적까지 정확히 두 배가 된다는 뜻은 아니다. 출력 선택 회로, 입력 mux, configuration 저장과 routing 자원은 다른 비용 항목이다.

## 다섯 입력 parity를 두 방식으로 만든다

자체 비교용 함수 y=a⊕b⊕c⊕d⊕e를 정하자. 모든 입력이 결과에 영향을 주므로 일반적인 조합 LUT4 하나에 다섯 독립 입력을 직접 넣을 수 없다. 대신 첫 LUT4에서 p=a⊕b⊕c⊕d를 만들고, 두 번째에서 y=p⊕e를 만든다. 두 번째 LUT의 남는 입력은 결과에 영향을 주지 않도록 구성한다.

LUT5에서는 같은 함수를 한 표로 표현할 수 있다. 모든 32개 입력 조합에 대해 두 구현의 결과는 같다. 차이는 논리의 정답보다 자원을 통과하는 순서다. LUT4 구현은 a부터 d까지의 경로가 두 LUT를 통과하고, e의 경로는 마지막 LUT만 통과한다. LUT5 구현은 각 입력에서 출력까지 한 LUT 단계다.

다만 두 LUT4의 기본 표 용량 합은 16+16=32bit로, 한 LUT5의 32bit와 같다. LUT6를 쓴다면 기본 표는 64bit이고 이 함수에는 입력 한 개의 능력이 남는다. 이 예에서 더 큰 LUT는 단계 수를 줄일 수 있지만 표 저장량을 항상 줄이지는 않는다.

## 논리 깊이를 실제 시간으로 바꾸는 조건

계산용 지연을 LUT4 0.30ns, LUT5 0.38ns, 두 LUT 사이 연결 0.20ns로 지정하자. 가장 긴 parity 경로는 LUT4 두 단계에서 0.30+0.20+0.30=0.80ns, LUT5 한 단계에서는 0.38ns다. 특정 FPGA의 timing 표나 배치 결과를 사용한 수치가 아니다.

이 결과는 단계가 줄면 연결 하나도 줄일 수 있다는 예다. 실제 비교에는 입력별 LUT delay와 routing delay, fanout, load, placement가 들어간다. 큰 LUT의 입출력을 원하는 위치에서 확보하지 못하거나 다른 경로가 critical해지면, 이 작은 함수의 깊이 개선이 전체 clock 개선으로 이어지지 않을 수 있다.

같은 함수를 더 큰 LUT에 담을 수 있다는 기능적 판단과, 그 LUT를 사용한 회로가 더 빠르다는 판단은 다른 자료를 요구한다. 합성의 논리 단계만 보고 배치 후의 ns를 단정하지 않는다.

## 함수의 입력 의존성부터 확인한다

앞의 두 LUT4 분해는 parity의 구조를 이용했다. 임의의 다섯 입력 함수도 언제나 같은 두 LUT와 같은 연결로 구현된다고 일반화할 수 없다. 중간에 몇 bit의 정보를 넘겨야 하는지에 따라 필요한 분해가 달라진다. 식에 적힌 변수 수와 실제로 결과에 영향을 주는 입력 수도 구별한다.

최적화로 사라질 수 있는 입력을 먼저 정리하고, 필요한 함수들을 각 LUT의 입력 한도에 맞춰 나눈 다음, 공유 가능한 중간 결과와 연결 비용을 본다. 작은 LUT 두 개의 면적과 큰 LUT 하나의 면적은 진리표 용량만으로 끝나지 않으며, 블록의 다른 기능을 함께 쓸 수 있는지도 영향을 준다.

LUT 입력 수를 평가할 때는 표현 가능한 함수, 표 용량, 매핑된 깊이, 배치 후 연결의 네 항목을 차례로 연결한다. 입력 하나가 유용한 이유는 표가 커졌다는 사실 자체보다, 관심 함수에서 중간 단계와 배선을 제거할 수 있다는 데 있다. 그 제거가 실제 경로에서도 유지되는지까지 확인해야 크기의 이득을 설명할 수 있다.

