모든 이야기

AND와 OR로 쓴 논리가 NAND와 AOI로 매핑되는 이유

RTL에는 AND와 OR만 썼는데 합성 결과에는 NAND와 AOI가 보인다. 원하는 함수를 다른 게이트로 계산해도 괜찮을까? technology mapping은 이미 정한 논리와 저장 동작을 목표 라이브러리가 제공하는 셀로 구현하는 과정이다. 연산자의 모양을 그대로 복사하는 것보다, 입출력 관계를 보존하면서 실제로 사용할 수 있는 셀을 고르는 일이 중요하다.

같은 논리에도 표현의 층이 있다

RTL netlist에는 폭이 여러 비트인 덧셈기나 곱셈기처럼 추상적인 연산 셀이 남을 수 있다. 목표 칩에서는 그 연산을 일반 게이트로 만들 수도 있고, 지원되는 전용 자원으로 구현할 수도 있다. 논리적으로 필요한 기능과 실제 사용할 셀의 경계를 구분해야 한다.

Yosys의 공식 설명은 일반적인 기술 매핑을 큰 연산 셀에서 내부 단일 비트 셀로 바꾸는 단계와, 이를 목표 라이브러리 셀로 바꾸는 단계로 나눈다. 목표 구조에 RAM이나 ALU 같은 큰 자원이 있으면, 해당 구조 정보가 단일 비트 게이트로 사라지기 전에 직접 매핑하는 흐름도 설명한다. Yosys의 technology mapping 개요

기본 techmap.v 파일도 내부 연산을 내부 게이트로 바꾸는 역할을 명시한다. 이 파일을 적용했다고 곧바로 특정 공정의 물리 셀을 모두 선택한 것은 아니다. 일반 논리 표현과 목표 라이브러리의 표현은 단계가 다를 수 있다. Yosys 기본 매핑 파일

NAND만으로도 같은 결과를 만들 수 있다

1비트 입력 A·B·C에 대해 F = (A & B) | C를 구현한다고 하자. 목표 라이브러리에 NAND2와 인버터가 있다고 가정하면 다음 세 셀로 만들 수 있다.

t = NAND(A, B)

u = NOT(C)

F = NAND(t, u)

마지막 출력은 ~(~(A&B) & ~C)이며 드모르간 법칙에 따라 (A&B)|C와 같다. A=B=1이면 t=0이라 마지막 NAND 출력이 1이 된다. C=1이면 u=0이어서 역시 1이다. AB=0이고 C=0일 때만 t=u=1이 되어 F=0이다. 입력 여덟 조합에서 원래 함수와 같은 결과를 얻는다.

다른 라이브러리에는 N = ~((A & B) | C)를 한 셀에서 만드는 AOI21이 있다고 하자. AOI21 뒤에 인버터를 하나 붙이면 F를 두 셀로 구현할 수 있다. 셀 수가 달라도 함수는 같다. 대신 AOI21의 출력 N을 그대로 F라고 연결하면 극성을 뒤집은 오류가 된다. 출력 반전이 셀의 기능에 포함됐는지까지 매핑 관계에 들어가야 한다.

셀 수보다 라이브러리 비용이 먼저다

가상의 셀 비용을 정해 두 구현을 비교해 보자. NAND2의 면적은 2단위·지연은 45ps, 인버터는 1단위·20ps, AOI21은 2.5단위·60ps라고 하자. 모든 입력은 같은 시각에 도착하며 지연은 고정값으로 더한다. 실제 공정의 수치가 아닌 계산용 모델이다.

NAND 구현의 면적은 NAND 두 개와 인버터 하나를 합한 5단위다. A·B 경로는 NAND 두 단계를 지나 90ps, C 경로는 인버터와 NAND를 지나 65ps다. 가장 늦은 출력은 90ps에 준비된다.

AOI21과 인버터를 사용하는 구현은 3.5단위이며 출력은 80ps에 준비된다. 이 가정에서는 면적과 지연이 모두 줄어든다. 그러나 다른 라이브러리에서 AOI21이 크거나 느리면 같은 결론이 나오지 않을 수 있다. 입력 핀마다 다른 timing arc와 부하까지 고려하면 단순한 셀 개수로 우열을 정하기 더욱 어렵다.

F의 반전값이 필요한 계약이었다면 AOI21의 출력 하나로 끝날 수도 있다. 반면 F와 반전값을 모두 요구하면 어느 신호를 어떻게 공유할지 다시 판단한다. 목표 극성, 출력 부하와 다른 소비 경로가 실제 비용을 바꾸는 이유다. 필요한 반전을 임의로 없애는 최적화와, 사용처의 요구에 맞춰 반전된 셀을 고르는 매핑은 다르다.

저장 셀도 같은 주의가 필요하다. 목표 라이브러리에 필요한 리셋 극성이나 클록 에지의 플립플롭이 있는지 확인해야 한다. Yosys의 매핑 설명은 레지스터 매핑에서 추가 인버터 등이 생길 수 있어 저장 셀을 먼저 다루고, 조합 논리를 목표 셀에 매핑하는 흐름을 제시한다. 기본 게이트의 진리표만 맞춘다고 저장 동작까지 보존되는 것은 아니다. 저장 셀과 조합 셀의 라이브러리 매핑

합성 결과의 낯선 셀을 읽을 때는 셀 이름을 원래 RTL 연산자와 일대일로 맞추기보다 함수와 극성을 먼저 적어 보면 된다. 그다음 폭·부호·저장 조건을 확인하고, 해당 라이브러리의 비용으로 구현을 비교한다. 같은 기능을 다른 셀의 언어로 옮겼다는 사실을 확인해야 기술 매핑의 결과를 평가할 수 있다.