모든 이야기

fracturable LUT의 두 출력은 독립 입력 열 개를 뜻하지 않는다

합성 보고서에 작은 LUT 두 개가 있는데 물리적인 LUT 한 개에 함께 들어갈 수 있다고 한다. 그렇다면 다섯 입력 함수 두 개를 언제나 한 블록에 넣을 수 있을까? fracturable LUT의 분할 능력은 출력 수와 진리표뿐 아니라, 두 함수가 공유해야 하는 입력 경로에 달려 있다.

하나의 물리 자원이 여러 모드로 보인다

큰 LUT의 저장·선택 구조를 작은 함수들에 나누어 사용할 수 있으면 작은 논리가 많은 설계에서 낭비를 줄일 여지가 생긴다. 그러나 하나의 큰 함수와 분할한 작은 함수들이 모든 자원을 동시에 독립적으로 가지는 것은 아니다.

VTR 문서는 같은 pb_type의 mode가 상호 배타적임을 정의하고, 한 LUT6 모드와 두 LUT5 모드의 예를 제시한다. 각 모드의 실제 핀 연결은 interconnect 기술을 함께 읽어야 한다. VTR Modes와 Interconnect

이 예의 생략된 연결을 모든 상용 FPGA의 핀 규칙으로 읽지는 않는다. ‘두 개로 나뉜다’는 이름만으로 각 함수에 입력 다섯 개를 완전히 별도로 공급할 수 있다고 가정하는 것이 문제다.

공유 네 핀과 개별 두 핀의 가상 구조

설명용 물리 블록을 명시적으로 정하자. 분할 모드에는 출력 두 개가 있고, 각 출력은 독립적인 LUT5 표를 사용한다. 입력 네 핀 S0–S3은 두 표가 공유한다. A 출력에만 들어가는 한 핀 UA와 B 출력에만 들어가는 한 핀 UB가 더 있다. 전체 외부 입력 핀은 여섯 개다.

각 LUT5는 공유 네 입력과 자기 개별 입력으로 함수를 만든다. 두 표의 저장량은 32+32=64bit다. 이것은 구조를 이해하기 위해 정한 가상 모형이며 특정 제품의 회로도나 VTR 예의 생략 부분을 복원한 결과가 아니다.

첫 함수가 f(a,b,c,d,e), 두 번째가 g(a,b,c,d,h)이고 모두 다섯 입력에 의존한다고 하자. a,b,c,d를 공유 핀에, e를 UA에, h를 UB에 넣으면 맞는다. 두 함수를 합친 서로 다른 입력은 여섯 개다. 64개 입력 조합에서 각 표가 자기 다섯 입력의 값을 선택하므로 두 출력의 독립적인 함수가 유지된다.

표 용량이 맞아도 핀이 부족할 수 있다

이번에는 f=a⊕b⊕c⊕d⊕e, g=a⊕b⊕c⊕u⊕v로 바꾸자. 두 함수의 입력 개수는 여전히 다섯씩이다. 필요한 표 용량도 여전히 64bit다. 하지만 서로 다른 입력의 합집합은 a,b,c,d,e,u,v의 일곱 개다.

이 모형의 여섯 핀에는 그 일곱 독립 신호를 동시에 공급할 수 없다. 각 parity 입력은 다른 입력을 고정한 채 반전하면 출력을 바꾸므로, 불필요한 변수 하나를 제거해서 해결할 수도 없다. 두 함수가 각각 LUT5에 들어간다는 사실은 둘이 같은 분할 블록에 들어간다는 충분조건이 아니다.

한 핀을 시간에 따라 바꿔 두 번 계산하면 된다는 제안은 원래의 동시 조합 출력 계약을 바꾼다. 저장 장치와 제어가 필요하고 결과가 나오는 시점도 달라진다. 원래 기능과 timing을 유지해야 하는 packing 문제에서는 이런 변경을 공짜로 사용할 수 없다.

어떤 공유가 가능한지도 구조에 속한다

실제 구조에는 핀별 접근 가능한 mux, output 연결, FF 및 다른 전용 기능과의 모드 충돌이 있다. 어떤 두 함수가 입력을 많이 공유해도 필요한 핀 조합에 연결되지 못할 수 있고, 반대로 더 유연한 구조는 이 가상 모형과 다른 조합을 허용할 수 있다.

따라서 각 함수의 입력 집합을 구하고 교집합과 합집합을 확인한 뒤, 그 신호들이 어느 공유 핀과 개별 핀에 배정되는지 실제로 적어 보는 편이 좋다. 가능한 모드가 선택됐는지와 output 두 개를 필요한 곳으로 보낼 수 있는지도 대조한다.

기능적으로 들어갈 수 있는 조합을 찾았다고 timing까지 유리해지는 것은 아니다. 함께 넣은 두 함수가 서로 다른 멀리 있는 소비자를 향한다면 한 블록에 묶으면서 routing이 늘어날 수 있다. 밀도와 시간의 판단은 배치 후 연결에서 다시 확인한다.

fracturable LUT를 이해하는 핵심은 큰 표를 작게 나눌 수 있다는 사실과 입력망도 원하는 만큼 나뉜다는 가정을 구별하는 것이다. 작은 함수의 수를 센 뒤에는 공유·개별 핀에 실제 신호를 배정한다. 이 배정이 성공해야 두 출력이라는 가능성이 물리적인 자원 절약으로 이어진다.