Czy istnieją biblioteki Open Source dla VHDL, tak jak dla C ++ lub Pythona?

11

Kiedy podchodzę do problemu w C ++ lub pythonie, istnieje wiele bibliotek, które znacznie obciążają mój kod. Myślę o GNU GSL , BOOST lub FFTW dla C ++ oraz NumPy lub SciPy dla Pythona. Pod wieloma względami fakt, że te zasoby istnieją, sprawia, że ​​kodowanie w tych językach jest opłacalne, ponieważ biblioteki uniemożliwiają przepisanie od podstaw wszystkich elementów niskiego poziomu.

Wydaje się, że standardowe biblioteki IEEE obejmują tylko bardzo podstawowe informacje, takie jak typy danych (podobne do standardowych bibliotek C).

Wygląda na to, że w VHDL można kupić / znaleźć rdzenie IP, które rozwiążą problem, zamiast korzystać z biblioteki open source. W pythonie, jeśli chcę porozmawiać z urządzeniem szeregowym, po prostu import seriali po prostu mam dość. W VHDL albo utknąłem pisząc od zera szeregowy protokół, albo musiałbym szukać w różnych repozytoriach, dopóki nie znajdę kogoś, kto stworzył coś takiego. Następnie wstawiałbym fragmenty kodu do mojego projektu, zamiast zawierać coś i nazywać to. W podobny sposób, jeśli chcę wykonać FFT, mogę znaleźć przykłady FFT w VHDL za pośrednictwem Google, ale nie mogę znaleźć czegoś prostego, takiego jak FFTW.

Czy są dostępne jakieś kompleksowe biblioteki typu open source, które mogę zaimportować do swoich projektów? Dlaczego wszyscy wydają się tworzyć własne kody dla wielu takich samych rzeczy?

Sam
źródło
2
Czy przeszukałeś opencores.org?
MarkU
3
Biblioteki weryfikacyjne VHDL można znaleźć na stronie osvvm.org
Jim Lewis
Opencores, możesz także kupować biblioteki z różnych źródeł. Spędzisz trochę czasu z większością rdzeni z otwartych rdzeni, ponieważ większość nie jest dobrze udokumentowana.
Skok napięcia

Odpowiedzi:

14

Jestem programistą i opiekunem w „ The PoC Library ”. Staramy się zapewnić taką bibliotekę złożoną z pakietów (zbiór nowych typów i funkcji) i modułów. Jest wyposażony w typowe fifos, arytmetykę, elementy cross-clock, komponenty we / wy o niskiej prędkości oraz stos Ethernet / IP / UDP (następna wersja).

Jak opisano w @crgrace, projektowanie modułów, które:

  • pracować na wielu platformach
  • obsługuje większość łańcuchów narzędzi dostawców
  • dodaj nie / mniej narzutu

Nasza biblioteka ma wewnętrzny mechanizm konfiguracji (PoC.config), który pozwala rozróżnić dostawców, urządzenia, a nawet podrodziny urządzeń, aby wybrać odpowiedni kod lub zoptymalizowaną implementację. W niektórych punktach rozróżnia także kod syntezy i kod symulacyjny.

Na przykład PoC.fifo_cc_gotFIFO z interfejsem „wspólnego zegara” (cc) i wysyłającymi / otrzymującymi sygnały do ​​sterowania fifo. Fifo można konfigurować pod względem szerokości, głębokości, bitów stanu wypełnienia i typu realizacji. Możliwe jest wybranie typu implementacji RAM opartego na LUT lub On-Chip-RAM (ocram). Jeśli ten FIFO jest syntetyzowany z opcją ocram dla Altera, używa altsyncram; jeśli wybrano Xilinx, używa on ogólnego opisu BlockRAM i implementuje arytmetykę wskaźnika poprzez jawne tworzenie instancji carrychain (Xilinx XST nie znajduje optymalnego rozwiązania, więc odbywa się to ręcznie).

Istnieją 2 inne typy fifo z „zależnym zegarem” (dc) i niezależnym interfejsem zegara (ic). Więc jeśli konieczne jest przejście z normalnego fifo na cross-clock fifo (PoC.fifo_ic_got), zmień nazwę bytu, dodaj zegar i zresetuj dla drugiej domeny zegarowej, to wszystko.

Myślę, że to dowodzi, że można pisać wspólne moduły, które działają na wielu platformach i kompilują w różnych narzędziach (Spartan-> Virtex, Cyclone -> Stratix; ISE, Vivado, Quartus).

Oprócz PoC istnieją inne biblioteki typu open source:


Projekty „Discover Free and Open Source Silicon” ( FOSSi ) w GitHub oferują przeglądalną bazę danych wszystkich projektów GitHub, które wykorzystują głównie , , lub inny ważny język opisu sprzętu ( ).

Zobacz też:

Paebbels
źródło
+1 za pokazanie tego, co zrobiłeś, a także tego, co zrobili inni. Dobra długa lista.
Mister Mystère,
3

Biblioteki typu open source, takie jak opisywane, nie byłyby tak samo przydatne dla VHDL lub Verilog, jak dla ogólnego języka programowania. Wynika to z tego, w JAKI sposób implementujesz daną funkcję, może bardzo wiele w zależności od tego, co próbujesz zrobić. Kod, który jest dobry dla FPGA i prawdopodobnie nie jest tak dobry dla ASIC i vice versa.

Ponadto, ponieważ opisujemy sprzęt, funkcja, która wykonuje FFT, wymagałaby takich szczegółów, jak szerokość słowa i strategia zegara i resetowania, aby związać ręce i ograniczyć cały projekt. Jeśli uczynisz tę funkcję bardzo elastyczną, miałoby to ogromne koszty ogólne.

Na koniec spójrz na rozmiar pliku wykonywalnego, na przykład, jeśli w bibliotece C znajduje się wiele bibliotek. Jest tam mnóstwo wzdęć. To nie ma znaczenia dla rozwoju oprogramowania (przez większość czasu), ale ma duże znaczenie dla FPGA, a zwłaszcza dla ASIC. Nie ma sensu syntezowanie zbędnych kosztów ogólnych.

Najważniejsze jest to, że nie ma takich bibliotek, a twoje obecne podejście jest solidne.

Crgrace
źródło
Alternatywne generatory rdzeniowe (IP) zapewniają również ryzyko Scylli i Chabydris związane z zablokowaniem się dostawcy i spowodowaniem wzdęcia. Możliwości układów FPGA i ASIC urosły na tyle, że można je obsługiwać nadęty, problem to koszt i testowanie, co pomogło w standaryzacji nadęków (np. AMBA AXI4). Kompromis między czasem wprowadzenia na rynek a „kosztami, których nie potrzebujesz”, już dokonanymi przez całe branże. Projektowanie systemu z wykorzystaniem bloków konstrukcyjnych zamiast projektowania sprzętu, ten ostatni jest narzędziem pomocniczym VHDL.
user8352
Twój trzeci akapit jest dość nieświadomy tego, jak działają kompilatory i narzędzia do syntezy - narzędzia powinny odrzucać niepotrzebne rzeczy i nieużywane wyniki, prawdopodobnie nawet więcej w ustawieniach logiki cyfrowej niż w bibliotece języka wysokiego poziomu, gdzie mogą być jakieś lokalne zmienne i przydziały pamięci, które są narzutem abstrakcji biblioteki, szczególnie jeśli jest ona dynamicznie połączona.
Chris Stratton,
2

VHDL i Verilog są językami opisowymi i opisują bloki sprzętowe. Sterownik szeregowy w C ++ może przekształcić się w szeregowy adres IP w VHDL / Verilog.

opencores.org to największa jak dotąd baza danych typu open source.

Aby ułatwić proces wyszukiwania, pobierania i przeglądania kodu (przez Github), możesz użyć tego nowoczesnego interfejsu:

http://freerangefactory.org/cores.html

Jeśli na przykład szukasz numeru seryjnego, możesz skończyć tutaj:

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

i bezpośrednio przeskocz do kodu w GitHub. Tam zobaczysz, że możesz dość łatwo utworzyć instancję modułu szeregowego i podłączyć do niego własny obwód oraz rozpocząć wysyłanie i odbieranie danych. Jest to tak proste, jak szeregowe biblioteki lib w C ++.

Mam nadzieję, że to pomoże.

Fabrizio
źródło
0

Pierwszą stroną, na której odwiedzam tego typu rzeczy (jak wspomniano @ MarkU), jest opencores.org.

Na przykład istnieje sparametryzowany silnik FFT , napisany w języku VHDL, wydany na licencji BSD. Status to „beta”.

Spehro Pefhany
źródło
nie o to prosi OP. On lub ona wie o patrzeniu na opencores.org. Sparametryzowany silnik FFT jest daleki od importowania standardowej biblioteki matematycznej do Pythona i korzystania z niej. Ze względu na narzut nie ma w sprzęcie „oprogramowania pośredniego”.
crgrace
0

Do weryfikacji dostępna jest metodologia weryfikacji VHDL typu Open Source (OSVVM).
OSVVM to kompleksowa, zaawansowana metodologia weryfikacji VHDL, która upraszcza implementację zasięgu funkcjonalnego, ograniczonego losowego i inteligentnego losowania pokrycia (inteligentna metodologia testowa). Ułatwia także wdrażanie udostępnionych plików transkrypcji, raportowanie błędów, dzienniki (drukowanie warunkowe) i modelowanie pamięci.

Strona internetowa i blog OSVVM znajdują się pod adresem http://osvvm.org . Pakiety są również dostępne na github pod adresem : https://github.com/JimLewis/OSVVM

Jim Lewis
źródło