임베디드
FPGA에 어떤 인코딩 유형을 사용해야 합니까? 이전 기사에서 논의한 바와 같이 일반적으로 컴파일러가 이를 결정하므로 컴파일러가 결정하는 사항을 따르는 것이 좋습니다.
그러나 인코딩 유형 간의 차이점과 컴파일러가 특정 결론에 도달할 수 있는 이유를 이해하는 것이 중요합니다. 이를 염두에 두고 이 기사에서는 예제 FPGA 애플리케이션을 보여주는 실험을 안내하고 어떤 인코딩 유형이 가장 적합한지 단계별로 논의합니다.
지금까지 이 시리즈에서 Verilog를 사용하여 유한 상태 머신(FSM)을 생성하는 방법, 초기 상태 및 메모리가 FPGA 인코딩에 미치는 영향, 바이너리와 원-핫 및 그레이 인코딩을 비교하는 개괄적인 개요에 대해 논의했습니다. .
이 실험에서 저는 바이너리, 그레이 및 원-핫 인코딩이 사용될 때 결과 하드웨어의 차이를 확대하기 위해 상태 머신을 여러 번 인스턴스화하고 싶었습니다.
내가 최종적으로 선택한 시스템은 직사각형 2D 세포 배열인 환경에서 살아있는 세포의 행동을 시뮬레이션하는 세포 자동화 장치인 Conway의 Game of Life입니다. Conway의 Game of Life는 각 세포가 다음 주기에서 어떤 일이 일어나는지를 결정하기 위해 따르는 간단한 규칙 세트에 따라 이러한 세포가 태어나고, 번식하고, 죽어가는 시뮬레이션입니다. 각각의 살아있는 세포는 생존하거나 죽을 수 있으며, 각각의 죽은 세포는 죽은 채로 있거나 살아 있게 될 수 있습니다. 각 주기에 대한 규칙은 다음과 같습니다.
<올>이러한 규칙은 컴퓨터 과학에서 널리 연구된 흥미로운 행동과 패턴을 많이 만듭니다.
이것이 Conway의 Game of Life가 단일 Gosper의 글라이더 건으로 알려진 것을 실행할 때 보이는 방식입니다.
테스트 시스템으로 돌아가서 각 셀은 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에서 프로젝트를 확인하세요.
시스템은 총 27개의 변형으로 23x23 셀의 세계로 합성 및 구현되었습니다. 3개의 서로 다른 FSM이 사용되었으며 모두 위에서 언급한 3개의 인코딩과 함께 3개의 서로 다른 타겟 FPGA에서 모두 사용되었습니다.
이 시스템은 한 번 실행된 다음 나머지 7개 상태를 통해 주기로 실행되는 초기 상태를 갖습니다. 이것은 거의 완전한 시퀀스이므로 처음에는 Gray 인코딩이 나에게 유망한 것처럼 보였습니다.
이 기계는 FSM #1과 동일한 임계경로를 가지지만, 살아있는 이웃의 수가 3을 초과하는 것으로 알려지면 임의의 경로를 거칩니다.
이 임의의 상태 전환 동작에 대해 원-핫 인코딩이 최선의 선택이 될 것으로 예상했습니다.
시스템은 공급업체의 개발 도구를 사용하여 3개의 대상 FPGA에 대해 구현되었습니다.
<울>
두 개 이상의 시스템의 성능을 비교하는 것은 어려운 일입니다. 그 이유는 주로 우리가 사용하는 메트릭과 다른 것보다 더 중요하게 생각하는 측면에 따라 판정이 달라지기 때문입니다. 이 실험을 위해 다음 데이터를 수집하여 각 구현에 대한 점수를 산출했습니다.
<울>모든 구현에 대해 이 네 가지 측면을 세 가지 인코딩 간에 비교하여 인코딩 중에서 최고, 최악, 중간 결과를 얻었습니다. 최고는 양수 점수, 최악은 음수 점수, 중간 0을 얻습니다.
각 모델에 대한 모든 점수를 더한 후 다음과 같은 결과를 얻었습니다.
이것은 승리한 두 가지 경우(그 중 하나는 동점)와 함께 원-핫 인코딩을 피하는 것을 제안하는 것 같습니다. 게다가 원래는 one-hot이 FSM 모델 #3에 대한 최고의 인코딩이리라 예상했지만, 추천하는 개발 도구 없이 최악의 인코딩으로 밝혀졌습니다. 즉, 대부분 주파수 및 전력 메트릭에서 원-핫이 나머지를 능가하는 경우가 있습니다.
전반적으로 회색 인코딩은 이 특정 시스템에 가장 적합한 선택인 것 같습니다.
이 테이블에서 승자를 추출하면 다음을 얻습니다.
이 비교가 바이너리 및 원-핫보다 그레이 인코딩을 선호하는 것처럼 보이지만 결과는 우리가 사용하는 메트릭에 크게 의존하며 이러한 메트릭은 우리에게 중요한 것을 반영합니다. 예를 들어, 이 비교에서는 사용량(설계에 포함된 논리 요소 및 레지스터의 수)보다 주파수와 전력을 더 중요하게 생각했습니다. 주파수보다 사용량을, 전력보다 주파수를 중요시했다면 분명히 다른 순위가 나왔을 것입니다.
이 비교는 이러한 인코딩을 사용하여 얻은 성능에 대한 최종 작업이 아닙니다. 대신 내가 사용한 아키텍처에서 내 개인적인 선호도에 따라 생성된 순위를 보여줍니다.
다시 한 번, 코드를 살펴보거나 27개의 구현을 확인하거나 Conway의 Game of Life의 실제 시뮬레이션을 보려면 GitHub에서 프로젝트를 확인하세요.
임베디드
독일 산업용 로봇 산업의 거물인 KUKA는 1800년대부터 어떤 형태로든 존재해 왔습니다. 지난 30년여 동안 KUKA는 유럽과 전 세계에서 산업용 로봇의 원동력으로 부상했습니다. Robotic Trends의 2013년 7월 기사에 따르면, KUKA는 모바일 조작 분야에서 새로운 애플리케이션을 제안하기 위해 전 세계의 엔지니어와 창의적인 사람들을 초대하는 모바일 조작 대회를 개최하고 있습니다. 가장 유용하고 혁신적인 응용 프로그램은 20,000유로를 얻을 수 있습니다. 신청서는 독창성, 기술적 준비성, 경제적 영향 및 기타 기준에
작업 현장이나 예정된 프로젝트에 새로운 리프트가 필요할 때 몇 가지 요소를 고려해야 합니다. 귀하의 작업에 적합한 유형의 공중 리프트를 선택하려면 귀하가 하고 있는 작업과 귀하의 리프트가 귀하를 위해 어떤 작업을 수행해야 하는지에 대해 약간의 숙고가 필요합니다. 가장 인기 있는 두 가지 공중 리프트는 붐 리프트와 시저 리프트입니다. 붐 리프트 또는 가위 리프트를 임대해야 합니까? 오늘은 앞으로의 노력에 대해 올바른 결정을 내릴 수 있도록 각각의 강점을 살펴보겠습니다. 붐 리프트란? 맨 리프트 또는 체리 피커라고도 하는 붐 리프트