[XILINX] Zestawy do eksperymentów

Płyty ewaluacyjne, programatory, adaptery, minimoduły, akcesoria itp.
Regulamin forum
Przy zakładanych tematach proponuje aby poprzedzać temat nazwą typu mikrokontrolerów, których to dotyczy umieszczoną w nawiasach kwadratowych np: [ARM], [PIC], [AVR] itp.
Awatar użytkownika
gaweł
Expert
Expert
Posty: 612
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

[XILINX] Zestawy do eksperymentów

Postautor: gaweł » czwartek 07 cze 2018, 12:12

Zestaw badawczo-rozwojowy dla układów
FPGA firmy Xilinx


Kontynuacja sprzętowych rozważań z Programy narzędziowe dla XILINX

...w dzikim tłumie
ominiemy wzrok tych co będą oceniać nas co krok...https://www.youtube.com/watch?v=oHa5aQY7fes

Obok układów logiki programowalnej określanych jako CPLD, czyli układów posiadających pewne ograniczenia, które głównie wynikają z wewnętrznych zasobów, firma Xilinx oferuje układy FPGA. W obecnej chwili warto zwrócić uwagę na układy o nazwie „SPARTAN 3”. Do tej grupy należy kilka modeli o zróżnicowanych zasobach. Poczynając od układów o najmniejszych zasobach (układ: XC3S50) zawierający 50 tysięcy bramek logicznych i kończąc na układach największych (układ: XC3S5000) zawierający 5 milionów bramek. Każdy z układów występuje w kilku odmianach związanych z obudową. Są to obudowy typu QFP (z gęsto rozmieszczonymi wyprowadzeniami z czterech stron układu) lub BGA (z wyprowadzeniami w postaci kulek na dolnej powierzchni układu). W warunkach amatorsko-domowych układy w obudowach typu BGA są zdyskwalifikowane ze względu na problemy technologiczne z wykonaniem płytki PCB oraz z przylutowaniem takiego układu. Perspektywa zastosowania układów w obudowach QFP również nie przedstawia się w różowych kolorach. Posiadając dużą wprawę w lutowaniu możliwe jest jego przylutowanie do płytki PCB (pomijając problem związany w wykonaniem w warunkach domowych płytki PCB z wyprowadzeniami w rastrze mniejszym niż 1 mm). Rozwiązaniem dużych problemów technologicznych jest użycie gotowych modułów opracowanych przez firmę BTC (http://www.btc.pl) dostępnych w sklepie internetowym (http://www.kamami.pl). Użycie modułu rozwiązuje kilka istotnych problemów, do których można zaliczyć:
  • wykonanie płytki PCB z wyprowadzeniami w gęstym rastrze,
  • przylutowanie układu FPGA do płytki PCB,
  • moduł zawiera układy, które nie są bardzo popularne i mogą być kłopoty związane z ich zdobyciem,
  • gwarancja poprawności aplikacji układu, moduł w rzeczywistości zawiera wiele połączonych ze sobą elementów elektronicznych, których sposób użycia dla początkujących nie musi być oczywisty.
Poniższa fotografia przedstawia moduł, który zawiera układ z rodziny SPARTAN 3 o symbolu XC3S200 w obudowie QFP100. Oprócz samego układu FPGA są:
  • złącze do programowania poprzez JTAG,
  • generator kwarcowy o częstotliwości 3,6864 MHz,
  • niezbędne stabilizatory (układ SPARTAN 3 jest zasilany kilkoma napięciami),
  • nieuotną pamięć konfiguracyjną.
webp-7_ilu01.jpg
Do programowania (jako operacji przeniesienia danych uzyskanych w wyniku syntezy poprzez odpowiednie oprogramowanie) powyższego modułu można użyć programatora, który jest przystosowany do współpracy z tym modułem.
webp-7_ilu02.jpg
Zestaw ten (ZL10PLD+ZL4PLD) stanowi minimalne środowisko uruchomieniowe dla układów logiki programowalnej FPGA. Prostota użycia modułu z układem SPARTAN pozwala na zastosowanie go w dowolnej własnej konstrukcji. Moduł można zasilić ze źródła o napięciu 5V.
Istnieje możliwość aplikacji modułu ZL10PLD w odpowiedniej płycie bazowej uzyskując niezależne i kompletne środowisko sprzętowe do tworzenia i testowania rozwiązań dla układów FPGA. Moduł bazowy między innymi zawiera:
webp-7_ilu03.jpg
  • złącze do zainstalowania modułu z układem FPGA,
  • rozwiązanie zasilania (zasilić można z dwóch źródeł),
  • złącze do kart MMC,
  • interfejs szeregowy RS232 wraz ze złączem DB9,
  • prosty przetwornik analogowo-cyfrowy ze złączem do monitorów VGA,
  • 4-przyciskową klawiaturę,
  • 8 LED'ów do sygnalizacji.
Kompletne sprzętowe środowisko prezentuje następująca fotografia:
webp-7_ilu04.jpg
Z punktu widzenia programowania, powyższy zestaw stanowi połączenie w łańcuchu JTAG dwóch elementów:
  • układu SPARTAN 3,
  • pamięci konfiguracyjnej FLASH (w module użyta jest pamięć o symbolu XCF01S).
Układ FPGA SPARTAN 3 ma pamięć konfiguracyjną będącą pamięcią statyczną RAM. Oznacza to, że po każdym włączeniu zasilania układ SPARTAN musi zostać zaprogramowany (lub po wymuszeniu poprzez naciśnięcie odpowiedniego przycisku rekonfiguracji układu). Jest to użyteczna możliwość w trakcie tworzenia nowych rozwiązań wymagających wielokrotnych modyfikacji. Oprogramowanie WEBpack normalnie generuje dane dla układu FPGA, które muszą być dodatkowo przetworzone do formatu wymaganego przez pamięć konfiguracyjną FLASH. Jednocześnie należy pamiętać, że każda pamięć FLASH posiada limit przeprogramowań, natomiast pamięć RAM nie posiada takiego limitu.
Drugim sposobem “wystartowania” układu FPGA jest przepisanie informacji konfiguracyjnych z pamięci FLASH (tu XCF01S), która wcześniej musi być zaprogramowania. Każde dołączenie układu FPGA do napięcia zasilającego lub wymuszenie przyciskiem rekonfiguracji oznacza przepisanie informacji. Moduł zawiera niezbędne połączenia między układami scalonymi, które umożliwiają wykonanie wymienionych czynności.
Użytkownik ma możliwość wybrania jednego z dwóch wariantów umożliwiających zainicjowanie układu SPARTAN 3 do pracy. Do wyboru służy odpowiednia zworka występująca w module.
webp-7_ilu05.jpg
Zworka łącząca piny opisane jako “JTAG” oznacza możliwość zaprogramowania układu SPARTAN 3 poprzez złącze JATG, czyli za pomocą programatora ZL4PRG. Ustawienie zworki w pozycji “Flash”
webp-7_ilu06.jpg
oznacza, że układ FPGA będzie pobierał dane konfiguracyjne z pamięci FLASH, która wcześniej musi zostać zaprogramowana. Do jej programowania można również użyć programatora ZL4PRG (oba układy są połączone w jeden łańcuch JTAG).
Przykładem użycia modułu jest 8-bitowy licznik, którego stan będzie zobrazowany poprzez diody LED. Po uruchomieniu programu WebPack ISE należy jako docelowy wybrać układ z rodziny SPARTAN 3 o symbolu XC3S200 w obudowie VQ100 (bo taki jest zastosowany w module ZL10PLD).
webp-7_ilu07.PNG
Opis układu w języku VHDL nowego projektu jest następujący (BINCNT.VHD):

Kod: Zaznacz cały

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Bincnt is port ( Clk : in std_logic ;
                        Reset : in std_logic ;
                        D1 : out std_logic ;
                        D2 : out std_logic ;
                        D3 : out std_logic ;
                        D4 : out std_logic ;
                        D5 : out std_logic ;
                        D6 : out std_logic ;
                        D7 : out std_logic ;
                        D8 : out std_logic ) ;
end Bincnt ;

architecture Behavioral of Bincnt is
 
  signal ClkDivider : std_logic_vector ( 19 downto 0 ) ;
  signal F3Hz : std_logic ;
  signal Cnt : std_logic_vector ( 7 downto 0 ) ;
 
begin

  F3Hz <= ClkDivider ( 19 ) ;

  D1 <= Cnt ( 0 ) ;
  D2 <= Cnt ( 1 ) ;
  D3 <= Cnt ( 2 ) ;
  D4 <= Cnt ( 3 ) ;
  D5 <= Cnt ( 4 ) ;
  D6 <= Cnt ( 5 ) ;
  D7 <= Cnt ( 6 ) ;
  D8 <= Cnt ( 7 ) ;

  process ( Clk , Reset )
  begin
    if Reset = '0' then
      ClkDivider <= "00000000000000000000" ;
    else
      if Clk'event and Clk = '1' then
        ClkDivider <= ClkDivider + 1 ;
      end if ;
    end if ;
  end process ;

  process ( F3Hz , Reset )
  begin
    if Reset = '0' then
      Cnt <= "00000000" ;
    else
      if F3Hz'event and F3Hz = '1' then
        Cnt <= Cnt + 1 ;
      end if ;
    end if ;
  end process ;

end Behavioral ;

oraz dodatkowo plik BINCNT.UCF :

Kod: Zaznacz cały

NET "Clk"   LOC = "P36"  ;
NET "Reset" LOC = "P1"   ;
NET "D1"    LOC = "P59"  ;
NET "D2"    LOC = "P60"  ;
NET "D3"    LOC = "P61"  ;
NET "D4"    LOC = "P62"  ;
NET "D5"    LOC = "P63"  ;
NET "D6"    LOC = "P64"  ;
NET "D7"    LOC = "P65"  ;
NET "D8"    LOC = "P67"  ;
W projekcie występują sygnały, które są doprowadzone do układu FPGA. Sygnał zegarowy “Clk” jest doprowadzony do pinu numer 36 w układzie SPARTAN. Pozostałe sygnały poprzez złącza GOLDPIN'owe są doprowadzone do płyty bazowej ZL9PLD i dalej do odpowiednich jej elementów (LED, przyciski). Sposób przyłączenia odpowiednich zespołów (jak LED) jest stały. W każdym projekcie, który przykładowo będzie używał diody LED opisanej jako D1, należy przyporządkować sygnał do wyprowadzenia o numerze 59. W oparciu o dokumentacje modułów dostępne na stronie internetowej pod adresem http://www.kamami.pl/dl/zl10pld.pdf oraz http://www.kamami.pl/dl/zl9pld.pdf można określić przyporządkowanie wyprowadzeń układu SPARTAN 3 do poszczególnych zespołów znajdujących sie w zestawie ZL9PLD. Wypisane wyżej (zawartość pliku BINCNT.UCF) zawiera jedynie te, które są użyte w projekcie. Analizując ten plik można zauważyć, że sygnał “Reset” jest przyłączony do przycisku opisanego jako SW1.
W wyniku kompilacji projektu przez pakiet WebPack:
webp-7_ilu08.PNG
powstaje plik, który zawiera informacje, które konfigurują układ FPGA. Za pomocą zworki opisanej w module ZL10PLD jako JP4 należy wybrać sposób konfiguracji układu SPARTAN poprzez złącze JTAG. Uruchamiając proces “Generate PROM, ACE or JTAG File” w okienku “Processes”, zostaje uruchomiony program do zaprogramowania układu FPGA (ten program również jest używany do przetworzenia danych do formaty wymaganego przez pamięci konfiguracyjne FLASH). Program iMPACT sam rozpoznaje łańcuch układów przyłączonych do złącza JTAG. Pokazuje to następujący rysunek:
webp-7_ilu09.PNG
Moduł ZL10PLD zawiera dwa elementy widziane poprzez interfejs JTAG. Pierwszym jest układ FPGA oraz drugim pamięć FLASH. Kolejność ich występowania w łańcuchu jest cechą konstrukcyjną samego modułu.
W układach FPGA, wygenerowane pliki z danymi konfiguracyjnymi mają rozszerzenie .BIT. Ponieważ będzie programowany jedynie układ SPARTAN, można pominąć przyporządkowanie pliku dla pamięci FLASH (w okienku programu iMPACT pod odpowiednim symbolem układu scalonego jest wyświetlona nazwa pliku lub “file ?” jeżeli z układem nie jest skojarzony żaden plik). Po przyporządkowaniu układom występującym w łańcuchu odpowiednich plików można przystąpić do programowania.
webp-7_ilu10.PNG
Zakończenie operacji programowania jest sygnalizowane komunikatem:
webp-7_ilu11.PNG
Po wykonaniu tych czynności całość realizuje założoną funkcjonalność.
webp-7_ilu12.jpg
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Expert
Expert
Posty: 612
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: [XILINX] Zestawy do eksperymentów

Postautor: gaweł » sobota 09 cze 2018, 20:44

Użycie modułu MMfpga02
z układem SPARTAN 3


webp-8_ilu00.jpg


...bo jestem zagadką, twoja zagadką...https://www.youtube.com/watch?v=5UDI1tvjrtg
Moduł MMfpga02 zawiera kompletną realizację minimalnego środowiska dla układów FPGA. W to wchodzą: układ FPGA typu SPARTAN 3 (XC3S200), odpowiednia pamięć konfiguracyjna (FLASH, XCF01S), generator przebiegu prostokątnego o częstotliwości 50MHz, stabilizator napięcia 2,5V oraz 1,2V (przy zasilaniu modułu 3,3V), złącze do programowania JTAG.
webp-8_ilu01.jpg
Wewnętrzny (modułu) generator sygnału zegarowego o częstotliwości 50 MHz jest przyłączony do wyprowadzenia P38, co implikuje w przypadku jego użycia w pliku specyfikującym wyprowadzenia (*.UCF) przykładowy zapis:

Kod: Zaznacz cały

NET "Clk"   LOC = "P38"  ;
gdzie “CLK” jest globalnym w układzie FPGA sygnałem zegarowym.
webp-8_ilu02.png
Moduł ma dwa dwurzędowe złącza golpinowe (2 złącza po 2x20 pin), w których rozmieszczenie poszczególnych sygnałów jest następujące:
Znaczenie poszczególnych sygnałów jest następujące:
  • +3,3V – napięcie stałe o wartości 3,3V do zasilania modułu (względem sygnału GND),
  • GND – potencjał 0V,
  • Pxx – wyprowadzenia wejścia i wyjścia układu FPGA,
  • M1, M2, M2 – sygnały określające sposób konfiguracji układu FPGA,
  • +2,5V – napięcie o wartości 2,5V pochodzące z własnego stabilizatora (można je użyć do określenia wymaganego stanu na wejściach M0 .. M2,
  • +1,2V – napięcie o wartości 1,2V pochodzące z własnego stabilizatora,
  • TDI, TDO, TMS, TCK – sygnały interfejsu JTAG.
Do poprawnej pracy modułu należy określić odpowiednie stany na wejściach M0, M1 i M2. Determinują one jeden z wielu możliwych sposobów konfiguracji układu FPGA. Najczęściej występującymi wariantami jest ładowanie danych bezpośrednio do układu FPGA lub konfiguracja układu w oparciu o dane zapisane w nieulotnej pamięci FLASH, która musi być wcześniej odpowiednio zaprogramowana. Oba te sposoby są określane za pomocą wejść M0 .. M2. Powyższe kombinacje są następujące (w poniższych rozważaniach użyte są dwa warianty, możliwych kombinacji jest znacznie więcej i można o nich się dowiedzieć z odpowiedniej dokumentacji dostępnej na stronie http://www.xilinx.com):
M0 M1 M2 - Znaczenie
0 0 0 - ładowanie kodu z pamięci FLASH
1 0 1 - ładowanie kodu poprzez interfejs JTAG
Z praktycznego punktu widzenia w trakcie “eksperymentów” z układem FPGA warto używać bezpośredniej możliwości ładowania kodu poprzez interfejs JTAG, ponieważ częste przeprogramowywanie pamięci FLASH skraca jej żywotność (pamięci FLASH mają ograniczoną liczbę przeprogramowań). W przypadku uzyskania finalnego kodu, powinien być on zapisany w pamięci FLASH umożliwiając układowi FPGA automatyczną konfigurację przy każdorazowym włączenia zasilania.
Z powyższej tabelki wynika, że sygnał M1 powinien być na stałe przyłączony do masy oraz sygnały M0 i M2 połączone razem powinny być przyłączone do masy lub do napięcia 2,5V (napięcie jest dostępne na odpowiednim pinie na złączu).
Sygnały JTAG (TDI, TDO, TMS i TCK) w przypadku użycia pojedynczego modułu nie mają znaczenia. W przypadku użycia kilku modułów w obrębie jednego urządzenia można zrealizować połączenie kilku modułów w jeden łańcuch JTAG do programowania.
Przykładowy projekt zrealizowany w układzie FPGA jest wyświetlaczem stanu licznika 8-bitowego, który zlicza impulsy wchodzące z generatora. Częstotliwość impulsów jest wstępnie podzielona w układzie licznika synchronicznego. Tekst opisu w języku VHDL jest następujący:

Kod: Zaznacz cały

(...)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity propox is port ( Clk    : in std_logic ;
                        Reset  : in std_logic ;
                        Q      : out  std_logic_vector ( 7 downto 0 ) ) ;
end propox ;

architecture Behavioral of propox is

  signal ClkDivider : std_logic_vector ( 28 downto 0 ) ;

begin
  process ( Clk , Reset )
  begin
    if Reset = '0' then
      ClkDivider <= "00000000000000000000000000000" ;
    else
      if Clk'event and Clk = '1' then
        ClkDivider <= ClkDivider + 1 ;
      end if ;
    end if ;
  end process ;

  Q ( 7 downto 0 ) <= ClkDivider ( 28 downto 21 ) ;

end Behavioral ;
oraz plik opisujący wyprowadzenia jest następujący:

Kod: Zaznacz cały

(...)
NET "Clk"   LOC = "P38"  ;
NET "Q<0>"  LOC = "P59"  ;
NET "Q<1>"  LOC = "P60"  ;
NET "Q<2>"  LOC = "P61"  ;
NET "Q<3>"  LOC = "P62"  ;
NET "Q<4>"  LOC = "P63"  ;
NET "Q<5>"  LOC = "P64"  ;
NET "Q<6>"  LOC = "P65"  ;
NET "Q<7>"  LOC = "P67"  ;
NET "Reset" LOC = "P87" | PULLUP ;
Przebieg prac badawczych:
webp-8_ilu03.jpg
webp-8_ilu04.jpg
webp-8_ilu05.jpg
webp-8_ilu06.jpg
Przetestowano dwa warianty ładowania danych konfiguracyjnych do układu FPGA.
webp-8_ilu07.jpg
webp-8_ilu08.jpg
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse


Wróć do „Systemy rozwojowe dla mikrokontrolerów”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 0 gości