Skocz do zawartości

Zestaw uruchomieniowy na FPGA Gowin serii GW1N-9


FlyingDutch

Pomocna odpowiedź

Cześć,

dzisiaj potestowałem trochę analizatorem widma tą wcześniejszą wersję płytki FPGA z układem Gowin. Ogólnie nie wyglądało to najgorzej, na najczulszej antenie do analizatora widma pojawiały się prążki harmonicznych czestotliwości oscylatora 24 MHz (musiałem antenę trzymać bardzo blisko oscylatora - jakiś 1 cm). Co ciekawe w widmie nie było prążka 24 Mhz tylko od drugiej harmonicznej 48 MHz i potem do kilkuset MHz wyższe harmoniczne z coraz mniejszą mocą. Muszę poszukać jakie poziomy promieniowania i dla jakich częstotliwości są dopuszczalne normą dla CE. Być może poziom emisji dla tych harmonicznych mieści się jeszcze w zakresie normy (prążki były gdzieś na poziomie -64 db). Co do tej nowej płytki to otoczę układ oscylatora ścieżką z wieloma przelotkami do masy i powinno być OK.

Pozdrawiam

  • Lubię! 2
Link do komentarza
Share on other sites

Cześć,

jakiś czas temu poprawiłem projekt płytki PCB dla tego projektu (był błąd związany z błędnym footprint'em gniazda D-Sub). Zamieszczam projekt PCB (pdf i Gerber files).

PCB_PCB_Gowin_GW!N_LV9_LQ144_DevBoard.thumb.png.e70e140269076a6758ecce3f261d1624.png

PCB_PCB_Gowin_GW!N_LV9_LQ144_DevBoardF.pdf

Gerber_PCB_Gowin_GW1N_LV9_LQ144_DevBoard.zip

Zamówiłem 5 sztuk płytek drukowanych u Chińczyków i potrzebne do tej płytki układy FPGA. Jak przyjdą płytki i części polutuje płytkę i sprawdzę, czy działa prawidłowo. Jesli będzie działać to mam zamiar zamieścić kilka projektów do tej płytki (jakieś projekty z wyjściem VGA i soft-procesorem RISC-V).

Pozdrawiam

PCB_PCB_Gowin_GW!N_LV9_LQ144_DevBoardF.pdf

  • Lubię! 2
Link do komentarza
Share on other sites

Dnia 7.09.2023 o 09:58, FlyingDutch napisał:

dzisiaj przyszła płytka drukowana do tego zestawu FPGA. Jak przyjdzie układ FPGA i uruchomię zestaw to dam znać.

Rozumiem, że to prototyp i mało czasu, ale żeby aż tak go skąpić na projekt?

  • Wielki bałagan w oznaczeniach na PCB... lutowanie będzie "bardzo przyjemne". O ile to 0805+ to jeszcze jakoś ujdzie, ale w przypadku 0402 albo 0201 to łatwa droga do spalenia najdroższego jej elementu 😄
  • Brak przelotek masy kompensujących indukcyjność przelotek sygnałowych i zasilających. Powinny one być umieszczone blisko siebie.
  • Brak obwódki z przelotek na brzegu płytki drukowanej. Skończy się to zamianą brzegu PCB w antenę kierunkową 😉
  • Jeżeli masz miejsce to go użyj. Ścieżki powinny być jak najdalej od siebie, by zapobiegać tzw. Cross-Talk'owi. Na wysokich częstotliwościach wystarczy 1cm w odległości 10mil, by wyciągnąć 1.65V cross-talku między dwoma ścieżkami 3.3V.
  • Gdzie wylewka masowa (chyba, że robiłeś kontrolowaną impedancję w trybie non-coplanar, wtedy wybaczam)
  • Dlaczego robiłeś routing mocy zamiast użyć wylewki na spodzie (jeżeli to są 4 warstwy) lub na jednej z wewnętrznych warstw (6+)?
  • Nie widzę spodu płytki, ale raczej jest pusty. Nie warto było przerzucić kondensatorów "decoupling" na spód? Oszczędność miejsca, łatwiejszy routing, a na dodatek mniejszy rozmiar płytki. (I prawdopodobnie mniejsza odległość od podległego im pinu). No i ta ilość ma moje oko jest tak sporo za mała...
  • Brak przypięcia padów odprowadzających ciepło do masy (chyba że to jakiś dziwny komponent, który ma tam coś innego, ale szczerze wątpię).

Tyle widać na pierwszy rzut oka. Sorki, że wcześniej nie dałem znać, ale post mi jakoś przeleciał, a szukałem dzisiaj informacji/schematów referencyjnych o GW1N.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

Cześć,

dzisiaj miałem czas, żeby polutować płytkę developerską FPGA- nie mam jeszcze wszystkich elementów, ale najważniejsze są. Brakuje DIP-Switch (8 pozycji), kwarc 12 MHz dla układu FTDI, moduł karty uSD z SPI - reszta jest wlutowana. Ta wersja płytki była zaprojektowana wyłącznie do tego, aby sprawdzić schemat ideowy - jeśli poszczególne układy będą działać poprawnie - wdrożę większość z punktów o których pisał kolega @H1M4W4R1. Teraz masa jest wylana na jednej z warstw wewnętrzbnych, docelowo masa będzie także wylana na warstwie górnej i dolnej i krawędzie płytki będą ekranowane masą z przelotkami. Tak wygląda polutowana płytka:

GowinFPGA_DevBoard22.thumb.png.269338cb4638a213cec8c07f54b4c054.png

Złącza GPIO (Goldpin sa wlutowane na długich pinach, tak aby łatwo można się było wpiąć oscyloskopem lub analizatorem stanów logicznych). W tej wersji w ogóle nie przejmowałem się emisja fal elektromagnetycznych z płytki, ale w docelowej wersji będzie to mocno ulepszone.

Będę uruchamiał poszczególne układy i dam znać, czy działają. Jestem ciekaw czy pamięci PSRAM i SPI Flash będą działały poprawnie. Docelowo chciałbym móc uruchomić na tej płytce projekty soft-processora RISC-V:

https://github.com/YosysHQ/picorv32

https://github.com/YosysHQ/picorv32/blob/master/picosoc/README.md

https://www.luffca.com/2021/09/picosoc-picorv32-tang-primer/

Update: jak na razie sprawdziłem programowanie płytki za pomocą prostego programu migającego 8-mioma diodami LED. Płytka poprawnie programuje się poprzez złącze JTAG i zewnętrzny programator firmy Gowin. Brakuje mi na razie kwarcu 12 MHz do układu FTDI, aby sprawdzić poprawność programowania poprzez złącze USB 2.0. Przez JTAG programuje się poprawnie we wszystkich trybach - czyli:

1) SRAM

2) Internal Flash (z układu FPGA)

3) External Flash (IC podłączony do FPGA przez SPI)

Pozdrawiam

Edytowano przez FlyingDutch
  • Lubię! 1
Link do komentarza
Share on other sites

32 minuty temu, FlyingDutch napisał:

docelowo masa będzie także wylana na warstwie górnej i dolnej

Uważaj z tym, bo to mocno wpływa na impedancję ścieżek 😉 Możesz wpaść tutaj po więcej przydatnych notatek:

34 minuty temu, FlyingDutch napisał:

Jestem ciekaw czy pamięci PSRAM i SPI Flash będą działały poprawnie.

To coś jest wbrew pozorom bardzo tolerancyjne 😉 To nie USB HS / PCIe... Chociaż rozumiem niechęć do dopasowywania długości ścieżek, EasyEDA ma to tragicznie rozwiązane, ale Altium za to jest za drogi, a ten darmowy Altium (CircuitMaker czy jakoś tak) nie ma podstawowych funkcji jak footprinty IPC czy room'y...

 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

18 godzin temu, H1M4W4R1 napisał:

To coś jest wbrew pozorom bardzo tolerancyjne

Ciekawa uwaga, ostatnio jak robiłem przy pamięciach z równoległymi magistralami, wyszło że prędzej będą problemy przez złe przylutowanie układu.

18 godzin temu, H1M4W4R1 napisał:

To nie USB HS

Taki trochę offtop ale masz z tym doświadczenie? W cubie przeglądałem konfigurację do USB HS i wyprowadzenia są podobnie jak w ethernecie do external Phy. Gdzie może powstać więcej problemów pomiędzy uC a Phy czy już w drodze do złącza?

Link do komentarza
Share on other sites

12 minut temu, Gieneq napisał:

Taki trochę offtop ale masz z tym doświadczenie? W cubie przeglądałem konfigurację do USB HS i wyprowadzenia są podobnie jak w ethernecie do external Phy. Gdzie może powstać więcej problemów pomiędzy uC a Phy czy już w drodze do złącza?

Problemy są wszędzie 😉 Zależy co odwalisz na płytce, ale z reguły to strona zlacza albo układ lewituje. Pomijając oczywiście kwestie integralnosci sygnałów. Phil ma dobry kurs, ale sporo kosztuje 😞 

14 minut temu, Gieneq napisał:

Ciekawa uwaga, ostatnio jak robiłem przy pamięciach z równoległymi magistralami, wyszło że prędzej będą problemy przez złe przylutowanie układu.

To tylko 133MHz bardzo tolerancyjne na skew. W przypadku USB HS max to 15ps i długość ścieżki do 75mm. Przy SPI można być trochę mniej subtelnym.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

(edytowany)

Cześć,

dzisiaj sprawdziłem działanie  diod LED (8 sztuk) i działają OK. Programowanie przez złącze JTAG zewnętrznym programatorem (Gowin Cable) działa poprawnie - także programowanie zewnętrznej kostki Flash SPI. Aby sprawdzić poprawność działania przycisków (5 sztuk Tactile-Switch) i wyjścia VGA uruchomiłem projekt gry "Breakout" na tej płytce developerskiej i działa ona poprawnie. Tutaj link do projektu "Breakout" na Forbocie:

W wersji projektu dla płytki FPGA "Tang Nano" wystarczyło w projekcie (Gowin EDA) zmienić jedynie plik "constraint file" (breakout.cst) z fizycznym mapowaniem pinów układu FPGA (i typ układu FPGA używanego w projekcie na GW1N-LV9LQ144C6/15). Gra działa na tym zestawie FPGA całkiem poprawnie:

 

VGA_Test1.thumb.png.45fc2de541164628cec9190b57f12668.png

VGA_Test2.thumb.png.2422edb2db315a0b4d676ba92526b902.png

Teraz będę próbował uruchomić na tej płytce sterownik pamięci PSRAM (8 MB pseudo-RAM) dla kostki pamięci podłączonej do FPGA przez SPI. Jeśli to się uda to postaram się uruchomić jakiś prosty soft-processor na zestawie FPGA. W archiwum zip projekt gry "Breakout" dla tej płytki.

FPGATang_Breakout.zip

Pozdrawiam

Edytowano przez FlyingDutch
update
  • Lubię! 2
Link do komentarza
Share on other sites

Cześć,

dzisiaj chciałem wypróbować RISC-V soft procesor o nazwie "picorv32" - patrz link:

https://github.com/YosysHQ/picorv32

Napotkałem problem z klonowaniem repzytorium Github'a dla "Toolchain RV32I" (skróśny kompilator + narzędzia) z tego repozytorium:

https://github.com/YosysHQ/picorv32#building-a-pure-rv32i-toolchain

Postępowałem zgodnie z instrukcjami z podanej strony (mój OS to linux Mint 20.1). Wszystko szło OK do tej instrukcji (kopiowanie pod-repozytoriów):

git submodule update --init --recursive

Podczas klonowania repozytoriów zawsze występuje timeout prowadzący do fatalnego błędu - patrz wyjście z consoli Linux'a:

HEAD wskazuje teraz na 411d1345507e Merge pull request #396 from riscv/use-fsf-gdb
bofh@4core:~/RV32I_Toolchain/riscv-gnu-toolchain-rv32i$ git submodule update --init --recursive
Zarejestrowano podmoduł riscv-binutils (https://github.com/riscv/riscv-binutils-gdb.git) w „riscv-binutils”
Zarejestrowano podmoduł riscv-dejagnu (https://github.com/riscv/riscv-dejagnu.git) w „riscv-dejagnu”
Zarejestrowano podmoduł riscv-gcc (https://github.com/riscv/riscv-gcc.git) w „riscv-gcc”
Zarejestrowano podmoduł riscv-gdb (https://github.com/riscv/riscv-binutils-gdb.git) w „riscv-gdb”
Zarejestrowano podmoduł riscv-glibc (https://github.com/riscv/riscv-glibc.git) w „riscv-glibc”
Zarejestrowano podmoduł riscv-newlib (https://github.com/riscv/riscv-newlib.git) w „riscv-newlib”
Zarejestrowano podmoduł riscv-qemu (https://github.com/riscv/riscv-qemu.git) w „riscv-qemu”
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-binutils”...
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-dejagnu”...
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-gcc”...
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-gdb”...
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-glibc”...
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-newlib”...
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu”...
Ścieżka podmodułu riscv-binutils”: wybrano 82dcb8613e1b1fb2989deffde1d3c9729695ff9c
Ścieżka podmodułu riscv-dejagnu”: wybrano 2e99dc08d8e5e16f07627bd52a192906abfa9a5c
Ścieżka podmodułu riscv-gcc”: wybrano be9abee2aaa919ad8530336569d17b5a60049717
Ścieżka podmodułu riscv-gdb”: wybrano 044a7fdd5d0e6f3a4fc60e43673368e387c4b753
Ścieżka podmodułu riscv-glibc”: wybrano 2f626de717a86be3a1fe39e779f0b179e13ccfbb
Ścieżka podmodułu riscv-newlib”: wybrano 320b28ea27c71df7afe62b21a220f77aef9eb88a
Ścieżka podmodułu riscv-qemu”: wybrano ff36f2f77ec3e6a6211c63bfe1707ec057b12f7d
Zarejestrowano podmoduł dtc (git://git.qemu-project.org/dtc.git) w „riscv-qemu/dtc”
Zarejestrowano podmoduł pixman (git://anongit.freedesktop.org/pixman) w „riscv-qemu/pixman”
Zarejestrowano podmoduł roms/SLOF (git://git.qemu-project.org/SLOF.git) w „riscv-qemu/roms/SLOF”
Zarejestrowano podmoduł roms/ipxe (git://git.qemu-project.org/ipxe.git) w „riscv-qemu/roms/ipxe”
Zarejestrowano podmoduł roms/openbios (git://git.qemu-project.org/openbios.git) w „riscv-qemu/roms/openbios”
Zarejestrowano podmoduł roms/openhackware (git://git.qemu-project.org/openhackware.git) w „riscv-qemu/roms/openhackware”
Zarejestrowano podmoduł roms/qemu-palcode (git://github.com/rth7680/qemu-palcode.git) w „riscv-qemu/roms/qemu-palcode”
Zarejestrowano podmoduł roms/seabios (git://git.qemu-project.org/seabios.git/) w „riscv-qemu/roms/seabios”
Zarejestrowano podmoduł roms/sgabios (git://git.qemu-project.org/sgabios.git) w „riscv-qemu/roms/sgabios”
Zarejestrowano podmoduł roms/u-boot (git://git.qemu-project.org/u-boot.git) w „riscv-qemu/roms/u-boot”
Zarejestrowano podmoduł roms/vgabios (git://git.qemu-project.org/vgabios.git/) w „riscv-qemu/roms/vgabios”
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/dtc”...
fatal: nie można połączyć z git.qemu-project.org:
git.qemu-project.org[0: 20.218.253.93]: errno=Przekroczony czas oczekiwania na połączenie

fatal: klonowanie git://git.qemu-project.org/dtc.git” do ścieżki podmodułu „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/dtc” nie powiodło się
Nie można sklonować dtc”. Zaplanowano ponowienie
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/pixman”...
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/SLOF”...
fatal: nie można połączyć z git.qemu-project.org:
git.qemu-project.org[0: 20.218.253.93]: errno=Przekroczony czas oczekiwania na połączenie

fatal: klonowanie git://git.qemu-project.org/SLOF.git” do ścieżki podmodułu „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/SLOF” nie powiodło się
Nie można sklonować roms/SLOF”. Zaplanowano ponowienie
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/ipxe”...
fatal: nie można połączyć z git.qemu-project.org:
git.qemu-project.org[0: 20.218.253.93]: errno=Przekroczony czas oczekiwania na połączenie

fatal: klonowanie git://git.qemu-project.org/ipxe.git” do ścieżki podmodułu „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/ipxe” nie powiodło się
Nie można sklonować roms/ipxe”. Zaplanowano ponowienie
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/openbios”...
fatal: nie można połączyć z git.qemu-project.org:
git.qemu-project.org[0: 20.218.253.93]: errno=Przekroczony czas oczekiwania na połączenie

fatal: klonowanie git://git.qemu-project.org/openbios.git” do ścieżki podmodułu „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/openbios” nie powiodło się
Nie można sklonować roms/openbios”. Zaplanowano ponowienie
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/openhackware”...
fatal: nie można połączyć z git.qemu-project.org:
git.qemu-project.org[0: 20.218.253.93]: errno=Przekroczony czas oczekiwania na połączenie

fatal: klonowanie git://git.qemu-project.org/openhackware.git” do ścieżki podmodułu „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/openhackware” nie powiodło się
Nie można sklonować roms/openhackware”. Zaplanowano ponowienie
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/qemu-palcode”...
fatal: nie można połączyć z github.com:
github.com[0: 140.82.121.4]: errno=Przekroczony czas oczekiwania na połączenie

fatal: klonowanie git://github.com/rth7680/qemu-palcode.git” do ścieżki podmodułu „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/qemu-palcode” nie powiodło się
Nie można sklonować roms/qemu-palcode”. Zaplanowano ponowienie
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/seabios”...
fatal: nie można połączyć z git.qemu-project.org:
git.qemu-project.org[0: 20.218.253.93]: errno=Przekroczony czas oczekiwania na połączenie

fatal: klonowanie git://git.qemu-project.org/seabios.git/” do ścieżki podmodułu „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/seabios” nie powiodło się
Nie można sklonować roms/seabios”. Zaplanowano ponowienie
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/sgabios”...
fatal: nie można połączyć z git.qemu-project.org:
git.qemu-project.org[0: 20.218.253.93]: errno=Przekroczony czas oczekiwania na połączenie

fatal: klonowanie git://git.qemu-project.org/sgabios.git” do ścieżki podmodułu „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/sgabios” nie powiodło się
Nie można sklonować roms/sgabios”. Zaplanowano ponowienie
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/u-boot”...
fatal: nie można połączyć z git.qemu-project.org:
git.qemu-project.org[0: 20.218.253.93]: errno=Przekroczony czas oczekiwania na połączenie

fatal: klonowanie git://git.qemu-project.org/u-boot.git” do ścieżki podmodułu „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/u-boot” nie powiodło się
Nie można sklonować roms/u-boot”. Zaplanowano ponowienie
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/vgabios”...
fatal: nie można połączyć z git.qemu-project.org:
git.qemu-project.org[0: 20.218.253.93]: errno=Przekroczony czas oczekiwania na połączenie

fatal: klonowanie git://git.qemu-project.org/vgabios.git/” do ścieżki podmodułu „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/roms/vgabios” nie powiodło się
Nie można sklonować roms/vgabios”. Zaplanowano ponowienie
Klonowanie do „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/dtc”...
fatal: nie można połączyć z git.qemu-project.org:
git.qemu-project.org[0: 20.218.253.93]: errno=Przekroczony czas oczekiwania na połączenie

fatal: klonowanie git://git.qemu-project.org/dtc.git” do ścieżki podmodułu „/home/bofh/RV32I_Toolchain/riscv-gnu-toolchain-rv32i/riscv-qemu/dtc” nie powiodło się
Nie można sklonować dtc drugi raz, przerywanie
Nie można zejść do ścieżki podmodułu riscv-qemu
bofh@4core:~/RV32I_Toolchain/riscv-gnu-toolchain-rv32i$

Powtarzałem ten proces z siedem razy w pracy (łącze internet 72 Mb/s) i dzisiaj z domu (łącze światłowodowe do internetu o szybkości 600 Mb/s).

Czy ktoś mógłby spróbować wykonać te instrukcje na swoim komputerze, lub podać jakąś wskazówkę jak rozwiązać ten problem.

Z góry dziękuję i pozdrawiam

Link do komentarza
Share on other sites

2 minuty temu, FlyingDutch napisał:

Czy ktoś mógłby spróbować wykonać

Ciekawe po co? Bo przecież...

$ ping -c 3 git.qemu-project.org
PING shell1.qemu-project.org (20.218.253.93) 56(84) bytes of data.

--- shell1.qemu-project.org ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2048ms

Czyli serwer leży i nie  ma co próbować.

 

Link do komentarza
Share on other sites

(edytowany)
6 minut temu, ethanak napisał:

Ciekawe po co? Bo przecież...

$ ping -c 3 git.qemu-project.org
PING shell1.qemu-project.org (20.218.253.93) 56(84) bytes of data.

--- shell1.qemu-project.org ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2048ms

Czyli serwer leży i nie  ma co próbować.

 

Cześć,

no właśnie czasami się nie pinguje a po jakimś czasie vice-versa (i to na róznych podrepozytoriach). Próbowałem to kilka razy i losowo wykłada się na róznych repozytoriach (i te się nie pingują). Może ktoś zna jakieś alternatywne repozytorium dla RISC-V toolchain - koniecznie musi być dla ISA "RV32I". No i fajnie jakby zawierało skrypty linkera i debugger dla tej architektury.

Pozdrawiam

Edytowano przez FlyingDutch
Link do komentarza
Share on other sites

(edytowany)

cześć,

okazało się, że branch: 411d134 był bardzo stary i niektóre podmoduły już nie istniały. Komenda git'a z instrukcji budowania toolchain'a

git checkout 411d134

Gdy pobrałem rekursywnie pod-moduły z mastera wszystko zakończyło się sukcesem.

Kurczę uruchomiłem build'a dla tego toolchain'a dla RISC-V i od kilku godzin się wykonuje i nie chce skończyć 🙂

Pozdrawiam

Edytowano przez FlyingDutch
update
Link do komentarza
Share on other sites

W międzyczasie gdy leci build dla toolchain'a dla RISC-V postanowiłem zapoznać się z projektem soft CPU "picorv32". Poczytałem trochę o tym softcore i przyjrzałem się plikowi  "picorv32.v" - jest to główna implementacja dla tego CPU. Niestety moduł picorv32 zawiera ponad 200 pinów I/O, ma nie obudowane magistrale adresowe i danych - przez co nie nadaje się do bezpośredniej implementacji na układzie FPGA. Link do repo Github'a:

https://github.com/YosysHQ/picorv32/tree/master

Natomiast w podkatalogu "picosoc" tego repozytorium:

https://github.com/YosysHQ/picorv32/tree/master/picosoc

znaduje się prosty SoC oparty na picorv32 z obudowanymi magistralami i kilkoma peryferiami (miedzy innymi UART'em). Były tam wersje "picosoc" dla zestawów FPGA:

1) https://www.latticesemi.com/Products/DevelopmentBoardsAndKits/iCE40HX8KBreakoutBoard.aspx

2) https://www.crowdsupply.com/1bitsquared/icebreaker-fpga

Wybrałem przykład dla pierwszej płyty ponieważ druga płytka "IceBreaker" była oparta na układzie FPGA, który posiada wewnętrzną pamięć RAM, której nie mamy w układzie FPGA firmy Gowin. Trzeba było oczywiście trochę przystoswać projekt do tego zestawu FPGA opartego na układzie firmy Gowin.

W module "hx8kdemo.v" należało zamienić użycie prymitywu z FPGA Lattice na uniwersalny kod Verilog. Zamianie uległ fragment kodu:

SB_IO #(
		.PIN_TYPE(6'b 1010_01),
		.PULLUP(1'b 0)
	) flash_io_buf [3:0] (
		.PACKAGE_PIN({flash_io3, flash_io2, flash_io1, flash_io0}),
		.OUTPUT_ENABLE({flash_io3_oe, flash_io2_oe, flash_io1_oe, flash_io0_oe}),
		.D_OUT_0({flash_io3_do, flash_io2_do, flash_io1_do, flash_io0_do}),
		.D_IN_0({flash_io3_di, flash_io2_di, flash_io1_di, flash_io0_di})
	);

na

   assign flash_io0 = flash_io0_oe ? flash_io0_do : 1'bz;
    assign flash_io0_di = flash_io0;
    assign flash_io1 = flash_io1_oe ? flash_io1_do : 1'bz;
    assign flash_io1_di = flash_io1;
    assign flash_io2 = flash_io2_oe ? flash_io2_do : 1'bz;
    assign flash_io2_di = flash_io2;
    assign flash_io3 = flash_io3_oe ? flash_io3_do : 1'bz;
    assign flash_io3_di = flash_io3;

Poza tym trzeba było utworzyć plik "physical constraint file "hx8kdemo.cst" z mapowaniem pinów dla płytki developerskiej na układzie  GW1N-LV9LQ144c6/15. Tutaj ten plik:

IO_LOC clk 98;

IO_LOC flash_csb 94
IO_LOC flash_clk 93
IO_LOC flash_io0 95
IO_LOC flash_io1 96

# for QSPI mode the flash chip on the iCE40-HX8K Breakout Board
# must be replaced with one that supports QSPI and the IO2 and IO3
# pins must be soldered to T9 and P8 (center on J3)
IO_LOC flash_io2 90
IO_LOC flash_io3 88

IO_LOC ser_tx 102
IO_LOC ser_rx 101

# left on J3
IO_LOC debug_ser_tx 100
IO_LOC debug_ser_rx 99

# right on J3
IO_LOC debug_flash_csb 87
IO_LOC debug_flash_clk 86
IO_LOC debug_flash_io0 85
IO_LOC debug_flash_io1 84
IO_LOC debug_flash_io2 83
IO_LOC debug_flash_io3 82

IO_LOC "leds[7]" 124  # D9
IO_LOC "leds[6]" 125  # D8
IO_LOC "leds[5]" 126  # D7
IO_LOC "leds[4]" 128  # D6
IO_LOC "leds[3]" 129  # D5
IO_LOC "leds[2]" 130  # D4
IO_LOC "leds[1]" 131  # D3
IO_LOC "leds[0]" 132  # D2

Tak utworzony projekt syntetyzuje się bez błądów w "Gowin EDA" :

DevBoard1.thumb.png.ef7304bb7b260ca52fffea4bfa523063.png

Bez problemów też zaprogramował się zestaw FPGA przez "Gowin Cable". Teraz trzeba zbudować jakiś przykładowy firmware (kompilacja z programu w C). Niestety toolchain dla RISC_V jeszcze nie skończył się budować i muszę poczekać. W pilku zip projekt "picosoc" dla tej płytki developerskiej (dla Gowin EDA).

picoSOC02.tar.gz

C.D.N

Pozdrawiam

 

 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Cześć,

dzisiaj wlutowałem oscylator kwarcowy 12 MHz (dla układu FT2232HL), który służy jako programator JTAG dla programowania układu FPGA Gowin bez drogiego oryginalnego programatora firmy Gowin. Był jeden błąd w projekcie płytki PCB (i w schemacie) - czwarte wyprowadzenie oscylatora 12 MHz powinno być podłączone do napięcia zasilania 3.3V (Vcc), a było podłączone do masy. Konieczne było przecięcie ścieżki pod oscylatorem i odpowiednie podłączenie 4-tego wyprowadzenia oscylatora do napięcia 3,3V. Po tym zabiegu system operacyjny Linux bez probemu wykrył programator płytki jako

Future Technology Devices International, Ltd FT2232C/D/H Dual UART/FIFO IC

Poniżej zdjęcie zestawu FPGA z podpiętym kablem mini-USB do programiowania:

DevBoard_USB_Pogram.thumb.png.a5173a59490614225d2d2c305ad763a4.png

A tutaj zrzut ekranu z consoli (dwie konsole w terminatorze):

Console01.thumb.png.f5c2cf40fc68f074dd13b7b156735315.png

W górnej konsoli widać wynik komendy lsusb a w dolnej wynik wykonania prostego skryptu bash listującego urządzenia USB. Komenda lsusb wykrywa programator jako:

Bus 003 Device 011: ID 0403:6010 Future Technology Devices International, Ltd FT2232C/D/H Dual UART/FIFO IC

a skrypt jako:

/dev/ttyUSB1 - FTDI_Dual_RS232-HS
/dev/bus/usb/003/011 - FTDI_Dual_RS232-HS
/dev/ttyUSB0 - FTDI_Dual_RS232-HS

Jak widać uklad FT2232HL tworzy dwa odzielne porty serial (jeden można uzyć jako programator JTAG, a drugi do w łasnej komunikacji z układem FPGA (USB -> Serial port).

Gowin programmer (z Gowin EDA) bezproblemowo wykrywa ten programator (można wybrać z listy dowolny z dwóch portów do programowania zestawu FPGA):

Gowin_Programmer.thumb.png.ac091200b6cb69a67a58a0a564b6fa87.png

A tutaj zrzut ekranu z działającym procesem programowania układu FPGA (Flash wbudowany w układ FPGA):

ProgrammingProc.thumb.png.28fa93add3deb9569b906e7c3b84606c.png

Programator na płytce PCB zestawu FPGA spisuje się bardzo dobrze i do jego programowania nie jest potrzebny zakup drogiego programatora firmy Gowin.

Pozdrawiam

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.