2023년 6월 14일 수요일

[SystemC기초] 디지털 반도체 설계자가 알아야할 C++ 언어

[SystemC기초] 디지털 반도체 설계자가 알아야할 C++ 언어

당신이 디지털 반도체 설계자라면 Verilog, VHDL 따위의 설계언어는 이미 알고 있으리라. 그렇다면 SystemC 를 들어 봤는가? 위키 사전에는 이렇게 소개하고 있다[Link].

SystemC is a set of C++ classes and macros which provide an event-driven simulation interface. These facilities enable a designer to simulate concurrent processes, each described using plain C++ syntax. SystemC processes can communicate in a simulated real-time environment, using signals of all the datatypes offered by C++, some additional ones offered by the SystemC library, as well as user defined. In certain respects, SystemC deliberately mimics the hardware description languages VHDL and Verilog, but is more aptly described as a system-level modeling language.

SystemC is applied to system-level modeling, architectural exploration, performance modeling, software development, functional verification, and high-level synthesis.

SystemC is often associated with electronic system-level (ESL) design, and with transaction-level modeling (TLM).

한글 위키사전에 이 항목이 없는 것을 보면, SystemC가 등장하여 IEEE-1666 표준으로 지정된지 십여년이 지났지만 여전히 우리에게는 생소한 모양이다.

시스템 반도체의 설계규모가 커지면서 가장 크게 대두되었던 문제는 검증(verification)이다. 반도체 회로 설계물을 검증하는 첫번째 목적은 목표한 사양의 기능을 수행하는지 확인하는 것이다. 이에 덧붙여 해당 설계물이 시스템에 결합되었을 때 예상치 못한 입력에 대해서도 적절히 대응하는지 확인되어야 한다. 결국 설계물을 검증하기 위한 테스트 벤치의 작성이 설계 자체보다 더 어려운 과제가 될 것은 뻔하다.

HDL언어로 설계한 설계물을 검증하기 위한 시뮬레이션 테스트 벤치역시 동일한 HDL 언어로 작성하기 마련이다. 문제는 이 HDL 언어가 RTL의 하드웨어 기술용 이라서 시스템 수준의 테스트 벤치 작성에는 그리 잘 준비되어 있지 않다. 설계가 복잡(복합)한 만큼 검증에 사용될 시험입력 자료(input test vector)도 실제와 가깝도록 준비되어야 한다. 일예로 멀티미디어나 통신 처리용 알고리즘을 구현한 설계물의 검증에 사용되어야 할 자료의 양은 매우 방대하다. 일일이 테스트 벡터를 작성해 주기보다 시뮬레이션 수행 중 동적 테스트 입력을 수행 해줘야 한다. HDL 언어로 이미지나 음성 데이터 파일 입출력이 포함된 테스트 벤치를 만들어 본적이 있는가?

검증의 두번째 어려움은 시뮬레이션 실행 시간이다. 설계가 복잡해지고 검증에 사용될 자료가 방대해진 만큼 시뮬레이션을 완료하기 까지 엄청난 시간이 소요된다. 이를 극복할 방법으로 널리 사용되는 기법이 고속 프로토 타이핑(fast prototyping)이다. 대규모 FPGA를 사용해 RTL 설계물을 실시간에 조금 못미치는 속도로 작동을 검증해 볼 수 있다. 하지만 이는 설계가 완료되었을 때나 가능한 일이다. 설계 오류를 찾고 고치는 반복적인 개발과정에서 FPGA 프로토 타이핑을 할 수는 없다. 결국 시뮬레이션의 수행시간을 줄여야 하는데 이를 위해 채택한 방법이 트랜잭션 수준(TLM, Transaction Level Modeling) 검증 기법이다. 시뮬레이션 시간이 오래 걸리는 이유는 클럭 마다 HDL 모델의 작동을 처리하기 때문이다. 이미 검증된 설계부분과 개발중인 부분을 분리해 놓고 검증된 부분은 알고리즘을 시험했던 언어(C++)의 모형을 사용하기로 한다. 단지 알고리즘을 기술한 함수(소프트웨어 모델)를 호출하면 되므로 시뮬레이션 작동 시간이 빨라진다. 이 방법을 쓰려면 TLM 과 RTL 사이의 수준을 맞춰줘야 하고 시뮬레이션을 위해 이종 언어를 통합해 줘야 하는 과제가 있다.

이제 하드웨어 RTL 설계자들도 알고리즘 언어를 배워야 하는 압박을 받고 있다. 물론 하위 설계자라면 무시해도 좋으나 장래 시스템 구성자(system architect) 급으로 발돋움 하려면 피하지 말자. 그렇다고 C++를 배우는데 너무 두려워 할 일도 아니다. C++언어를 소프트웨어 기술자 만큼 알아야 할 이유도 없다. 게다가 C++의 언어 구성에서 하드웨어 설계자들을 위해 필요한 매크로와 크래스 그리고 사건 기반의 시뮬레이션 커널을 라이브러리로 잘 정리해서 표준화 시켜 놓은 SystemC가 있기 때문이다.

SystemC 기초 과정은 하드웨어 설계자가 알아야 할 C++언어의 기본사항을 학습 하고 시뮬레이터의 동작 원리를 배운다.

  • 프로그래밍 언어와 하드웨어 언어의 차이
  • 하드웨어 기술의 수준: RTL 과 TLM의 차이
  • C++ 언어의 기본: 크래스와 구조체
  • SystemC의 작동 방식
  • HDL과 SystemC의 혼합 테스트 벤치

학습에 사용될 실습 예제 (수강생의 이해도에 따라 변경될 수 있음)

  • 2D-DCT
  • Canny Edge Detector
  • FIR Filter

실습 도구

  • SystemC Library
  • Microsoft Visual Studio C/C++ Compiler Community Edition
  • ModelSim/QuestSim

학습기간 (수강생의 이해도에 따라 변경될 수 있음)

  • 6주


댓글 없음:

댓글 쓰기