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

FPGA를 사용한 임베디드 디자인:하드웨어 리소스

편집자 주:스마트 제품 설계를 위한 고급 알고리즘이 계속 등장함에 따라 개발자는 종종 이러한 알고리즘의 관련 처리 요구를 충족할 수 있는 임베디드 시스템을 구현하는 데 어려움을 겪고 있습니다. FPGA는 필요한 성능을 제공할 수 있지만 FPGA를 사용한 설계는 오랫동안 FPGA 프로그래밍 전문가의 범위에 국한된 것으로 여겨져 왔습니다. 그러나 오늘날에는 더욱 강력한 FPGA와 보다 효과적인 개발 환경을 이용할 수 있게 되면서 FPGA 개발에 폭넓게 접근할 수 있게 되었습니다. Architecting High-Performance Embedded Systems 책의 4장에서 발췌한 내용에서 저자는 FPGA 디바이스, 구현 언어, FPGA 개발 프로세스에 대한 포괄적인 검토와 FPGA 구현을 시작하는 방법에 대한 자세한 설명을 제공합니다. 설계. 전체 발췌 내용은 다음 시리즈로 제공됩니다.
1:하드웨어 리소스(이 문서)
2:구현 언어
3:개발 프로세스
4:프로젝트 구축
5:구현

Jim Ledin의 Architecting High-Performance Embedded Systems에서 각색


첫 FPGA 프로그램 개발

이 장은 실시간 임베디드 시스템에서 FPGA 디바이스의 효과적인 사용에 대한 논의로 시작하여 표준 FPGA에 포함된 기능적 요소에 대한 설명으로 계속됩니다. 하드웨어 를 포함한 다양한 FPGA 설계 언어 설명 언어 (HDL ), 블록 다이어그램 방법, C 및 C++를 포함한 인기 있는 소프트웨어 프로그래밍 언어를 소개합니다. 이 장은 FPGA 개발 프로세스에 대한 개요로 계속되고 시스템 요구 사항 설명으로 시작하여 저가 FPGA 개발 보드에 구현된 기능 시스템으로 끝나는 FPGA 개발 주기의 전체 예제로 끝납니다.

이 장을 마치면 FPGA가 실시간 임베디드 시스템 아키텍처에 어떻게 적용될 수 있는지 알게 될 것이며 FPGA 집적 회로를 구성하는 구성 요소를 이해하게 될 것입니다. FPGA 알고리즘 설계에 사용되는 프로그래밍 언어에 대해 배우고 FPGA 기반 애플리케이션을 개발하기 위한 일련의 단계를 이해할 것입니다. 또한 무료 FPGA 소프트웨어 도구를 사용하여 저비용 개발 보드에서 완전한 FPGA 개발 예제를 통해 작업했습니다.

이 장에서는 다음 주제를 다룰 것입니다.

기술적 요구사항

이 장의 파일은 https://github.com/PacktPublishing/Architecting-High-Performance-Embedded-Systems에서 사용할 수 있습니다.

실시간 임베디드 시스템 설계에서 FPGA 사용

FPGA의 요소 에서 보았듯이 1장 섹션 , 고성능 설계 내장 시스템 , 일반적인 FPGA 장치에는 많은 수의 룩업 테이블, 플립플롭, 블록 RAM 요소, DSP 슬라이스 및 기타 구성 요소가 포함되어 있습니다. 이러한 각 구성 요소의 세부 기능을 이해하는 것이 도움이 될 수 있지만 FPGA 개발 프로세스 중에 그러한 우려가 반드시 유익한 것은 아닙니다. 염두에 두어야 할 가장 중요한 제약 조건은 특정 FPGA 부품 번호에 이러한 각 요소의 유한 개수가 포함되어 있으며 설계가 특정 FPGA 모델을 대상으로 하는 경우 이러한 제한을 초과할 수 없다는 것입니다.

대신, 임베디드 시스템의 요구 사항 설명의 관점에서 FPGA 개발 프로세스를 보는 것이 더 생산적입니다. 임의로 선택한 FPGA 모델을 대상으로 하는 FPGA 디자인 개발을 시작할 수 있습니다. 개발이 진행됨에 따라 리소스 제한에 도달하거나 현재 대상 FPGA에 없는 설계에 필요한 FPGA 기능을 식별할 수 있습니다. 그 시점에서 다른, 더 유능한 대상을 선택하고 개발을 계속할 수 있습니다.

또는 설계 개발이 거의 완료됨에 따라 원래 선택한 대상 FPGA에 과도한 리소스가 포함되어 있고 더 작은 FPGA를 선택하여 설계를 개선할 수 있으며 더 적은 비용, 더 적은 수의 핀, 더 작은 패키지 크기, 전력 소비 감소.

이러한 상황에서 타겟 FPGA를 동일한 제품군 내에서 다른 모델로 전환하는 것은 일반적으로 간단합니다. 지금까지 생성한 개발 도구와 설계 아티팩트는 새로 대상이 지정된 FPGA 모델에서 완전히 재사용할 수 있어야 합니다. 동일한 공급업체의 다른 FPGA 제품군으로 전환하거나 다른 공급업체의 모델로 전환해야 하는 경우 전환에 더 많은 작업이 필요할 수 있습니다.

이 논의의 요점은 고성능 임베디드 시스템 개발 노력의 초기에 특정 FPGA 모델을 식별하는 것이 그다지 중요하지 않다는 것을 강조하는 것입니다. 대신 초기 고려 사항은 FPGA를 설계의 일부로 사용하기로 한 결정을 검증하는 데 초점을 맞춰야 하며, FPGA가 최상의 설계 접근 방식인 경우 적절한 FPGA 공급업체 및 장치 제품군 선택을 진행해야 합니다.

이 책의 예제 프로젝트는 FPGA 개발 도구의 Xilinx Vivado 제품군을 기반으로 합니다. 일부 Xilinx FPGA 제품군을 개발하려면 Vivado 라이선스를 구매해야 하지만, 우리가 작업할 Artix-7의 FPGA 장치는 Vivado에서 무료로 지원됩니다. Artix-7 FPGA 제품군은 고성능, 낮은 전력 소비 및 총 시스템 비용 감소의 속성을 결합합니다. 유사한 FPGA 장치 제품군 및 개발 도구 제품군은 다른 FPGA 공급업체에서 구할 수 있습니다.

FPGA 개발은 다양한 유형의 분석 및 설계 데이터 입력이 필요한 상당히 복잡한 프로세스입니다. 너무 추상적인 수준에서 이러한 주제를 논의하는 것을 피하고 작업 예제 프로젝트의 측면에서 구체적인 결과를 제시하기 위해 우리는 책 전체에서 Vivado를 사용할 것입니다. 여기에서 설명하는 도구와 기술에 익숙해지면 다른 공급업체의 유사한 도구를 사용하여 이를 적용할 수 있어야 합니다.

다음 섹션에서는 블록 RAM의 수량, 사용 가능한 I/O 신호의 수량 및 유형, 특수 온칩 하드웨어 리소스, FPGA 패키지에 있는 하나 이상의 하드웨어 프로세서 코어.

RAM 및 분산 RAM 차단

RAM 차단 FPGA 내에서 메모리 영역을 구현하는 데 사용됩니다. 특정 메모리 영역은 비트 단위의 너비(일반적으로 8 또는 16비트)와 메모리 영역의 저장 위치 수를 정의하는 깊이로 지정됩니다.

FPGA에서 블록 RAM의 총량은 일반적으로 킬로비트 로 지정됩니다. (KB ). 사용 가능한 블록 RAM의 양은 FPGA 제품군과 특정 제품군 내의 모델에 따라 다릅니다. 예상대로 더 크고 더 비싼 부품은 일반적으로 블록 RAM으로 사용할 수 있는 더 많은 양의 리소스를 갖습니다.

Xilinx FPGA 및 다른 공급업체의 FPGA에서는 다양한 수준으로 블록 RAM 외에 분산 RAM이라고 하는 별개의 메모리 범주를 사용할 수 있습니다. 분산 RAM 룩업 테이블에 사용되는 논리 요소로 구성되며 이러한 장치의 회로를 용도 변경하여 각각 16비트를 포함하는 작은 RAM 세그먼트를 형성합니다. 이러한 세그먼트는 필요한 경우 더 큰 메모리 블록을 형성하기 위해 집계될 수 있습니다.

블록 RAM은 프로세서 캐시 메모리를 구현하거나 I/O 데이터를 위한 저장 버퍼와 같이 전통적으로 RAM과 관련된 목적으로 사용되는 경향이 있습니다. 분산 RAM은 중간 계산 결과의 임시 저장과 같은 목적으로 사용될 수 있습니다. 분산 RAM은 룩업 테이블 회로를 기반으로 하기 때문에 설계에 분산 RAM을 사용하면 논리 연산을 구현하는 데 사용할 수 있는 리소스가 줄어듭니다.

블록 RAM은 단일 포트 또는 이중 포트를 가질 수 있습니다. 단일 포트 블록 RAM은 작동 중에 RAM을 읽고 쓰는 프로세서의 일반적인 사용 패턴을 나타냅니다.

듀얼 포트 블록 RAM은 2개의 읽기/쓰기 포트를 제공하며, 두 포트 모두 동일한 메모리 영역을 동시에 능동적으로 읽거나 쓸 수 있습니다.

듀얼 포트 블록 RAM은 서로 다른 클록 속도로 실행되는 FPGA 부분 간에 데이터가 전송되는 상황에 이상적입니다. 예를 들어, I/O 하위 시스템은 들어오는 데이터 스트림을 수신할 때 수백 MHz의 클록 속도를 가질 수 있습니다. I/O 하위 시스템은 들어오는 데이터가 FPGA의 고속 I/O 채널 중 하나를 통해 도착할 때 블록 RAM에 기록합니다. 다른 클록 속도로 실행되는 FPGA 내의 별도의 하위 시스템은 I/O 하위 시스템의 작동을 방해하지 않고 블록 RAM의 두 번째 포트에서 데이터를 읽을 수 있습니다.

블록 RAM은 선입 선출 방식으로도 작동할 수 있습니다. (FIFO ) 모드. 들어오는 직렬 데이터 스트림의 예에서 I/O 하위 시스템은 데이터 단어가 도착할 때 FIFO에 데이터 단어를 삽입할 수 있고 처리 하위 시스템은 동일한 순서로 데이터 단어를 읽을 수 있습니다. FIFO 모드의 블록 RAM은 FIFO가 가득 찼는지, 비어 있는지, 거의 가득 찼는지 또는 거의 비어 있는지 여부를 나타내는 신호를 제공합니다. 거의 가득 찼음 의 정의 및 거의 비어 있음 시스템 설계자에게 달려 있습니다. 거의 비어 있음 을 할당하는 경우 FIFO에 16개 미만의 항목이 남아 있다는 의미이므로 FIFO가 거의 비어 있다고 표시하지 않을 때마다 데이터 가용성을 추가로 확인하지 않고도 16개 항목을 읽을 수 있다는 것을 확신할 수 있습니다.

FIFO 모드에서 블록 RAM을 사용하는 경우 FIFO에 항목을 삽입하는 논리가 FIFO가 가득 찼을 때 쓰기를 시도하지 않고 FIFO에서 읽는 논리가 FIFO가 비어 있을 때 읽기를 시도하지 않는 것이 중요합니다. 이러한 이벤트 중 하나가 발생하면 시스템에서 데이터가 손실되거나 정의되지 않은 데이터를 처리하려고 시도합니다.

FPGA I/O 핀 및 관련 기능

FPGA는 고성능 애플리케이션에 사용하기 위한 것이므로 I/O 핀은 일반적으로 다양한 고속 I/O 표준을 구현할 수 있습니다. FPGA 개발 도구 모음을 사용하여 설계를 구현하는 동안 시스템 개발자는 FPGA 패키지의 특정 핀에 기능을 할당하고 적절한 인터페이스 표준으로 작동하도록 각 핀을 구성하는 작업을 수행해야 합니다. FPGA 모델 코드 내의 입력 및 출력 신호를 올바른 패키지 핀과 연결하려면 추가 단계를 수행해야 합니다.

핀 레벨에서 개별 I/O 신호는 단일 종단이거나 차동입니다.

단일 종단 신호 접지를 참조합니다. 기존 트랜지스터-트랜지스터 논리 (TTL ) 및 상보성 금속 산화물 반도체 (CMOS ) 디지털 신호는 접지에 대해 0-5VDC 범위에서 작동합니다.

최신 FPGA는 일반적으로 레거시 5VDC 신호 범위를 지원하지 않지만 대신 감소된 전압 범위에서 작동하는 TTL 및 CMOS 신호를 지원하므로 전력 소비를 줄이고 속도를 개선합니다. 저전압 TTL (LVTTL ) 신호는 0-3.3VDC 범위에서 작동합니다. 저전압 CMOS (LVCMOS ) 신호는 1.2, 1.5, 1.8, 2.5 및 3.3V의 신호 전압으로 선택할 수 있습니다. 이러한 신호 유형의 이름은 LVCMOS12, LVCMOS15, LVCMOS18, LVCMOS25 및 LVCMOS33입니다. 고속 트랜시버 로직 을 포함한 기타 고성능 단일 종단 신호 유형을 사용할 수 있습니다. (HSTL ) 및 스텁 시리즈 종료 논리 (SSTL ).

단일 종단 신호는 푸시 버튼 입력 읽기 및 LED 조명과 같은 저주파 목적에 널리 사용됩니다. 단일 종단 신호는 I2C 및 SPI와 같은 많은 저속 통신 프로토콜에서도 사용됩니다. 단일 종단 신호의 중요한 단점은 신호를 전달하는 전선 및 인쇄 회로 기판 트레이스에 결합된 노이즈가 수신기에 대한 입력을 손상시킬 가능성이 있다는 것입니다. 이 문제는 차동 신호를 사용하여 크게 줄일 수 있습니다.

가장 높은 데이터 전송 속도의 경우 차동 신호가 선호되는 접근 방식입니다.

차동 신호 한 쌍의 I/O 핀을 사용하고 반대 신호를 두 핀으로 구동합니다.

즉, 한 핀은 더 높은 전압으로 구동되고 다른 핀은 더 낮은 전압으로 구동되어 0 데이터 비트를 나타내며 핀 전압이 반전되어 1 비트를 나타냅니다. 차동 수신기는 데이터 비트가 0인지 1인지 결정하기 위해 두 신호를 뺍니다. 차동 신호를 전달하는 두 개의 와이어 또는 트레이스가 물리적으로 매우 가깝게 위치하기 때문에 신호 중 하나에 결합되는 모든 노이즈는 다른 하나에도 결합됩니다. 아주 비슷한 방식으로. 빼기 연산은 대부분의 노이즈를 제거하여 단일 종단 신호보다 훨씬 높은 데이터 전송 속도에서 안정적인 연산을 가능하게 합니다.

표준 FPGA는 다양한 차동 신호 표준을 지원합니다. HSTL 및 SSTL의 여러 차동 버전이 정의되며 각각에 대한 다양한 신호 전압 레벨이 있습니다.

저전압 차동 신호 (LVDS )은 1994년에 표준으로 도입되었으며 다양한 응용 분야에서 계속 사용되고 있습니다. LVDS 신호 송신기는 3.5mA의 정전류를 생성하고 그림 4.1과 같이 0 및 1 데이터 값을 나타내는 상태 변화를 생성하기 위해 수신기에서 저항을 통해 흐르는 전류의 방향을 전환합니다. :


그림 4.1 – LVDS 인터페이스

LVDS 통신에서는 다른 차동 및 단일 종단 신호 처리 표준과 마찬가지로 송신기와 수신기 사이의 통신 경로 임피던스가 종단 임피던스(LVDS의 경우 100옴)와 거의 일치하는 것이 중요합니다. 통신 채널의 임피던스가 종단 임피던스와 일치하지 않으면 회선에서 반사가 발생하여 안정적인 데이터 수신을 방해할 수 있습니다.

차동 신호 트레이스 쌍의 임피던스는 쌍 트레이스의 기하학적 구조와 접지면과의 관계에 따라 달라집니다. 6장에서 볼 수 있듯이 , KiCad로 회로 설계 , 고속 차동 신호 표준의 요구 사항을 충족하는 회로 기판을 설계하는 것은 간단합니다.

특수 하드웨어 리소스

FPGA는 일반적으로 합성된 FPGA 기능을 사용하는 것보다 하드웨어에서 더 효율적으로 구현되거나 FPGA 구성 요소로 구현할 수 없는 일반적으로 요구되는 기능을 위한 전용 하드웨어 리소스 선택을 포함합니다. 이러한 리소스의 몇 가지 예는 다음과 같습니다.

이러한 하드웨어 리소스를 통해 광범위한 기능을 갖춘 복잡한 시스템을 개발할 수 있습니다. 하드웨어 성능이 FPGA 로직 리소스를 사용하여 합성된 동등한 기능보다 훨씬 우수하기 때문에 MAC 연산과 같은 기능을 위한 전용 하드웨어가 제공됩니다.

프로세서 코어

일부 FPGA 제품군에는 최대 소프트웨어 실행 속도와 FPGA 구현 알고리즘의 성능 이점을 결합하기 위한 하드웨어 프로세서 코어가 포함되어 있습니다. 예를 들어 Xilinx Zynq-7000 제품군은 하드웨어 ARM Cortex-A9 프로세서와 기존 FPGA 패브릭을 통합합니다.

하드웨어 프로세서가 필요하지 않은 FPGA 설계는 소프트 프로세서라고 하는 FPGA 리소스를 사용하여 프로세서를 구현할 수 있습니다. . 소프트 프로세서는 일반적으로 하드웨어에 구현된 프로세서의 성능과 일치하지 않지만 구성이 가능합니다.

다음 섹션에서는 FPGA 알고리즘을 개발하는 데 사용되는 주요 프로그래밍 언어와 데이터 입력 방법을 소개합니다.

Packt Publishing의 허가를 받아 재인쇄했습니다. 저작권 © 2021 팩트 퍼블리싱


짐 레딘 Ledin Engineering, Inc.의 CEO입니다. Jim은 임베디드 소프트웨어 및 하드웨어 설계, 개발 및 테스트 전문가입니다. 그는 또한 임베디드 시스템 사이버 보안 평가 및 침투 테스트를 수행합니다. 그는 학사 학위가 있습니다. Iowa State University에서 항공우주 공학 학위 및 M.S. Georgia Institute of Technology에서 전기 및 컴퓨터 공학 학위를 취득했습니다. Jim은 캘리포니아에 등록된 전문 전기 엔지니어이자 CISSP(공인 정보 시스템 보안 전문가), CEH(공인 윤리 해커) 및 CPT(공인 침투 테스터)입니다.

관련 콘텐츠:

더 많은 Embedded를 보려면 Embedded의 주간 이메일 뉴스레터를 구독하세요.


임베디드

  1. 연결된 하드웨어 설계에서 비용이 많이 드는 놀라움을 피하는 방법
  2. 임베디드 시스템 디자인이란:디자인 프로세스의 단계
  3. Eclipse IoT로 IoT 개발 간소화
  4. 테스트 주도 개발로 상태 머신 개발
  5. 내장된 AI로 빅 데이터를 스마트 데이터로 전환
  6. Cypress:IoT 설계 복잡성을 완화하는 ModusToolbox Suite
  7. 격자:MachX03D FPGA는 하드웨어 루트 오브 트러스트 기능으로 보안을 강화합니다.
  8. 광학 센서로 혈압을 측정하는 디자인 키트
  9. Java 9 - 리소스로 시도 개선
  10. 첨가제 결합