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 serial
i 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?
Odpowiedzi:
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:
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_got
FIFO 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 vhdl , verilog , systemverilog lub inny ważny język opisu sprzętu ( hdl ).
Zobacz też:
źródło
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.
źródło
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.
źródło
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”.
źródło
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
źródło