Pytanie:
Do czego HDL kompilują się / syntetyzują?
Jake
2020-05-05 03:59:03 UTC
view on stackexchange narkive permalink

Jestem inżynierem oprogramowania. Jako programista rozumiem, co robi dla mnie mój kompilator, ponieważ ręcznie napisałem bliską tekstową reprezentację tego, co wyprowadza (np. Montaż). Aby uzyskać szczegółowe informacje na temat wyników, mogę spojrzeć na specyfikacje ELF / COFF / MachO (np. Typ pliku, na który tłumaczy mój kod, wyniki mogą się różnić w zależności od języka). Aby dowiedzieć się, jakie są kodowania instrukcji, mogę spojrzeć na instrukcję obsługi mojego procesora. To daje mi wystarczająco dużo informacji, aby zrozumieć, jakie dane generuje kompilator. Daje mi również słownictwo potrzebne do zadawania pytań typu „Jak mogę sprawdzić szczegóły pliku ELF”, a to pytanie jest stosunkowo dobrze sformułowane. Mógłbym również zapytać „Jak spojrzeć na zestaw wygenerowany przez mój kompilator” i to pytanie byłoby dobrze sformułowane. Ostatecznie bajty określone przez plik ELF są umieszczane w pamięci, a procesor wykonuje każdą instrukcję w kolejności i rozumiem semantykę każdej instrukcji.

Odpowiednie kroki / pytania są dla mnie całkowicie niejasne w przypadku FPGA. Nie wiem, na co tłumaczone są Verilog lub VHDL. Nie wiem, jakie są podstawowe prymitywy, z którymi współpracuje FPGA. Nie wiem, jak zadawać pytania, takie jak dwa dobrze sformułowane pytania powyżej, ponieważ po prostu brakuje mi słów. Może się zdarzyć, że równoważne pytania nie mają sensu w tym kontekście, ale w tej chwili nie mogę się tego dowiedzieć. Wiem tylko, że mogę napisać jakiś Verilog, a potem uruchamia się na symulatorze lub na FPGA.

Piszę Verilog, który jest następnie syntetyzowany do ... czegoś? Co to jest? Czy to plik, który mogę sprawdzić? Czy jest używany standardowy format, który mogę wyszukać? Na przykład, gdybym sam chciał napisać symulator, jaki format powinien używać mój symulator?

Następnie zsyntetyzowane wyjście jest programowane na FPGA.Jakich prymitywów używa ten FPGA?Gdyby to było urządzenie osadzone, zwykle bajty byłyby zapisywane w stanie surowym do pamięci flash lub innego rodzaju pamięci.Czy istnieje odpowiednik dla układów FPGA?Może bardziej abstrakcyjnym i bardziej odpowiadającym pytaniem byłoby „jakie bajty przechodzą przez zapis, gdy programowany jest układ FPGA?”

Zamierzałem napisać długą odpowiedź, ale znalazłem to, co znacznie lepiej wyjaśnia sprawy niż ja.Należy zauważyć, że ten przebieg procesu jest specyficzny dla układów FPGA Xilins, ale jest podobny dla wszystkich głównych dostawców układów FPGA.Trzy główne kroki to 1) Wprowadzenie projektu (napisanie kodu VHDL / Verilog), 2) Synteza i 3) Implementacja.Pozostałe dwa kroki to symulacje funkcjonalne (logiczne) i czasowe.Symulacja czasu jest zwykle ostatnim krokiem.https://www.xilinx.com/support/documentation/sw_manuals/xilinx10/isehelp/ise_c_fpga_design_flow_overview.htm
Ogólnie rzecz biorąc, rzeczywiste znaczenie strumienia bitów FPGA jest zastrzeżone i tajne dla producenta FPGA, inżynier ma po prostu narzędzia do tworzenia takich na różnych poziomach wejściowych projektu, do przeglądu danych wyjściowych niektórych wczesnych i środkowych etapów przepływu narzędzi oraz dokumentacjio tym, jak wprowadzić strumień bitów do chipa.Jeśli chcesz grać na niższym poziomie, jedną z bardzo niewielu umiarkowanie nowoczesnych opcji byłaby kratownica iCE40, dla której znaczenie strumienia bitów jest znane wystarczająco szczegółowo, aby istniał łańcuch narzędzi o otwartym kodzie źródłowym.
Zauważ, że możesz napisać symulator, kompilując Verilog na innym zapleczu;spójrz na „Verilator”, który kompiluje go do C.
Siedem odpowiedzi:
The Photon
2020-05-05 04:28:39 UTC
view on stackexchange narkive permalink

Podobnie jak język programowania proceduralnego przechodzi przez kilka etapów (kompilacja, asemblacja, link) w celu utworzenia pliku wykonywalnego, HDL musi przejść przez kilka procesów, zanim zostanie wygenerowany użyteczny plik konfiguracyjny FPGA. Należą do nich

  • Synteza --- konwertuj kod HDL na listę sieci opisującą połączenia między elementami logicznymi.

  • Mapowanie --- Przekonwertuj listę sieci na bardziej szczegółową listę sieci, która wykorzystuje zasoby faktycznie dostępne na twoim urządzeniu FPGA.

  • Miejsce i trasa --- wybierz, które z rzeczywistych zasobów na urządzeniu będą używane dla każdego z wymaganych elementów w danych wyjściowych programu mapującego, i wybierz, które zasoby routingu będą używane do ich łączenia.

  • Generowanie pliku bitowego --- przekonwertuj dane wyjściowe lokalizacji i trasy do formatu faktycznie używanego do zaprogramowania urządzenia.

Więc jeśli pytasz, jaki jest wynik syntezy, masz na myśli wynik pierwszego kroku tego procesu, to jest to plik pośredni używany jako dane wejściowe do programu odwzorowującego. Jeśli masz na myśli wynik całego procesu, jest to plik bitowy , którego FPGA może użyć do skonfigurowania całej swojej logiki i zasobów routingu.

Czy jest jakieś wyjaśnienie używanych gdzieś formatów plików bitefile?Na przykład jeśli mam płytkę, skąd mam wiedzieć, jakie bity powinny znajdować się w formacie pliku bitowego?
Gdzieś zespół inżynierów producenta FPGA musi mieć taki dokument.Ale AFAIK nie jest często udostępniany klientom.Jeśli chcesz wykonać inżynierię wsteczną, możesz użyć edytora projektów niskiego poziomu (przynajmniej Xilinx zapewnił takie narzędzie) i wprowadzić niewielką zmianę w projekcie, a następnie zobaczyć, jak wpływa to na plik bitowy.
Mam gdzieś w moich archiwach definicje plików bitowych dla niektórych wczesnych urządzeń Xilinx (seria 2000, 3000).Ale prawdopodobnie jest na dyskietce 5-1 / 4 cala.
@SteveSh, IIRC nawet w czasach oryginalnych części Virtex informacje były dostępne, a przynajmniej dokumentacja zawierała wystarczająco dużo szczegółów na temat dostępnych zasobów, abyś mógł dobrze zorientować się, jak to będzie wyglądać.
Jakie są nadzieje na Spartan-6 lub DE10?
@Jake,, jeśli próbujesz napisać symulator, możesz raczej spojrzeć na plik wyjściowy miejsca i trasy niż plik bitowy.
W przypadku serii xilinx 7 jest to określone w szczegółach rozdziału 5 jednego z przewodników użytkowania: https://www.xilinx.com/support/documentation/user_guides/ug470_7Series_Config.pdf Wygląda na to, że plik bitowy to po prostu sekwencja zapisówktóry do sterowania rejestrami dla kontrolera zapisu konfiguracji FPGA.
Obejmuje to Spartan 7, odpowiedni dokument dla Spartan 6 to: https://www.xilinx.com/support/documentation/user_guides/ug380.pdf
Ale to jest odpowiednik specyfikacji ELF.Mówią ci, jak załadować rzeczy do pamięci, ale nie mówią, jakie jest znaczenie ładowanych danych.
Istnieje standardowy format pliku bitowego (JEDEC) (rozszerzenie pliku .jed), który jest nadal powszechnie używany dla małych (zwykle opartych na eeprom / flash) programowalnych urządzeń (takich jak sekwensery zasilania), mimo że pojawił się po raz pierwszy w latach 80-tych http: // www.pldtool.com / pdf / jesd3c_jedecfmt.pdf
Niesamowite informacje dla wszystkich!To naprawdę wyjaśniło mi sprawę.Wychodząc z bardzo otwartego charakteru oprogramowania, którego używałem, zanim spodziewałem się tego samego tutaj.Co za inny świat!
@Jake Trwa kilka wysiłków na rzecz odwrotnej inżynierii formatów strumienia bitów, na przykład http://www.clifford.at/icestorm/ (zawiera linki do innych projektów u dołu).Szczególnie icestorm ma ładną, czytelną dla człowieka dokumentację i jest to jedna z „prostszych” rodzin FPGA, więc jest stosunkowo łatwa do zrozumienia.
Dziękuję za zrozumienie!To przypomina mi o XOrg i próbach inżynierii wstecznej rzeczy dla GPU NVidia lol.
MarkU
2020-05-05 07:34:06 UTC
view on stackexchange narkive permalink

Register Transfer Logic (RTL) jest wynikiem pierwszej fazy tłumaczenia, zanim zostanie zmapowane do zasobów specyficznych dla dostawcy, które nie są przenoszone między dostawcami lub nawet między różnymi układami FPGA od tego samego dostawcy. Zasadniczo RTL pokazuje zarówno logikę kombinacyjną, jak i rejestry synchroniczne (przerzutniki D), więc maszyny stanu są rozpoznawalne. RTL jest dość spójna między Alterą i Xilinx i jest prawdopodobnie najbardziej interesującą i użyteczną fazą do kontroli. Problemy z syntezą po raz pierwszy stają się widoczne na etapie RTL, a projekt jest nadal rozpoznawalny. Po przejściu do mapowania specyficznego dla dostawcy jest pocięty i pomieszany. Próba zdekodowania strumienia bitów specyficznego dla chipa jest kosztowna, mało korzystna i będzie bezużyteczna, gdy przejdziesz do innego dostawcy lub nawet innego rozmiaru FPGA z tej samej rodziny. Możesz zobaczyć, co musisz zobaczyć na poziomie RTL.

Zawsze dobrą praktyką jest testowanie nowo opracowanego kodu Verilog lub VHDL poprzez utworzenie jego wystąpienia na stanowisku testowym lub prostym module najwyższego poziomu i sprawdzenie kodu RTL. Xilinx ISE jest bardzo dobry do sprawdzania RTL jako schematu (chociaż czasami pomija pewne rzeczy). Najczęstsze problemy to:

  • 1-bitowe sieci, w których przeznaczona jest magistrala
  • fragmenty logiki nieoczekiwanie usuwane przez optymalizator ... podobnie do tego, jak prosta pętla opóźnienia spinlock zostaje po cichu usunięta przez optymalizację kodu.
  • wyniki nie są całkowicie określone, z powodu podejścia proceduralnego zamiast podejścia opartego na tabeli prawdy. Jeśli narzędzie uzna, że ​​wynik zawsze kończy się na 0 lub zawsze 1, porzuca całą logikę, która generuje ten wynik.
  • logika modułu zostaje obcięta, ponieważ jeden z podmodułów został zoptymalizowany na zawsze 0 lub zawsze 1; może to nastąpić kaskadowo aż do najwyższego poziomu

Ta inspekcja RTL staje się bardzo nieporęczna, chyba że zachowasz małe i proste moduły. Używanie testbencha jest ważnym narzędziem.

Ja też pochodzę z systemów wbudowanych, które najpierw programują, a potem verilog. Największym zagrożeniem dla ludzi takich jak my podczas nauki kodowania HDL jest to, że wygląda jak proceduralny język programowania i czuje się jak proceduralny język programowania (podczas symulacji), ale potem wszystko wybucha, gdy próbujesz zsyntetyzować działający kod. Naprawdę musisz pomyśleć o tym, jak musi wyglądać sprzęt , i upewnić się, że kod RTL zawiera cały sprzęt, jakiego oczekujesz.

Poza faktem, że Verilog / VHDL wymaga wpisania kodu źródłowego do pliku komputerowego, nie ma zbytniego podobieństwa do tradycyjnego C / C ++ / itp. Bardzo niewiele z twojego doświadczenia w programowaniu zostanie przeniesione. Skoncentruj się na dzieleniu dużych problemów na małe, dokumentowaniu wszystkiego szczegółowo i pisaniu stanowisk testowych. Zainwestuj także w dobry cyfrowy oscyloskop próbkujący, jeśli jeszcze go nie masz. Spójrz na przykładowy kod opublikowany na opencores.org, ponieważ w C / C ++ możesz nauczyć się wielu technik (zarówno dobrych, jak i złych), czytając kod innych ludzi.

Jedną z rzeczy, która doprowadza mnie do szału w kwestii tworzenia układów FPGA, jest to, że kontrola źródła nie jest czymś, co producenci toolchainów wydają się uważać za ważną cechę. Pod tym względem Xilinx Vivado jest szczególnie zły, ich rada wydaje się polegać na ponownym generowaniu plików projektu od podstaw podczas wykonywania nowego zamówienia. Próba przekazania projektu przy użyciu plików 100 MB + zip jest zniechęcająca.

Inną rzeczą, która doprowadza mnie do szału w tworzeniu FPGA, jest to, że narzędzia Quartus / ISE / Vivado nie mają tak naprawdę satysfakcjonującego sposobu na stłumienie zalewu komunikatów ostrzegawczych. Kiedy piszę programy w języku C / C ++, spodziewam się, że będę w stanie zająć się każdym komunikatem ostrzegawczym indywidualnie i albo go naprawić, albo sankcjonować, tak że w końcu będę mógł uzyskać czystą kompilację bez ostrzeżeń. Nigdy tak naprawdę nie widziałem, żeby ktoś osiągnął to w rozwoju FPGA; inni programiści FPGA (którzy są mądrzejsi ode mnie) wydają się po prostu akceptować fakt, że normalny projekt ma wiele komunikatów diagnostycznych, które często po prostu ignorują, pozostawiając to pracy laboratoryjnej i weryfikacji na prawdziwym sprzęcie.

Jeśli kiedykolwiek opracujesz własną płytę FPGA (której nie polecam), pamiętaj, aby umieścić nieużywane szpilki we / wy gdzieś w nagłówku - tak dużo, jak tylko możesz - ponieważ to będzie Twoja linia życia, gdy musisz debugować kod FPGA lub zaimplementować jakąś jedenastogodzinną łatkę.

Wspomniałeś o programowaniu w języku asemblera jako o sposobie sprawowania precyzyjnej kontroli nad tym, co robi komputer, i możliwe jest sprawowanie podobnie precyzyjnej kontroli nad kodem FPGA, używając nieprzenośnych, specyficznych dla dostawcy prymitywów. Będzie to różne dla każdego dostawcy i każdego FPGA, tak jak język asemblera jest inny dla różnych procesorów. Dla Xilinx napisałbyś plik ograniczeń (inny dla ISE toolchain lub Vivado toolchain). Plik ograniczeń wskazywałby określone instancje lub określone sieci i określał wymagania czasowe. Zazwyczaj niskopoziomowe CLB / LUT / cokolwiekUnits są rozmieszczone w siatce, dzięki czemu można określić konkretny prymityw niskiego poziomu do życia w określonej lokalizacji siatki X, Y. Poszukaj starego „edytora FPGA” Xilinx dla serii Spartan 3, zachęcał ludzi do używania go w ten sposób. Myślę, że nowsze chipy z serii 7 i Zynq nie są obsługiwane. Podobnie jak montaż, jest bardzo specyficzny dla technologii, a zatem jest rodzajem zmiennego zestawu umiejętności.

Podobnie jak w przypadku asemblera, w przypadku czegokolwiek innego niż trywialne ćwiczenie typu „praca domowa” naprawdę chcesz zminimalizować ilość pisania w assemblerze;używaj C / C ++ dla 98% -99% i napisz assembler tylko dla 1%, który jest wrażliwy na wydajność.Jeśli na przykład masz projekt FPGA, który wymaga jakiegoś podprocesu do działania z częstotliwością 200 MHz, warto zanurzyć się w mapowaniu niskiego poziomu, aby zobaczyć, co robią narzędzia.Optymalizacja przynosi największe korzyści, jeśli można wyeliminować niepotrzebne etapy pracy.Dopiero gdy ograniczysz gorące elementy do absolutnego minimum, dopiero wtedy warto rozpocząć ręczne wyznaczanie tras, które IOB należą do których lokalizacji sieci.Pozwól maszynie wykonać większość pracy, abyś mógł skoncentrować swoje wysiłki.

DKNguyen
2020-05-05 04:16:09 UTC
view on stackexchange narkive permalink

Fizyczny prymityw FPGA to konfigurowalny blok logiczny (CLB).

Każdy blok logiczny ma przydzielone miejsce w pamięci, tak zwaną pamięć konfiguracyjną, która określa, jak jest skonfigurowany i gdzie się łączy.

HDL ostatecznie kończy się jako zbiór jedynek i zer, tak zwany strumień bitów, który jest umieszczany w tej pamięci konfiguracyjnej.

Większość układów FPGA nie ma wbudowanej nieulotnej pamięci konfiguracyjnej. Zamiast tego, strumień bitów konfiguracji jest przechowywany w zewnętrznej konfiguracji FLASH ROM i po włączeniu zasilania FPGA ładuje ten strumień bitów z zewnętrznej pamięci nieulotnej do wewnętrznej konfiguracji SRAM, która jest bezpośrednio podłączona do CLB i steruje nią.

W przeciwieństwie do oprogramowania ten strumień bitów nie jest „uruchamiany”. Jest po prostu ładowany, a potem po prostu „jest”. Jest to mniej podobne do wykonywanych instrukcji, a bardziej do rejestrów zawierających ustawienia.

Jest to plik, taki jak * .bit. Nie ma standardowego formatu. Nie jestem pewien, dlaczego miałbyś chcieć samodzielnie napisać symulator, skoro narzędzia programistyczne FPGA są dostarczane z symulatorem. Włożyli w to wiele wysiłku i znają swoje urządzenia lepiej niż ktokolwiek inny, ponieważ w przeciwieństwie do oprogramowania, każdy prymityw, który jest określony w strumieniu bitów, musi znajdować się fizycznie gdzieś na matrycy FPGA, a plan piętra może tworzyć lub niszczyć niektóre projekty.

Uważam, że termin CLB jest specyficzny dla produktów Xilinx.Microsemi (dawniej Actel) używa terminów takich jak komórki rejestru (komórki r) i komórki kombinatoryczne (komórki c).
@SteveSh Tak, wszędzie różne terminy.Jeśli nie mogą nawet zgodzić się, jak się nazywają, nie będą w stanie uzgodnić standardowego formatu bistream.
Mam na myśli, że używają różnych terminów, ponieważ używają różnych architektur.Myślę, że tabela przeglądowa byłaby lepszym przykładem dla fizycznego prymitywu (i dlaczego główne marki zwykle wymieniają odpowiedniki LUT), mimo że elementy są bardziej złożone niż standardowa 4-LUT.
Graham
2020-05-05 15:07:06 UTC
view on stackexchange narkive permalink

jakie bajty przechodzą przez zapis podczas programowania FPGA?

Generalnie jest to mniej odpowiedzialne, ponieważ jest w 100% zależne od producenta i urządzenia. Niektórzy producenci publikują w tym celu arkusze danych; inni producenci uważają to za „tajemnicę handlową” i aby się o tym dowiedzieć, musisz podpisać umowę o zachowaniu poufności.

W przypadku kompilatora C (lub dowolnego innego języka) w każdym razie surowe bajty nie są najbardziej podstawową częścią. Najbardziej podstawową częścią jest seria instrukcji procesora, które implementują twój program, a surowe bajty to po prostu sposób, w jaki powiesz procesorowi, jakie to instrukcje. Te instrukcje powodują, że procesor wykonuje operacje przy użyciu różnych jego funkcji sprzętowych, takich jak sumatory, mnożniki i tym podobne, oraz zapisuje lub pobiera dane w rejestrach i pamięciach.

Jest to bardzo podobne w FPGA, z tym wyjątkiem, że zaczynasz na niższym poziomie. Zamiast listy instrukcji do uruchomienia, mamy listę tego, w jaki sposób każda bramka w FPGA powinna być połączona. Większość układów FPGA zawiera również wyspecjalizowane sekcje dotyczące pamięci RAM i innych funkcji, a program będzie zawierał również informacje o sposobie ich podłączenia.

Otrzymujesz wtedy listę sieci , tak samo, jakbyś projektował płytkę drukowaną z milionem układów logicznych. Jest to koncepcyjnie najbardziej podstawowe wyjście z kompilatora FPGA, które mówi ci, co robi, w taki sam sposób, w jaki listowanie asemblera jest koncepcyjnie najbardziej podstawowym wyjściem z kompilatora C, które mówi ci, co robi procesor.

Oczywiście kompilator kontynuuje tworzenie pliku binarnego, który będzie programował FPGA z tą listą sieci, w taki sam sposób, w jaki kompilator C kontynuuje tworzenie pliku binarnego, który programuje mikro z tym asemblerem.

SteveSh
2020-05-05 04:27:30 UTC
view on stackexchange narkive permalink

„jakie bajty przechodzą przez zapis, gdy programowany jest układ FPGA?”

Upraszczając, te bajty zawierają informacje dla:

1) Konfiguracja bloków wejścia / wyjścia & logiki FPGA (czy chcesz, aby ten blok był rejestrem, multiplekserem, tablicą przeglądową ogólnego przeznaczenia) i

2) Skonfigurowanie połączenia na FPGA, aby połączyć bloki logiczne ze sobą, a następnie połączyć się ze światem zewnętrznym.

old_timer
2020-05-05 20:41:56 UTC
view on stackexchange narkive permalink

Tak wiele odpowiedzi, że nie przeczytałem ich wszystkich, będąc kimś, kto siedzi po obu stronach ogrodzenia, sprzętu i oprogramowania ....

Chociaż pod każdym względem jest to język programowania, który jest kompilowany do innych języków, najlepiej niższego poziomu (C do asm lub kod maszynowy, JAVA do kodu bajtowego lub innego języka, asemblera lub kodu maszynowego itp.). Jest o wiele więcej kroków, a cele są znacznie bardziej zróżnicowane niż te, które są tak powszechne, jak różne: dodawanie, mov, jne, push, pop itp.

Kod maszynowy dla fpgas lub asics to nie tylko dyskretne tranzystory, ale biblioteka rzeczy. W przypadku asics dla określonej odlewni i procesu dostępna jest jedna lub więcej bibliotek komórkowych i będą one miały proste i i lub bramki, ale także większe i bardziej skomplikowane rzeczy, po co budować zatrzask z dyskretnych komponentów, skoro autorzy biblioteki mogą stworzyć kilka wspólnych rozmiarów je i spakuj w efektywny sposób (na rynku nieruchomości). Tak więc, jak w przypadku każdego kompilatora lub autora wysokiego poziomu, przeglądasz listę opcji i wybierasz niektóre. w tym długą listę sram o różnych szerokościach i głębokościach. W przypadku FPGA są to tablice LUT lub w pewnym sensie stałe moduły ogólne, które mogą działać jako różne moduły, które są bardziej skomplikowane niż prosta bramka i, lub, xor.

Świat FPGA lubi trzymać rzeczy blisko piersi, a także starają się być o wiele bardziej przystępne cenowo niż narzędzia asic, dziesiątki tysięcy dolarów rocznie zamiast milionów. I jak w każdym innym zintegrowanym środowisku, czasami masz różnych dostawców, którzy zostali zakupieni lub licencjonowani, a narzędzia są sklejone (często niezbyt ładne).

Tak więc wydarzyły się wszystkie kroki, o których wspominali inni ludzie. co jest czymś więcej niż oprogramowanie, a formaty plików są bardzo zastrzeżone i nie oczekuje się, że będą dokumentowane ani obsługiwane, każda wersja może się zmienić. Znowu ci ludzie wydają się być konkurencyjni i tajemniczy (gdyby się otworzyli, moglibyśmy mieć znacznie lepsze narzędzia i mogliby sprzedawać więcej produktów IMO, ale mogą zmniejszyć pieniądze na wsparcie, które być może są tym, z czego żyją dzięki ich gównianym narzędziom) .

Kiedy ludzie mówią netlist, verilog jest kompilowany w netlistę, te, które widziałem, są również w Verilog lub VHDL, ponieważ te języki to obejmują. ostatecznie celujesz w konkretne cokolwiek, fpga, cpld, asic, itp. FPGA jest już podłączonym / stałym celem, ostatecznie otrzymasz listę bezpieczników lub przełączników, jeśli chcesz, weź ogólny lut i podłącz to wejście do to i to wejście do tego poprzez otwieranie i zamykanie połączeń w ogromnej siatce rzeczy. Co kończy się prostą listą włączeń i wyłączeń. I myślę, że może być w tym standard Jedec, ale często nazywany bitstreamem i przynajmniej używamy odtwarzacza bitstream do załadowania.

CPLD ogólnie rzecz biorąc, programujesz te informacje w samej części, czy jest to pamięć flash na płycie, która następnie otwiera / zamyka rzeczy po włączeniu i / lub nieulotna pamięć wewnątrz zasila z przewodami.

FPGA zwykle mają zewnętrzną lampę błyskową i po włączeniu zasilania informacje o podłączeniu są z niej ładowane, a reszta części pojawia się przy użyciu tej konfiguracji. Te, które znam, mogą również załadować te informacje do części i wykonać wszystkie połączenia, ale te informacje są tracone, gdy część jest wyłączona. więc w zależności od projektu możesz mieć inne rozwiązanie i nie używać lampy błyskowej. Format flash jest prawdopodobnie zastrzeżony, nie patrzyłem osobiście, kiedy wchodzisz przez interfejs programowania, który przechodzi przez FPGA do flasha, aby mógł działać tak, jak jest, lub można go przekonwertować w drodze na coś innego.

Dzięki oprogramowaniu szczególnie w tym czasie i miejscu jesteśmy przyzwyczajeni do otwierania rzeczy, całkiem dobrych darmowych narzędzi, z których korzysta wielu ludzi. Oznacza to również, że formaty plików są udokumentowane i dość powszechne, niektóre miały historię wcześniejszą .com i .exes, a inne dla innych systemów operacyjnych w tamtych czasach. Ale znowu świat oprogramowania jest bardziej powszechny niż inny, do którego idealnie dążysz dla kodu maszynowego lub kodu bajtowego. Z logiką przechodzisz z wysokiego poziomu na niższy, ale do pewnego momentu używasz tego samego języka. Wtedy możesz celować w symulator, który ma własną bibliotekę modułów lub fpga n ze swoją biblioteką lub fpga m ze swoją biblioteką i tak dalej. A ci ludzie bardzo chronią informacje.

Clifford i projekt IceStorm IMO to właściwa droga. Jak dotąd to jedyny raz, kiedy stworzyłem coś dla FPGA, które jest proste, działa, nie ma ostrzeżeń ani błędów, które ludzie często lubią.Spędziłem niezliczone noce próbując uzyskać najprostszą rzecz do zbudowania FPGA od wszystkich głównych dostawców bez ostrzeżeń ... i zawsze się poddawałem.Od wersji Verilog do części programowanej są to co najmniej trzy oddzielne projekty, co oznacza, że istnieją pliki pośrednie, które obie strony muszą obsługiwać, więc istnieją formaty plików.ale powinien być specyficzny dla projektu i niekoniecznie podobny do pliku elf, który jest szeroko używany w więcej niż jednym przypadku użycia.

Zrozum, że świat chipów, w tym fpgas, jest niesamowicie drogi, więc kieruje się pieniędzmi, co często oznacza sprzedaż narzędzi i, co najważniejsze, roczne kontrakty wsparcia.Co oznacza zamknięte źródło, zamknięte informacje, a nie publicznie udokumentowane formaty plików.

Brian Drummond
2020-05-06 18:59:28 UTC
view on stackexchange narkive permalink

Zanim przejdziesz do syntezy, możesz zweryfikować projekt w symulacji.W tym przypadku twój projekt jest traktowany jako oprogramowanie - i dla przynajmniej jednego symulatora (open source GHDL, co nie jest zaskakujące dla VHDL) kompilator może użyć backendów gcc lub LLVM do wygenerowania zwykłego pliku wykonywalnego.

Generalnie osadzasz swój rzeczywisty projekt w "testbench" (również napisanym w VHDL), który generuje sygnały wejściowe i raporty o poprawności danych wyjściowych - albo do konsoli (za pomocą instrukcji Assert / Report), albo za pomocą narzędzi do weryfikacji i logowaniajak OSVVM, w ramach testów jednostkowych (VUnit).

Jeśli wszystko inne zawiedzie, możesz zrzucić i sprawdzić przebiegi w GUI.

Gdy wszystko działa, przejdź do syntezy, jak opisano w innych odpowiedziach.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...