FPGA, pierwsze kroki

11

To jest kontynuacja mojego pytania na temat FPGA tutaj .

W końcu wybrałem Digilent Atlys z układem FPGA Spartan 6, nie mam wcześniejszego doświadczenia z układami FPGA, chociaż wykonałem trochę pracy z mikrokontrolerami.

Ostatnie kilka dni spędziłem czytając karty danych FPGA i myślę, że dobrym pomysłem byłoby zacząć od Verilog. Nie mogłem znaleźć żadnych przykładów kodu, a nawet arkusze danych nie są przyjazne dla początkujących.

Chcę teraz pomóc w programowaniu, symulacji, syntezie i właśnie to chcę zrobić

  1. Wygeneruj dziwną częstotliwość, powiedzmy 54 MHz z FPGA (działa na zegarze 100 MHz) i poprowadź ją do jednego z pinów. Prawdopodobnie musiałbym do tego użyć DCM lub PLL, ale nie wiesz, jak zacząć tutaj?

  2. Zaimplementuj rodzaj zapisu odczytu I2C z FPGA.

To, czego szukam, to odnośnik, być może internetowy lub książka, która daje mi przykłady kodu i opis każdego ze składników sprzętowych dostępnych w FPGA, takich jak DCM, plasterki, clb itp.

Wydaje mi się, że powinienem zacząć od świata FPGA.

Kevin Boyd
źródło

Odpowiedzi:

13

Przykłady kodu

Przeskocz do OpenCores, a znajdziesz dziesiątki projektów open source. Wiele jest napisanych w Verilog i obejmuje gamę od urządzeń I / O aż po procesory.

Nie zapomnij także o wielu uwagach dotyczących aplikacji dostępnych w Xilinx. Są bardzo pomocni we własnych urządzeniach.

Przepływ projektu

Wybierz jedną lub dwie książki na temat przebiegu projektowania, aby uzyskać przegląd kroków związanych z projektowaniem FPGA. Podsumowując, będą one obejmować:

  1. Wpis projektowy - w twoim przypadku Verilog.
  2. Symulacja funkcjonalna - przy użyciu różnych narzędzi.
  3. Synteza - w twoim przypadku przy użyciu narzędzi Xilinx ISE.
  4. Symulacja - aby zweryfikować projekt po syntezie, ponieważ niektórych aspektów Verilog nie można syntezować.
  5. Place & Route - za pomocą narzędzi Xilinx ISE.
  6. Implementacja - pobranie projektu do FPGA.
  7. Testowanie.

Komponenty FPGA

Jeśli chodzi o korzystanie ze składników FPGA, istnieją różne sposoby ich używania. Ale zakładając, że używasz pozycji projektu Verilog, możesz wywnioskować lub utworzyć instancję różnych komponentów.

Wnioskowanie zasadniczo obejmuje uzyskanie narzędzia do syntezy do wybrania najlepszych komponentów do użycia w oparciu o wymaganą funkcjonalność. Najlepszym tego przykładem byłoby zaprojektowanie sumatora.

Robiąc q <= a + bczy q = a + bmożna wnioskować o dodatek. Oba wnioskują o adderze, ale istnieje różnica w korzystaniu ze składni blokującej / nieblokującej.

Tworzenie instancji zwykle wymaga wywołania dokładnego komponentu biblioteki w kodzie. Niektórych składników po prostu nie można łatwo wywnioskować w kodzie - takich jak DCM. Możesz skorzystać z narzędzi i przykładów ISE, aby dowiedzieć się więcej na ten temat.

Rzeczywistą listę samych komponentów dostarcza Xilinx w Przewodniku po bibliotekach .

Protip

Najlepszym sposobem, aby się tego nauczyć, jest eksperymentowanie z krótkimi fragmentami kodu i przeprowadzenie ich przez syntezę ISE, aby zobaczyć, co wyrzuca. Istnieje również wiele przykładów w samym zestawie narzędzi ISE.

sybreon
źródło
5

Absolutnymi referencjami będą przewodniki użytkownika Spartan 6 . Na przykład przewodnik dotyczący zasobów taktowania (UG382) obejmuje konfigurowanie DCM. Na przykład, jak wygląda rzeczywisty kod, ISE ma ich bazę danych. Otwórz szablony językowe (żarówka na pasku narzędzi), a następnie spójrz w język (VHDL lub Verilog) -> Tworzenie instancji pierwotnej urządzenia -> rodzina układów (Spartan-6) -> Komponenty zegara.

Szczegółowe informacje dotyczące Twojej płyty są dostępne w Digilent, w szczególności będziesz potrzebować UCF (który wymienia wszystkie IO) i podręcznika referencyjnego (który objaśnia obwody peryferyjne).

Ogólna struktura twojego języka, w tym sposób tworzenia komponentu, prawdopodobnie lepiej jest wyodrębniona z książek i przykładów. Nie korzystałem z Verilog, więc nie mam żadnych konkretnych sugestii. Mimo to szablony zawierają również fragmenty różnych ogólnych konstruktów.

Yann Vernier
źródło
Czy specjalizujesz się w VHDL? Jeśli chodzi o UCF, dlaczego miałoby to być ważne w pracy z tablicą Digilent?
Kevin Boyd
1
Nie specjalizuję się jako taki - po prostu nie studiowałem Verilog. UCF to plik, który opisuje, z którymi pinami łączą się twoje porty, a także wymagania dotyczące taktowania. Bez tego piny są przypisywane losowo, co nie będzie pasować do istniejącej planszy.
Yann Vernier
Zrozumiałem część przypisania pinów, co jest z żądaniami taktowania?
Kevin Boyd
1
Ograniczenia czasowe obejmują takie rzeczy, jak częstotliwość zegara, ustawienia i czasy wstrzymania. Nadal będziesz otrzymywać informacje w ramach analizy czasowej, ale określenie wymagań w pliku ograniczeń pozwala narzędziom wykryć ich awarię i być może bardziej się starają zaspokoić twoje potrzeby, gdy jest na granicy.
Yann Vernier
1

Do zegara używasz megacore DLL / PLL.

Brian Carlton
źródło
Spartan 6 ma DCM i PLL, nie znaleziono jeszcze DLL. Po przeszukaniu forum odkryłem, że Xilinx ma narzędzie o nazwie Core Generator, które można skonfigurować do generowania zasobów zegara.
Kevin Boyd