VHDL의 오픈 소스 라이브러리가 C ++ 또는 python에서와 같은 방식으로 존재합니까?


11

C ++ 또는 python에서 문제가 발생하면 코드를 많이 들어 올리는 라이브러리가 많이 있습니다. 나는에 대해 생각하고 GNU GSL , BOOST 파이썬을 위해, 또는 FFTW C에 대한 ++ 및 NumPy와 또는 SciPy. 여러 가지 방법으로, 이러한 리소스가 존재한다는 사실 때문에 라이브러리는 모든 하위 수준의 항목을 처음부터 다시 작성하지 않아도되기 때문에 이러한 각 언어로 코딩 할 가치가 있습니다.

IEEE 표준 라이브러리는 데이터 유형 (C 표준 라이브러리와 유사 함)과 같은 기본 사항 만 다루는 것 같습니다.

VHDL에서는 오픈 소스 라이브러리를 사용하지 않고 문제를 해결하는 "IP 코어"를 구매 / 찾기 할 수 있습니다. 파이썬에서 직렬 장치와 통신하려면 import serial기본적으로 완료됩니다. VHDL에서는 직렬 프로토콜을 처음부터 작성하지 못하거나 일종의 작품을 생산 한 사람을 찾을 때까지 다양한 저장소에서 Google을 검색해야합니다. 그런 다음 무언가를 포함시키고 호출하는 대신 코드 비트를 내 프로젝트에 패치하고 있습니다. 비슷한 방법으로 FFT를 수행하려면 Google을 통해 VHDL에서 FFT의 예를 찾을 수 있지만 FFTW와 같은 간단한 것은 없습니다.

프로젝트로 가져올 수있는 포괄적 인 오픈 소스 라이브러리가 있습니까? 왜 모두가 같은 것들을 위해 자신의 코드를 만드는 것처럼 보입니까?


2
opencores.org을 (를) 검색 했습니까?
MarkU

3
VHDL 검증 라이브러리는 osvvm.org
Jim Lewis

Opencores는 다양한 소스에서 라이브러리를 구입할 수도 있습니다. 대부분은 잘 문서화되어 있지 않기 때문에 오픈 코어의 대부분의 코어와 함께 시간을 보내 게됩니다.
전압 스파이크

답변:


14

저는 ' The PoC Library ' 의 개발자이자 관리자 입니다. 우리는 패키지 (새로운 유형과 기능의 수집)와 모듈로 구성된 라이브러리를 제공하려고합니다. 일반적인 fifo, 산술, 크로스 클럭 구성 요소, 저속 I / O 구성 요소 및 이더넷 / IP / UDP 스택 (다음 릴리스)이 함께 제공됩니다.

@crgrace가 설명했듯이 모듈을 디자인하는 것은 매우 복잡합니다.

  • 많은 플랫폼에서 작업
  • 대부분의 공급 업체 툴 체인 지원
  • 오버 헤드 없음 / 없음

당사 라이브러리에는 공급 업체, 장치 및 장치 하위 제품군을 구분하여 올바른 코드 또는 최적화 된 구현을 선택하기위한 내부 구성 메커니즘 (PoC.config)이 있습니다. 또한 일부 지점에서 합성 코드와 시뮬레이션 코드를 구별합니다.

예를 들어 PoC.fifo_cc_got'공통 클록'(cc) 인터페이스가있는 FIFO와 fifo를 제어하기위한 신호를 넣거나 가져옵니다. fifo는 너비, 깊이, 채우기 상태 비트 및 구현 유형으로 구성 할 수 있습니다. LUT 기반 RAM 또는 온칩 RAM (ocram) 구현 유형을 선택할 수 있습니다. 이 fifo가 Altera의 ocram 옵션으로 합성되면 altsyncram을 사용합니다. Xilinx를 선택하면 일반 BlockRAM 설명을 사용하고 명시 적 캐리 체인 인스턴스화 (Xilinx XST가 최적의 솔루션을 찾지 못하므로 수동으로 수행됨)를 통해 포인터 산술을 구현합니다.

'종속 클록'(dc) 및 독립 클록 (ic) 인터페이스를 가진 2 개의 다른 fifo 유형이 있습니다. 따라서 일반 fifo에서 크로스 클럭 fifo (PoC.fifo_ic_got)로 전환해야하는 경우 엔터티 이름을 변경하고 시계를 추가하고 두 번째 시계 도메인을 재설정하면됩니다.

나는 이것이 여러 플랫폼에서 작동하고 다른 도구 (Spartan-> Virtex, Cyclone-> Stratix; ISE, Vivado, Quartus)에서 컴파일하는 공통 모듈을 작성할 수 있다고 생각합니다.

PoC 외에도 다른 오픈 소스 라이브러리가 있습니다.


GitHub의 " FOSSi (Discover Free and Open Source Silicon)" 프로젝트는 주로 , , 또는 기타 중요한 하드웨어 설명 언어 ( )를 사용하는 모든 GitHub 프로젝트의 검색 가능한 데이터베이스를 제공합니다 .

또한보십시오:


내가 한 일과 다른 사람이 한 일을 보여주는 +1 좋은 긴 목록.
Mister Mystère

3

여러분이 설명하는 오픈 소스 라이브러리는 범용 프로그래밍 언어만큼 VHDL이나 Verilog만큼 유용하지 않습니다. 주어진 함수를 구현하는 방법은 수행하려는 작업에 따라 크게 달라질 수 있기 때문입니다. 좋은 코드와 FPGA는 아마도 ASIC에는 좋지 않으며 그 반대도 마찬가지입니다.

또한 하드웨어를 설명하기 때문에 FFT를 수행하는 기능에는 워드 너비 및 클럭 및 재설정 전략과 같은 세부 사항이 필요하므로 손을 묶고 전체 디자인을 제한해야합니다. 기능을 매우 유연하게 만들면 엄청난 오버 헤드가 발생합니다.

마지막으로 C에 많은 라이브러리를 포함시킬 때 실행 파일의 크기를 살펴보십시오. 거기에 많은 팽창이 있습니다. 이는 소프트웨어 개발 (대부분)에는 중요하지 않지만 FPGA 및 특히 ASIC 개발에는 중요합니다. 불필요한 오버 헤드를 합성하는 것은 의미가 없습니다.

결론은 그러한 라이브러리가 없으며 현재 접근 방식은 건전하다는 것입니다.


대체 (IP) 코어 제너레이터는 공급 업체가 끼어 들어 부풀어 오를 위험이 있습니다. FPGA 및 ASIC 용량은 블로 트 표준화 (예 : AMBA AXI4)를 통해 블로 트, 비용 및 테스트를 지원할만큼 충분히 커졌습니다. Time To Market과 이미 전체 산업에서 필요로하는 "오버 헤드 필요 없음"과의 거래. 하드웨어 설계 대신 빌딩 블록을 사용하는 시스템 설계, 후자는 VHDL의 bailiwick입니다.
user8352 2016 년

세 번째 단락은 컴파일러와 합성 도구가 작동하는 방식에 대해 상당히 무의미합니다. 도구는 필요하지 않은 것과 버려지지 않은 결과를 버려야합니다. 어쩌면 로컬 언어가있는 고급 언어 라이브러리보다 디지털 논리 설정 특히 동적으로 링크 된 경우 라이브러리 추상화의 오버 헤드 인 변수 및 메모리 할당.
Chris Stratton

2

VHDL 및 Verilog는 설명 언어이며 하드웨어 블록을 설명합니다. C ++의 직렬 드라이버는 VHDL / Verilog의 직렬 IP로 변환 될 수 있습니다.

opencores.org는 현재까지 가장 큰 오픈 소스 데이터베이스입니다.

Github을 통한 검색, 다운로드 및 코드 탐색 프로세스를 용이하게하기 위해 다음과 같은 최신 인터페이스를 사용할 수 있습니다.

http://freerangefactory.org/cores.html

예를 들어 시리얼을 검색하면 다음과 같이 끝낼 수 있습니다.

http://freerangefactory.org/cores/communication_controller/serial_uart_2/index.html

GitHub의 코드로 바로 이동합니다. 거기에서 직렬 모듈을 쉽게 인스턴스화하고 자체 회로를 연결하고 데이터 송수신을 시작할 수 있음을 알 수 있습니다. 이것은 C ++의 직렬 라이브러리만큼 간단합니다.

이게 도움이 되길 바란다.


0

@MarkU에서 언급 한 것처럼 이런 종류의 사이트를 방문한 첫 번째 사이트는 opencores.org입니다.

예를 들어, VHDL로 작성된 매개 변수화 된 FFT 엔진 이 BSD 라이센스에 따라 릴리스되었습니다. 상태는 "베타"입니다.


그것은 OP가 요구하는 것이 아닙니다. 그는 opencores.org를 보는 것에 대해 알고 있습니다. 매개 변수화 된 FFT 엔진은 파이썬에서 표준 수학 라이브러리를 가져 와서 사용하는 것과는 거리가 멀습니다. 오버 헤드로 인해 하드웨어에 "미들웨어"와 같은 것은 없습니다.
crgrace

0

검증에는 OSVVM (Open Source VHDL Verification Methodology)이 있습니다.
OSVVM은 포괄적 인 고급 VHDL 검증 방법론으로 기능적 적용 범위, 제한된 랜덤 및 지능형 적용 범위 무작위 화 (지능형 테스트 벤치 방법론)를 단순화합니다. 또한 공유 사본 파일, 오류보고, 로그 (조건부 인쇄) 및 메모리 모델링의 구현을 용이하게합니다.

OSVVM의 웹 사이트 및 블로그는 http://osvvm.org에 있습니다. 패키지는 github ( https://github.com/JimLewis/OSVVM) 에서도 제공됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.