2016-11-02 7 views
3

C/C++, Fortran, Julia 등과 같은 컴퓨터 언어 용 최신 컴파일러의 유용한 기능 중 하나는 바이너리를 생성하기 전에 코드 최적화를 수행 할 수있는 능력입니다. Verilog에서 FPGA "하드웨어"특수 함수를 만드는 함수를 작성한다면 컴파일러는 최적화를 수행 할 수 있습니까? 구체적인 예를 들어, Estrin's scheme for parallelized evaluation을 사용하는 다항식 평가자를 설정하고 계수 중 일부가 0이라고 컴파일러에서 확인하고 효과적인 NOOP를 최적화할까요?FPGA 언어 용 컴파일러가 최적화를 수행합니까?

답변

5

예. 귀하의 예제에서 최적화는 "상수 전파"이라고합니다. 부울 또는 산술 표현식을 최적화 할 때는 모든 컴파일러에서 기술이 동일합니다. 컴파일러는 가능한 모든 표현을 단순화합니다. 또 다른 최적화는 "dead code elimination"입니다. 분기 조건이 상수로 판명되면, 선택되지 않은 분기를 제거하고 분기를 무조건 적으로 수행 할 수 있습니다. 그러나 RTL이 하드웨어 표현으로 변환 된 후 최적화 프로세스는 소프트웨어 컴파일러와 매우 다릅니다.

+0

루프에 중간 정도의 고정 된 반복 수가있는 경우 컴파일러에서이를 하드웨어로 언로드합니까? 이런 종류의 언어로 표준 병렬 언롤 (루프가 독립적 일 때)과 직렬 언롤 (각 반복이 어떤 값을 수정할 때)의 가능성이있는 것으로 보입니다. –

+2

_ 루프 _ 하드웨어에 존재하지 않습니다. 그 문제에 대해서는 하드웨어에 절차 적 진술이 존재하지 않는다. 하드웨어에서 구현되는 RTL 코드의 way 루프는이 포럼에 대한 너무 광범위한 주제입니다. –

+0

그럴 수는 없습니까? 저는 하드웨어 녀석이 아니기 때문에 잘못 생각할 수도 있습니다. 그러나 하드웨어가 감소하는 카운터가 0이 아니며 "다음 반복을위한 준비"플래그가 설정 될 때마다 실행되는 반복을 구현할 수 있어야한다고 생각할 수 있습니다. 그것들은 가능하지 않거나 실용적이지 않습니까 (즉, 불안정한)가 있습니까? –

0

Verilog에는 생성시 항상 합성시에 풀린 생성 문이 있습니다.

+1

Verilog에서 작성한 _Any_ 루프는 generate-for 또는 procedural-for 중 어느 것을 하드웨어에 배포해야하는지에 대한 것입니다. –