산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
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 개발에 사용되는 전통적인 언어는 VHDL과 Verilog입니다.

현재 세대 FPGA 개발 도구는 일반적으로 블록 다이어그램 기술을 사용하여 시스템 구성을 정의하는 기능과 함께 이 두 언어를 모두 지원합니다. 일부 도구 모음은 기존 C 및 C++ 프로그래밍 언어를 사용하여 FPGA 기능 정의도 지원합니다.

VHDL

VHSIC 하드웨어 설명 언어 (VHDL ), 여기서 VHSIC는 매우 를 나타냅니다. 고속 집적 회로 , Ada 프로그래밍 언어를 연상시키는 구문이 있습니다. VHDL은 1983년부터 미 국방부의 지도하에 개발되었습니다.

Ada와 마찬가지로 VHDL은 매우 장황하고 엄격하게 구조화되는 경향이 있습니다. 프로그래밍 언어 측면에서 VHDL은 강력한 형식입니다. 이 언어에는 기본 데이터 유형(주로 부울, 비트, bit_vector, 문자, 문자열, 정수, 실수, 시간 및 배열)이 미리 정의되어 있습니다. 다른 모든 데이터 유형은 기본 유형으로 정의됩니다.

VHDL 라이브러리 세트는 Institute of Electrical and Electronics Engineers 에서 정의했습니다. (IEEE ) 및 IEEE 1164 표준, 다중값 논리 시스템 으로 공식화 VHDL 모델 상호 운용성 . 이러한 라이브러리는 VHDL 언어에서 사용할 논리 값 집합을 정의합니다. 이 라이브러리에는 1비트 신호를 나타내는 std_logic이라는 유형이 포함되어 있습니다. std_logic 유형 내의 논리 값은 다음 표에 표시된 문자 리터럴로 표시됩니다.

앞의 그림에서 "강한" 0 및 1 값은 지정된 이진 상태로 구동되는 신호를 나타냅니다. "약한" 신호는 여러 드라이버가 있는 버스에서 구동되는 신호를 나타내며, 여기서 모든 드라이버는 다른 드라이버를 무시하고 버스에서 자신을 주장할 수 있습니다. Z 값은 고임피던스 상태의 CMOS 출력을 나타내며, 여기서 버스를 0 또는 1 상태로 구동하는 대신 출력이 버스에서 효과적으로 분리되어 버스를 전혀 구동하지 않습니다. U 상태는 모든 신호의 기본값을 나타냅니다. 회로 시뮬레이션을 수행할 때 U 상태의 모든 신호가 감지되며, 이는 초기화되지 않은 값이 의도하지 않게 사용되고 있음을 나타냅니다. X 상태는 이를 구동하는 출력이 없는 와이어와 연결됩니다. – 상태는 사용되지 않는 입력을 나타내므로 어떤 상태인지는 중요하지 않습니다.

VHDL 회로 설계는 일반적으로 다음 명령문을 통해 IEEE 1164 라이브러리를 가져오는 것으로 시작합니다.

라이브러리 IEEE;
IEEE.std_logic_1164.all 사용

이 장의 뒷부분에 나오는 프로젝트 예제에서 VHDL을 사용할 것입니다. 이것은 Verilog보다 VHDL에 대한 강한 선호를 나타내기 위한 것이 아닙니다. 두 하드웨어 정의 언어 모두 FPGA용으로 합성할 수 있는 기본적으로 모든 디자인을 완벽하게 표현할 수 있습니다.

베릴로그

Verilog 하드웨어 설명 언어 (HDL )은 1984년에 도입되어 2005년 IEEE 1364로 표준화되었습니다. 2009년에는 Verilog 표준이 SystemVerilog 와 결합되었습니다. IEEE 표준 1800-2009를 생성하는 표준입니다. SystemVerilog에는 Verilog에 있는 하드웨어 설계 기능 외에도 시스템 검증을 수행하기 위한 광범위한 기능이 포함되어 있습니다.

Verilog는 유사한 연산자 우선 순위와 if, else, for 및 while을 비롯한 일부 동일한 제어 흐름 키워드의 사용을 포함하여 C 프로그래밍 언어와 유사하도록 설계되었습니다.

Verilog는 유선 개념을 사용합니다. 신호 상태를 나타냅니다. 신호 값은 0, 1, don't care(x) 또는 높은 임피던스(z) 값 중 하나를 취할 수 있으며 강한 또는 약함 신호 강도.

VHDL과 Verilog는 모두 논리 회로를 설계하는 데 사용할 수 있는 언어 하위 집합을 정의합니다. 이러한 하위 집합을 합성 가능 이라고 합니다. 언어 하위 집합. 회로 시뮬레이션과 같은 작업을 지원하기 위해 합성 가능한 하위 집합 이외의 추가 언어 기능을 사용할 수 있습니다. 이 장의 뒷부분에서 이에 대한 예를 볼 것입니다.

합성할 수 없는 언어 구조는 전통적인 소프트웨어 프로그래밍 언어처럼 동작하는 경향이 있습니다. 예를 들어, 합성할 수 없는 for 루프는 일반 프로그래밍 언어에서처럼 코드 블록을 지정된 횟수만큼 순차적으로 반복합니다. 반면에 합성 가능한 for 루프는 루프의 각 반복을 나타내는 병렬로 실행되는 복제된 하드웨어 구성의 컬렉션을 생성하기 위해 효과적으로 펼쳐집니다.

블록 다이어그램

텍스트 기반 HDL 이상의 추상화 수준에서 최신 FPGA 개발 도구 제품군은 블록 구조 형식을 사용하는 마이크로프로세서 및 정교한 I/O 장치와 같은 복잡한 논리 구성요소를 통합하는 시스템 설계의 신속한 구성을 지원합니다. 그림 4.2 다음은 MicroBlaze 소프트 프로세서를 통합한 Xilinx FPGA 설계에 대한 블록 다이어그램의 일부 예입니다.

전체 크기 이미지를 보려면 클릭하세요.

그림 4.2 – MicroBlaze 소프트 마이크로프로세서가 포함된 블록 다이어그램

MicroBlaze 프로세서 Artix-7을 포함한 프로세서 제품군의 FPGA 설계에 사용하기 위해 Xilinx Vivado 도구 제품군과 함께 제공되는 프로세서 코어입니다.

블록 다이어그램을 사용하면 FPGA 설계에서 복잡한 논리 요소의 인스턴스화 및 상호 연결을 구성하는 시각적으로 직관적인 방법을 제공하지만 다이어그램 뒤에서 개발 도구는 구성 요소와 해당 요소를 정의하기 위해 VHDL 또는 Verilog 코드를 생성한다는 점을 기억하는 것이 중요합니다. 사이. 블록 다이어그램은 이러한 구성 요소의 구성을 관리하기 위한 단순한 사용자 인터페이스입니다.

블록다이어그램을 개발한 후에는 프로젝트와 관련된 파일에 포함될 생성된 HDL 코드를 검사할 수 있습니다. 그림 4.2의 다이어그램에서 , design_1_microblaze_0_0_stub.vhdl이라는 파일이 다이어그램에서 생성됩니다. 이 파일은 다음 VHDL 코드로 시작합니다.

라이브러리 IEEE;
IEEE.STD_LOGIC_1164.ALL 사용
엔티티 디자인_1_microblaze_0_0은(는)
포트(
클럭:STD_LOGIC에서
재설정:STD_LOGIC에서
인터럽트:STD_LOGIC에서
Interrupt_Address:STD_LOGIC_VECTOR(0 ~ 31),
Interrupt_Ack:STD_LOGIC_VECTOR 출력(0에서 1까지),
Instr_Addr:out STD_LOGIC_VECTOR(0 ~ 31),
Instr:STD_LOGIC_VECTOR(0 ~ 31),

이 코드는 IEEE 1164 표준 라이브러리에 대한 참조로 시작한 다음 시스템 클록, 재설정, 인터럽트 요청 및 인터럽트 벡터 입력을 포함하여 마이크로프로세서에서 예상되는 신호를 노출하는 MicroBlaze 프로세서에 대한 인터페이스를 정의합니다. 인터럽트 승인 및 명령 주소 출력; 및 메모리에서 검색된 명령어를 위한 버스입니다.

이 코드는 단일 비트 신호(STD_LOGIC) 및 다중 비트 버스 신호(STD_LOGIC_VECTOR)에 대해 IEEE 1164 라이브러리 데이터 유형을 사용합니다.

목록의 코드는 MicroBlaze 프로세서에 대한 인터페이스를 정의하지만 프로세서 자체의 HDL 정의는 포함하지 않습니다. 마이크로프로세서와 같은 구성요소에 대한 복잡한 HDL 설계는 가치 있는 지적 재산권 으로 간주됩니다. (IP ) 그리고 이러한 디자인을 개발하는 상업 단체는 종종 적절한 라이선스 없이는 사용되지 않도록 조치를 취합니다. 공급업체가 고객이 사용할 IP를 배포할 때 최종 사용자에게 불투명한 컴파일된 형식으로 제공될 수 있습니다. 이를 통해 사용자는 IP를 설계에 통합할 수 있지만 이를 개발하는 데 사용된 HDL을 검사할 수는 없습니다. 이는 라이브러리를 컴파일된 형태로 릴리스하지만 소스 코드를 제공하지 않는 소프트웨어 개발자와 개념적으로 유사합니다.

C/C++

많은 공급업체에서 FPGA 개발에 사용하기 위해 기존의 고급 프로그래밍 언어(종종 C 및 C++)를 HDL 코드로 변환하는 소프트웨어 도구를 제공합니다. FPGA 구현에서 가속화하려는 C 또는 C++의 복잡한 알고리즘이 있는 경우 이 접근 방식이 매력적일 수 있습니다. 또한 이러한 도구를 사용하면 C/C++에 익숙한 소프트웨어 개발자가 HDL 중 하나를 배울 필요 없이 FPGA 사용을 위한 코드 구현을 즉시 시작할 수 있습니다.

이러한 고급 언어용 FPGA 개발 도구는 C/C++ 코드 알고리즘의 결과 FPGA 구현을 크게 최적화할 수 있지만 C/C++ 실행 모델이 명령문의 순차적 실행을 포함한다는 점에서 여전히 연결이 끊긴 부분이 있습니다. 기본 FPGA 환경은 병렬 하드웨어 구성 요소로 구성됩니다. C/C++ 코드로 인한 FPGA 디자인은 일반적으로 프로그래밍 언어 문에 정의된 작업의 순차적 실행을 관리하는 상태 머신 모음과 유사합니다. C/C++ 코드 내에서 병렬 실행 기회의 가용성에 따라 FPGA 구현은 기존 프로세서에서 동일한 코드를 실행하는 것과 비교하여 상당한 성능 향상을 제공할 수 있습니다.

최신 FPGA 개발 도구 모음에서 이 섹션에 설명된 모든 FPGA 구현 방법(VHDL, Verilog, 블록 다이어그램 및 C/C++)은 필요한 경우 단일 설계에 결합될 수 있습니다. 이 때문에 한 팀원은 VHDL로 작업하는 것을 선호하고 다른 팀원은 Verilog를 사용하는 것을 선호할 수 있습니다. 단일 프로젝트 내에서 다중 HDL 사용을 권장하지 않는 프로젝트 관리 이유가 있을 수 있지만 언어 자체는 문제 없이 단일 설계에서 함께 작동합니다. 프로젝트 관리자가 다중 HDL의 사용을 피하고 싶어하는 한 가지 이유는 향후 이러한 노력을 지속하려면 두 언어 모두에 능한 개발자의 참여가 필요하기 때문입니다.

마찬가지로 블록 다이어그램 측면에서 프로젝트에 대한 상위 수준 아키텍처를 정의한 다음 선택한 HDL을 사용하여 세부적인 하위 시스템 기능을 구현할 수 있습니다. 동일한 설계에서 C/C++ 알고리즘에서 생성된 HDL을 통합하는 것도 가능합니다. 임베디드 시스템 설계자와 개발자는 의미를 신중하게 고려하고 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. 내장된 AI로 빅 데이터를 스마트 데이터로 전환
  4. USB Type-C 포트 구현 과제 및 설계 솔루션
  5. 주요 산업 동향이 임베디드 디자인을 형성하고 있습니다
  6. 임베디드 비전 MIPI 카메라용 FPGA 가속기
  7. Clientron:프린터가 통합된 다기능 POS 단말기
  8. 광학 센서로 혈압을 측정하는 디자인 키트
  9. 방위용 FPGA가 조기 액세스로 데뷔
  10. 첨가제 결합