HLS - High Level Synthesis

HLS는 알려지기로는 쉽게 말해서 C(system C 또는 C++)로 작성한 프로그램을 verilog로 변환해주는 툴이었다. 대부분의 상업용 툴이 통합환경으로 만들어지다보니까, HLS 통합환경만 있으면 상위 설계에서 검증까지 모두 끝을 낼 수 있다. 사실 칩 구현에서 중요한 위치를 점유했던 RTL 과정은 설계-구현-검증 과정에서 중간단계 산물이 되는 것이다. 상위 설계자 입장에서는 자신의 아이디어를 일부러 구현을 위한 모델로 변형한다거나 구현 담당자가 이해할 수 있는 언어로 갈 이유가 없고, 구현-검증 엔지니어 모두가 다 필요없어지는 결과를 초래하게 된다. 모든 구현/검증 엔지니어의 자리가 사라지는 것이 아니라 규모가 작은 블록에 대해서는 상위 엔지니어 하나가 모든 역할을 수행할 수 있게 되는 것이다.

상위 설계자는 늘 그렇듯 구체적인 구현 상황을 알아야 할 필요가 없다. 단지 최적화에 부여하는 조건만 설정해주면 HLS 툴이 고차원 언어를 HDL로 변환하고 그것을 주어진 조건을 만족시키기 위해서 iteration을 해주기 때문에 사람이 작업한 것에 비해 훨씬 더 최적화된 결과를 얻게 된다. 따라서, 컴퓨터의 힘으로 충분히 iteration하여 최적의 해를 얻어낸 것이라 오히려 사람이 손을 대면 원치 않은 결과가 나올 수 있게 되는 것이다.

따라서, 상위의 전문지식이 있는 엔지니어가 비교적 추상적인 아이디어를 가지고 칩 구현에 대한 전문지식이 없어도 최적화된 칩 설계 결과를 얻게 된다는 말이다 (어느 분야나 추상적인 아이디어 + 권력(돈/직급)을 가지고 있는 사람이 최종 승자가 된다).

상위 설계자는 그보다 상위 레벨에서 시스템을 설계하는 사람들을 위한 SDK를 제공하고 하위에 칩구현을 신경쓰는 입장이 되므로, 활동하는 영역은 늘어나는 결과를 초래하게 되지만 전체적인 시스템 엔지니어의 자리수도 줄 뿐더러 RTL/검증 엔지니어들의 자리는 아예 사라져버리게 되므로 이 역시도 충격적인 일이 아닐 수 없다. 한 때 스스로의 스마트함으로 최적화를 수행해서 복잡도와 area를 줄여서 쾌재를 부를 수 있었다 치면, 지금은 소위 ‘천재’가 여러 날 밤을 새고 머리를 쥐어짜도 해낼 수 없는 수준의 최적화를 컴퓨터가 단숨에 해결하게 된다.

개발 기간이 엄청나게 단축되는 것은 물론이고 결과물도 매우 매력적인 반면 칩이 나왔을 때 문제가 생기면 디버깅에 어려움이 있을 수 있다는 것은 수많은 장점 중 단점의 하나라고 볼 수 있다. 즉, 최적화를 하게 되면 하드웨어 결과는 워낙 유기적으로 연결된 결과로 나타나게 되어 문제가 생겼을 때 수정하기 어렵다는 이야기 이다.

이들 HLS 툴 중에 일부는 LLVM의 장점을 사용한다. LLVM은 여기에서 큰 역할을 담당해서 HLS는 LLVM을 이용한 C compiler (Clang)의 프론트앤드(언어->중간 산물(IR:intermediate representation))를 이용하고 LLVM의 백앤드(중간산물->머신별 최종산물)를 RTL(verilog/VHDL)로 만들게 되는 것이다. 물론, 하드웨어적인 기술은 이 결과를 최적화하는 과정에서 나오게 될 것이다.

또 frontend만 바꿔주면 C외의 다른 언어 (python/swift/…)도 지원할 수 있게 된다 (물론 backend를 바꾸면 다양한 CPU/GPU/DSP를 지원할 수 있게 된다).

HLS라는 기술도 사람과 기술의 가치라는 것을 가차없이 강등시켜버리는 데 주요한 역할을 하리라고 본다. 즉, 브랜드와 자본을 가지고 있는 소규모의 집단이 적당한 구현 스펙만 작성해서 관리/감독만하면 모든 개발을 제 3국에서 말도 안되는 가격으로 수행해주게 된다. 캘리포니아에서 설계된 애플 제품이 중국에서 (앞으로는 베트남에서?) 매끄러운 품질로 완제품이 되어 납품되듯 말이다.

기술자로서 가치를 가지려면 스스로의 능력도 능력이지만 스스로가 어떤 브랜드가 되어야 하고, 그렇지 못하면 이젠 기존 브랜드의 제품의 생산 수단으로서 활용될 가능성도 점점 줄어들게 되는 시절이 되어버린 것이다.