C에서 실리콘으로 : 소프트웨어 / 펌웨어 솔루션을 하드웨어로 구현하는 방법?


13

질문에 비추어 소프트웨어 솔루션을 하드웨어 구현으로 바꾸는 표준 프로세스가 있는지 궁금합니다. 저와 상상을 용서하십시오.하지만 C 프로그램을 가져와 트랜지스터, 저항 등의 회로도 또는 잘 알려진 PCB로 컴파일 할 수있는 컴파일러가 있습니까?

이 시나리오를 잘못된 관점에서 볼 수 있다는 것을 알고 있습니다. 역사적으로 제 경험으로는 일반적으로 누군가 소프트웨어 솔루션으로 구현 한 하드웨어가 있습니다 (하드웨어 에뮬레이션 생각). 이 개념이 반대로 존재 하는가? 소프트웨어 대 하드웨어 IP 라우팅과 같은 대기업은 어떻게합니까?


"단일 헤드 C 프로그램을 자동으로 멀티 스레드로 만들 수없는 이유는 무엇입니까?"
pjc50

@ pjc50 : "내 싱글 헤드 C 프로그램을 자동으로 멀티 스레드로 만들 수없는 이유는 무엇입니까?" ?
davidcary

구체적인 예는 없지만 사람들이 이전에 묻는 것을 보았습니다. 또한 하드웨어는 본질적으로 병렬 적이며 소프트웨어는 사람들이 그것에 대해 생각하고 프로그램을 작성하는 방식에있어서 "자연스럽게"순차적입니다.
pjc50

답변:


11

아니요, 소프트웨어를 하드웨어로 전환하기위한 표준 솔루션은 없습니다. 일반적으로 하드웨어 구현을 염두에두고 작성되지 않은 소프트웨어를 사용하는 것은 막대한 낭비와 비효율없이 하드웨어로 쉽게 변환 될 수 없습니다. 일반적으로 CPU와 ROM이있는 칩을 만들어 소프트웨어를 ROM에 넣는 것이 가장 좋습니다.

수년 동안 "C-Like"코드를 사용하여 하드웨어로 컴파일하는 컴파일러가있었습니다. VHDL 또는 Verilog를 하드웨어로 컴파일 할 수있는 것과 같은 방식입니다. 그러나 핵심은 C가 아닌 "C-Like"라는 것입니다. 예를 들어, PI를 계산하고이를 PI를 계산하는 하드웨어로 마술처럼 변환하는 C / C ++ 프로그램을 여전히 사용할 수는 없습니다. 이러한 C-Line 언어의 대부분은 사라지거나 숫자로 사용되지 않습니다. 가장 많이 사용되는 버전 중 하나는 SystemC 이지만 C / C ++가 아니며 일반적인 "소프트웨어를 작성한 다음 하드웨어로 컴파일"하는 데 유용하지 않습니다. 여전히 "소프트웨어로 컴파일 될 수있는 일부 하드웨어를 작성해야합니다".

스위치 및 라우터에는 일반적으로 하드웨어에서 하드웨어에서 일반적으로 사용되는 속도가 중요한 라우터 기능 (라우팅 테이블에서 항목 조회, 대기열 관리 등)을 수행 한 다음 CPU를 사용하여 일반적이지 않은 모든 기능을 수행합니다. (예외, 오류, 라우팅 테이블 업데이트 처리 등) 여러 가지면에서 이것은 가장 일반적인 opcode가 하드웨어에서 수행되고 때로는 일부 opcode가 실제로 소프트웨어로 구현되는 최신 CPU의 작동 방식과 유사합니다 (예 : FPU가없는 경우 부동 소수점 명령어).


SystemC는 실제 C ++ 일뿐만 아니라 C ++ 라이브러리 일뿐입니다. SystemC에서 원하는 일반적인 C ++ 코드를 사용할 수 있습니다. 즉, SystemC는 자동 생성 하드웨어와 관련이 없습니다. 시스템 시뮬레이션에 중점을 두어 아키텍처 결정을 내리고 하드웨어를 사용하기 전에 소프트웨어 팀을 시작할 수 있습니다.
Theran

이를 통해 특정 작업을 수행하는 특정 하드웨어가있는 이유를 이해할 수 있습니다.
채드 해리슨

이 목적을 위해 설계된 다른 C-HDL 컴파일러 가 많이 있습니다 .
Anderson Green

5

가장 가까운 것은 Altera의 C2H (C-to-Hardware) 컴파일러 입니다. 그것은 당신이 제안하는 것을 할 수 있습니다. 그러나 반항적으로 경고가 있습니다. C 코드 만 하드웨어로 바꾸거나 원하는 것은 아닙니다. 그러나 특정 기능이 제대로 작동하면 성능이 크게 향상됩니다.

일반적으로 NIOS II 소프트 코어 프로세서를 Altera FPGA에 구현합니다. 그런 다음 다른 프로세서처럼 ANSI C 코드를 작성합니다. 그런 다음 작성한 C 함수 중 하나가 병렬 실행에서 성능면에서 유리한 무거운 수학이 필요하다고 가정하십시오. C2H 컴파일러를 호출하여 "하드웨어 구현"이라고 말하면 기본적으로 해당 기능을 NIOS II 소프트 코어 프로세서의 주변 장치로 바꿉니다.

다음 은 ANSI C에서 Mandelbrot 계산을 코딩 한 다음 하드웨어에서 구현 하는 예 입니다.

C2H 컴파일러 가속 Mandelbrot 알고리즘은 컴파일러 최적화 레벨 2 (-O2)를 사용하는 가장 빠른 Nios II 프로세서에서 실행되는 동일한 알고리즘에 비해 60 배 이상의 속도 향상을 제공합니다. 이 속도 증가는 범용 처리 장치로는 불가능한 하드웨어가 제공 할 수있는 병렬 처리 및 빠른 반복 속도로 인한 것입니다.

예제로 돌아가서 NIOS II 프로세서는 Linux를 실행할 수 있습니다. 라우팅 작업을 수행하는 데 필요한 특정 기능은 하드웨어 가속의 이점을 얻을 수 있습니다. 순수한 소프트웨어 라우터보다 성능이 좋을 것입니다. 그러나 특별히 설계된 전용 ASIC의 성능에는 절대 접근하지 않습니다.


1
자일링스는 이전에 AutoESL로 알려진 Vivado HLS (고수준 합성)라고 불리는 유사한 툴을 가지고있다. 유사한 경고가 적용됩니다. RTL로 자동 변환하기 쉬운 코드 종류 인 경우 코드를 RTL로 변환하는 것이 좋습니다.
Theran

@Theran 나는 Xilinx가 경쟁 제품을 가지고 있다는 것을 몰랐다. 나는 그것을 확인해야합니다. 감사!
embedded.kyle

2

제목에 "C to Silicon"을 언급하고 본문에 보드 레벨 제품을 언급합니다. 나는 "C to Silicon"디자인 흐름이 존재하는 방정식의 일부에 초점을 맞출 것입니다. C 자체는 하드웨어의 고유 한 병렬 처리, 경쟁 조건 및 기타 문제를 방지해야 할 필요성에 대한 근본적인 지원이 부족하고 이러한 개념을 표현할 수있는 표현력이 없기 때문에 하드웨어 설명에 적합하지 않습니다. 또는 Verilog 및 VHDL만큼 많지는 않습니다.

합성 가능하고 (즉, 하드웨어 설명으로 렌더링 될 수있는) C 코드, 여기서 하드웨어 = 디지털 로직은 소프트웨어 개발자가 판단한 코딩 콘테스트에서 이길 수 없습니다.

다음은 ASIC 플로우 군중을위한 C-> 실리콘 툴을 공급하는 유명한 벤더 목록입니다.

  • 포르테 신시사이저

  • 멘토 투석기

  • BlueSpec C

  • Synopsys Synphony (ex- Synfora)

  • 케이던스 C- 실리콘


1

합리적인 하드웨어를 원한다면 소프트웨어를 하드웨어로 바꾸는 것이 결코 쉬운 일이 아닙니다. 하드웨어는 면적 / 비용과 관련된 리소스 사용량을 신중하게 관리하기 위해 더 많은 아키텍처가 필요합니다. 그러나 C를 어떤 형태로든 사용하여 하드웨어 관련 정보 (예 : 하드웨어 인터페이스 란 무엇입니까?)를 추가하고 최적화 된 하드웨어를 생성 할 수있는 여러 도구가 있습니다. 숙련 된 사용자는 수작업으로 코딩 된 RTL보다 적은 시간으로 더 나은 결과를 쉽게 얻을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.