산술 기술 매핑: 같은 덧셈 RTL이 다른 회로가 되는 이유
같은 32비트 a+b를 합성했는데 한 netlist에는 일반 논리 게이트가, 다른 netlist에는 carry 전용 셀이 길게 이어져 있다. 덧셈 결과가 같다면 어느 쪽이 정답일까. 산술 기술 매핑에서 정답은 하나의 회로 그림이 아니라 지정한 숫자 의미를 목표 기술의 자원으로 보존한 구현이다.
기술 매핑은 합성의 산술 표현을 실제 사용 가능한 셀이나 FPGA primitive로 바꾸는 과정이다. 어떤 연산을 하는지와 어떤 소자로 그 연산을 수행하는지를 구분하면, 동일 RTL의 서로 다른 결과를 자연스럽게 이해할 수 있다.
먼저 보존해야 하는 숫자를 정하기
4비트 unsigned 입력 a=15, b=1을 더한다고 하자. 출력도 4비트이면 관측 결과는 0000이다. carry를 포함하는 5비트 출력이라면 10000, 즉 16이다. 같은 덧셈 기호여도 필요한 결과 폭이 다르면 보존할 함수가 다르다.
부호 확장도 마찬가지다. 4비트 1111을 signed −1로 읽고 5비트로 확장하면 11111이다. unsigned 15라면 01111이다. 매핑을 비교하기 전에 입력 폭과 signed 여부, 중간 표현의 폭, 버리는 결과 비트를 고정해야 한다. 넓은 결과가 필요하다면 언어의 문맥에 기대기보다 입력 확장과 출력 의도를 명확히 해 검증하는 편이 낫다.
예를 들어 unsigned 확장 합은 wide_sum = {1'b0,a} + {1'b0,b};처럼 두 피연산자의 폭을 드러낼 수 있다. 이는 전용 carry 셀을 요청하는 코드가 아니라, 보존할 산술 범위를 명확히 한 코드다.
같은 중간 연산을 다른 자원으로 낮추기
Yosys의 공통 기술 매핑은 $alu에서 입력 폭과 부호를 맞춘 뒤 propagate·generate와 carry 계산을 연결한다. 그 공통 경로의 $lcu에는 Brent–Kung 형태의 prefix 구현이 있다.
반면 Yosys의 iCE40 산술 매핑은 같은 $alu 계열을 iCE40 carry wrapper에 비트별로 연결한다. 확인한 코드는 출력 폭이 2 이하일 때 이 매핑을 선택하지 않는 조건도 둔다. 목표 자원이 다른 만큼 일반 네트워크와 전용 자원의 선택 규칙도 달라지는 사례다.
이 차이는 산술 의미가 달라졌다는 뜻이 아니다. prefix 구조가 일반 논리에서 유리할 수 있고, 전용 carry 경로가 있는 FPGA에서는 그 자원의 빠른 연결과 배치 규칙이 유리할 수 있다. 어느 경로가 실제 flow에서 선택되었는지는 synthesis script와 최종 셀 종류를 확인해야 한다.
직접 회로를 쓰면 더 확실히 빨라질까
carry 식을 RTL에 일일이 펼치면 목표 구조를 자세히 표현할 수 있다. 하지만 그것이 항상 더 빠른 결과를 보장하지는 않는다. 도구가 산술 연산을 인식해 전용 자원에 매핑하는 기회를 잃을 수도 있고, 펼친 논리가 최적화되어 다른 형태가 될 수도 있다.
반대로 + 하나로 의도를 남기면 어떤 topology를 선택했는지 코드만으로는 보장할 수 없다. 특정 구조가 꼭 필요한 설계라면 직접 구현, primitive 사용, 제약과 보존 설정 중 무엇으로 의도를 전달할지 결정하고 결과에서 확인해야 한다. 추상적인 표현과 구조적인 표현의 선택은 가독성만의 문제가 아니다.
입력 폭을 줄이거나 상수 피연산자를 넣으면 매핑 결과도 달라진다. 상수 1을 더하는 회로와 임의의 두 수를 더하는 회로는 논리적으로 필요한 동작이 다르다. 원래의 큰 연산기가 보이지 않는다고 무조건 인식 실패로 판단할 수 없다. 사용하지 않는 비트나 상수가 최적화된 결과일 수 있다.
timing 제약이 비교의 조건을 바꾼다
면적 중심의 느슨한 제약에서는 작은 셀과 공유 구조를 선택할 수 있다. 더 짧은 지연을 요구하면 셀 크기나 논리 분해, 버퍼가 달라질 수 있다. 합성 시점의 추정 지연과 배치·배선 이후의 실제 경로 분석도 구분해야 한다.
설명용으로 두 구현의 논리 지연을 0.8ns와 1.0ns라고 가정하자. 첫 구현의 배선 기여가 0.6ns, 둘째가 0.2ns라면 총합은 각각 1.4ns와 1.2ns다. 논리만 빠른 구조가 전체에서도 빠른 것은 아니다. 이 수치는 특정 도구나 FPGA의 측정 결과가 아니라 비교에서 배선을 빠뜨렸을 때 생기는 반례다.
전용 carry 사용에는 배치와 연결 규칙이 따른다. 일반 게이트는 더 자유롭게 배치할 수 있지만 carry 경로의 비용이 커질 수 있다. 최종 임계 경로가 입력 mux나 결과 선택기라면 덧셈 본체를 바꾸어도 기대한 전체 개선을 얻지 못할 수 있다.
매핑 결과를 읽는 순서
먼저 기능 동치를 확인한다. 다음으로 보존한 입력·출력 비트와 상수 최적화를 확인하고, 실제 선택된 셀 종류와 산술 자원을 본다. 그 후 같은 제약에서 timing·면적·전력을 비교한다. 기능이 다른 두 회로의 속도 비교는 매핑 품질의 비교가 아니다.
처음의 두 netlist는 서로 다른 기술의 언어로 같은 덧셈을 표현했을 수 있다. 산술 기술 매핑을 이해하면 carry 셀의 유무나 prefix 그림만으로 성패를 판정하지 않게 된다. 확인할 것은 결과의 숫자 계약이 유지되었는지와, 그 목표 기술에서 필요한 경로를 합리적인 비용으로 구현했는지다. 같은 RTL이 다른 회로가 되는 이유와 비교의 기준이 여기에 있다.