산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 임베디드

어떤 인코딩 유형을 사용해야 합니까? FPGA 애플리케이션의 예

주어진 FPGA에 적합한 인코딩 종류를 결정하는 프로세스를 보여주는 세 가지 실험을 따르십시오.

FPGA에 어떤 인코딩 유형을 사용해야 합니까? 이전 기사에서 논의한 바와 같이 일반적으로 컴파일러가 이를 결정하므로 컴파일러가 결정하는 사항을 따르는 것이 좋습니다.

그러나 인코딩 유형 간의 차이점과 컴파일러가 특정 결론에 도달할 수 있는 이유를 이해하는 것이 중요합니다. 이를 염두에 두고 이 기사에서는 예제 FPGA 애플리케이션을 보여주는 실험을 안내하고 어떤 인코딩 유형이 가장 적합한지 단계별로 논의합니다.

지금까지 이 시리즈에서 Verilog를 사용하여 유한 상태 머신(FSM)을 생성하는 방법, 초기 상태 및 메모리가 FPGA 인코딩에 미치는 영향, 바이너리와 원-핫 및 그레이 인코딩을 비교하는 개괄적인 개요에 대해 논의했습니다. .

테스트 중인 시스템

이 실험에서 저는 바이너리, 그레이 및 원-핫 인코딩이 사용될 때 결과 하드웨어의 차이를 확대하기 위해 상태 머신을 여러 번 인스턴스화하고 싶었습니다.

내가 최종적으로 선택한 시스템은 직사각형 2D 세포 배열인 환경에서 살아있는 세포의 행동을 시뮬레이션하는 세포 자동화 장치인 Conway의 Game of Life입니다. Conway의 Game of Life는 각 세포가 다음 주기에서 어떤 일이 일어나는지를 결정하기 위해 따르는 간단한 규칙 세트에 따라 이러한 세포가 태어나고, 번식하고, 죽어가는 시뮬레이션입니다. 각각의 살아있는 세포는 생존하거나 죽을 수 있으며, 각각의 죽은 세포는 죽은 채로 있거나 살아 있게 될 수 있습니다. 각 주기에 대한 규칙은 다음과 같습니다.

<올>
  • 살아 있는 세포가 2~3명의 살아있는 이웃과 함께 생존합니다.
  • 살아 있는 세 이웃과 함께 죽은 세포가 살아납니다.
  • 다른 모든 세포는 죽거나 죽은 채로 남아 있습니다.
  • 이러한 규칙은 컴퓨터 과학에서 널리 연구된 흥미로운 행동과 패턴을 많이 만듭니다.

    이것이 Conway의 Game of Life가 단일 Gosper의 글라이더 건으로 알려진 것을 실행할 때 보이는 방식입니다.

    Bill Gosper의 글라이더 총으로 알려진 Conway의 Game of Life의 변형입니다. Lucas Vieira가 만든 GIF [CC BY-SA 3.0]

    Verilog 코드

    테스트 시스템으로 돌아가서 각 셀은 8개의 상태를 가진 상태 머신으로 설계되었습니다. 물론 Conway의 Game of Life에 있는 셀의 논리는 한 주기로 해결될 수 있지만 다른 인코딩을 사용할 때 눈에 띄는 차이를 갖도록 8-상태 머신을 만들기로 결정했습니다. 상태는 셀의 살아있는 이웃을 계산하는 데 사용됩니다.

    다음 Verilog 코드는 상태의 원래 바이너리 인코딩을 포함하여 이러한 시스템의 셀 모듈 구조를 보여줍니다.

    `STATE_0 3'b000 정의

    `STATE_1 3'b001 정의

    `STATE_2 3'b010 정의

    `STATE_3 3'b011 정의

    `STATE_4 3'b100 정의

    `STATE_5 3'b101 정의

    `STATE_6 3'b110 정의

    `STATE_7 3'b111 정의

    모듈 라이프셀(

    입력 클럭,

    첫 번째 입력,

    입력 시드,

    입력 [7:0] 이웃,

    출력 reg 활성);

    reg [2:0] 상태;

    항상 @ (posege clk)

    if (nrst ==0)

    <코드> 상태 <=`STATE_0;

    <코드> 기타

    케이스(상태)

    `STATE_0:시작

    <코드> // ...

    <코드> 상태 <=`STATE_1;

    <코드> 끝

    `STATE_1:시작

    <코드> // ...

    <코드> 상태 <=`STATE_2;

    <코드> 끝

    <코드> // ...

    `STATE_7:시작

    <코드> // ...

    <코드> 상태 <=`STATE_1;

    <코드> 끝

    엔드케이스

    엔드모듈

    코드를 자세히 살펴보고 싶다면 GitHub에서 프로젝트를 확인하세요.

    FPGA 인코딩 구현

    시스템은 총 27개의 변형으로 23x23 셀의 세계로 합성 및 구현되었습니다. 3개의 서로 다른 FSM이 사용되었으며 모두 위에서 언급한 3개의 인코딩과 함께 3개의 서로 다른 타겟 FPGA에서 모두 사용되었습니다.

    FSM #1:오리지널 모델

    이 시스템은 한 번 실행된 다음 나머지 7개 상태를 통해 주기로 실행되는 초기 상태를 갖습니다. 이것은 거의 완전한 시퀀스이므로 처음에는 Gray 인코딩이 나에게 유망한 것처럼 보였습니다.

    FSM #2:시퀀스

    이 기계는 3비트 카운터로 작동하므로 Gray 인코딩이 경쟁자를 압도할 것으로 예상했습니다.

    FSM #3:임의의 엉킴

    이 기계는 FSM #1과 동일한 임계경로를 가지지만, 살아있는 이웃의 수가 3을 초과하는 것으로 알려지면 임의의 경로를 거칩니다.

    이 임의의 상태 전환 동작에 대해 원-핫 인코딩이 최선의 선택이 될 것으로 예상했습니다.

    대상 아키텍처

    시스템은 공급업체의 개발 도구를 사용하여 3개의 대상 FPGA에 대해 구현되었습니다.

    <울>
  • Artix 7 FPGA용 Xilinx Vivado Suite
  • Cyclone V FPGA용 Intel Quartus Prime
  • LatticeXP2 FPGA용 Lattice Diamond
  • 결과 비교

    두 개 이상의 시스템의 성능을 비교하는 것은 어려운 일입니다. 그 이유는 주로 우리가 사용하는 메트릭과 다른 것보다 더 중요하게 생각하는 측면에 따라 판정이 달라지기 때문입니다. 이 실험을 위해 다음 데이터를 수집하여 각 구현에 대한 점수를 산출했습니다.

    <울>
  • 논리 단위 수. Xilinx 및 Lattice FPGA용 LUT(룩업 테이블) 또는 Intel FPGA용 ALM입니다. 점수:1점
  • 레지스터 수. 점수:1점
  • 예상 최대 빈도. 점수:2점.
  • 예상 온칩 전력. 점수:2점.
  • 모든 구현에 대해 이 네 가지 측면을 세 가지 인코딩 간에 비교하여 인코딩 중에서 최고, 최악, 중간 결과를 얻었습니다. 최고는 양수 점수, 최악은 음수 점수, 중간 0을 얻습니다.

    각 모델에 대한 모든 점수를 더한 후 다음과 같은 결과를 얻었습니다.

    27개 구현 모두에 대한 결과 표입니다. 각 행에서 가장 좋은 인코딩은 녹색으로, 가장 낮은 인코딩은 빨간색으로, 중간 인코딩은 동점이 없는 경우 노란색으로 표시됩니다.

    이것은 승리한 두 가지 경우(그 중 하나는 동점)와 함께 원-핫 인코딩을 피하는 것을 제안하는 것 같습니다. 게다가 원래는 one-hot이 FSM 모델 #3에 대한 최고의 인코딩이리라 예상했지만, 추천하는 개발 도구 없이 최악의 인코딩으로 밝혀졌습니다. 즉, 대부분 주파수 및 전력 메트릭에서 원-핫이 나머지를 능가하는 경우가 있습니다.

    전반적으로 회색 인코딩은 이 특정 시스템에 가장 적합한 선택인 것 같습니다.

    이 테이블에서 승자를 추출하면 다음을 얻습니다.

    평결

    이 비교가 바이너리 및 원-핫보다 그레이 인코딩을 선호하는 것처럼 보이지만 결과는 우리가 사용하는 메트릭에 크게 의존하며 이러한 메트릭은 우리에게 중요한 것을 반영합니다. 예를 들어, 이 비교에서는 사용량(설계에 포함된 논리 요소 및 레지스터의 수)보다 주파수와 전력을 더 중요하게 생각했습니다. 주파수보다 사용량을, 전력보다 주파수를 중요시했다면 분명히 다른 순위가 나왔을 것입니다.

    이 비교는 이러한 인코딩을 사용하여 얻은 성능에 대한 최종 작업이 아닙니다. 대신 내가 사용한 아키텍처에서 내 개인적인 선호도에 따라 생성된 순위를 보여줍니다.

    다시 한 번, 코드를 살펴보거나 27개의 구현을 확인하거나 Conway의 Game of Life의 실제 시뮬레이션을 보려면 GitHub에서 프로젝트를 확인하세요.


    임베디드

    1. Swissbit:산업용 애플리케이션용 USB 3.1 플래시 드라이브 키
    2. AAEON:까다로운 애플리케이션을 위한 COM Express Type 6
    3. 컨트롤러 선택 방법
    4. 언제 베어 보드 테스트를 사용해야 합니까?
    5. 라인 리액터를 사용해야 하는 이유
    6. 귀상어 크레인을 언제 사용해야합니까? 안내자
    7. 어떤 산업에서 케블라 재료를 사용합니까?
    8. Remote Expert 솔루션을 사용해야 하는 이유는 무엇입니까?
    9. 어떤 알루미늄 합금을 사용할지 알아보기
    10. 티타늄 대 알루미늄:어떤 비철금속을 사용해야 하는지