Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Witam ponownie,

dzisiaj szukałem możliwości podłączenia małego wyświetlacza 1,3 cala OLED do układu FPGA i spotkało mnie zdziwienie. Omówię to na przykładzie tego modelu wyświetlacza:

https://botland.com.pl/wyswietlacze-oled/4439-wyswietla...

Tu link do strony producenta:

https://www.waveshare.com/1.3inch-oled-a.htm

Wyświetlacz oparty jest na sterowniku SH1106 i bardzo łatwo go podłączyć do dowolnego popularnego mikro-kontrolera (Arduino, STM32, Nucleo , ESP8266, RPI itp.). Wyświetlacz można podłączyć poprzez 3-wire lub 4-wire SPI i I2C i do każdego popularnego mikro-kontrolera znajdziemy gotową bibliotekę do jego obsługi w języku C/C++.

Bardzo się zdziwiłem, gdy nie znalazłem żadnego gotowego rozwiązania do podłączenia tego popularnego wyświetlacza do układów FPGA. Co gorsza nie znalazłem również "gotowca" dla innych popularnych wyświetlaczy LCD.

Na opencores.org są razem 2 projekty i to jeszcze do obsługi starszych modeli wyświetlaczy LCD o interfejsie równoległym.

W związku z tym mam pytanie:

Gdybym chciał podłączyć ten konkretny wyświetlacz muszę wykonać dwie fazy:

1) Zaimplementować w układzie FPGA komunikację po SPI lub I2C z układem kontrolera wyświetlacza OLED (SH1106)

2) Przeportować bibliotekę w języku C++ (np. do Arduino) na VHDL/Verilog

Moje pytanie brzmi jak się do tego zabrać?

Domyślam się że należy stworzyć entity(może bibliotekę) z procedurami i/lub funkcjami języka VHDL odwzorowującymi metody z biblioteki C++ (zamieniając typy i kod języka C++ na typy i kod VHDL), a potem w projekcie VHDL wywoływać te funkcje lub procedury?

Może ktoś może polecić jakieś linki w sieci jak to się robi? Czy portowaliście już jakiś kod z języka C/C++ na VHDL i jak się to zakończyło?

Pozdrawiam
Jakub Tyburski

Jakub Tyburski Asystent dydaktyczny
- Wojskowa Akademia
Techniczna w War...

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

I to jest właśnie ten punkt, gdzie działanie w układach programowalnych jest zupełnie czym innym niż działanie w C i mikroprocesorach. Niemniej są narzedzia do konwersji z języka C lub C++ na VHDL lub Verilog - narzędzia te stanowią tzw. HLS (High Level Synthesis) czyli po naszemu "syntezę wysokiego poziomu" w sensie konwersji z języków wysokiego poziomu (czy też wysokiej abstrakcji), do których zalicza sìę też C. Takie narzędzie to np Vivado HLS (który wchodzi w skład środowiska Vivado, które jest następcą używanego przez ciebie ISE) - jest darmowe. Są też inne narzędzia, ale niektóre są płatne (np w Matlabie) a niektóre darmowe, choć niedoskonałe (np. Trident). Przykłady narzędzi znajdziesz np tu: https://en.m.wikipedia.org/wiki/C_to_HDL lub tu: https://en.m.wikipedia.org/wiki/High-level_synthesis. Niemniej polecam Vivado HLS (choć ie jest taki może udany, ale lepsze za to z narzędzi mimo to). Sam się bawiłem tak, ale z dwa razy jedynie (wolę jednak w VHDL-u albo Verilogu pisać od razu - tak się z HD44780 bawiłem bazując wyłącznie na samej dokumentacji standardu - i tak też czynię z pozostałymi rzeczami - inaczej niż jest to z mikrokontrolerami, że masz właśnie gotowe biblioteki: )). I tyle :)Ten post został edytowany przez Autora dnia 15.10.17 o godzinie 16:32
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Cześć,

mam jeszcze jedno pytanie dotyczące portowaniu kodu z j. C na VHDL i narzędzia "Vivado HLS" (właśnie ściągam z sieci instalator Vivado, ale to jest ponad 16 GB do pobrania).

Czy kod "przeportowany" do HDL'a przy użyciu tego narzędzia zakłada użycie jakiegoś "Software CPU", czy jest portowany na "czysty" HDL (bez użycia SOC w FPGA)?

Pozdrawiam
Jakub Tyburski

Jakub Tyburski Asystent dydaktyczny
- Wojskowa Akademia
Techniczna w War...

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Nie zakłada użycia żadnego układu (w tym SoC) - portuje na "czysty" HDL - jedynie jak już to ci co tworzyli to narzędzie przyjęli jedynie własne wejścia dla tworzonych modułów ala: START, STOP, RESET, Chip Select itp. i ewentualnie swoje wyjścia (ale nie pamiętam już jakie). W każdym razie nie przejmuj się nimi (zwykle nie są aż tak mocno "integrowane" z funkcjonalnością uzyskanego kodu i można je bezproblemowo zazwyczaj usunąć bez niszczenia uzyskanej funkcjonalności). I tyle :)Ten post został edytowany przez Autora dnia 18.10.17 o godzinie 19:47
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Dzięki za odpowiedź :)

Pozdrawiam
Jakub Tyburski

Jakub Tyburski Asystent dydaktyczny
- Wojskowa Akademia
Techniczna w War...

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Drobiazg :)
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Cześć,

będę dzisiaj zaczynał portowanie biblioteki C++ z Arduino:

https://github.com/adafruit/Adafruit_SSD1306

do obsługi wyświetlacza OLED 1,3 " SPI/I2C (na IC SSD1306) do VHDL z użyciem "Vivado HLS".

Zobaczę na ile jest to złożony problem i czy wychodzi z tego "coś sensownego" (bardzo przydałaby mi się możliwość podłączenia tego wyświetlacza do mojej płytki/płytek FPGA).

Dam znać, co z tego wyszło.

Pozdrawiam
Jakub Tyburski

Jakub Tyburski Asystent dydaktyczny
- Wojskowa Akademia
Techniczna w War...

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Drobiazg :) Tylko spokojnie - tego rodzaju narzędzia nie są idealne mimo wszystko (nawet takie narzędzie właśnie od Vivado, choć jest jedne z lepszych), więc spokojnie i bez nerwów jak coś nie wyjdzie :)
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Cześć,

pobawiłem się wczoraj i dziś "Vivado HLS" i muszę przyznać, że jestem pod wrażeniem (ćwiczyłem na znanych mi bibliotekach C++). Generowany kod jest fajnie zorganizowany i dość czytelny.

Fajne jest też, że po syntezie mamy źródła HDL w 3 językach: VHDL, systemC i Verilog.

To narzędzie to jest przepustka do robienia bardziej skomplikowanych rzeczy na FPGA ;)

Pozdrawiam
Jakub Tyburski

Jakub Tyburski Asystent dydaktyczny
- Wojskowa Akademia
Techniczna w War...

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

No a nie mówiłem, ze ci sie spodoba :)
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Cześć,

na razie trochę "utknąłem" z portowaniem biblioteki C++ Arduino do obsługi wyświetlacza OLED wymienionej wcześniej. Problemem jest zależność tej biblioteki od innych bibliotek Arduino (bardziej podstawowych). Biblioteki te są uzależnione od sprzętu Arduino (budowy wewnętrznej mikro-kontrolerów AVR np. timerów przerwań itp).

Na razie zastanawiam się jak rozwiązać ten problem w najprostszy sposób.

Pozdrawiam
Jakub Tyburski

Jakub Tyburski Asystent dydaktyczny
- Wojskowa Akademia
Techniczna w War...

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Normalka - stąd po prostu sięgam do dokumentacji ukladow i od razu w VHDL-u czy Verilogu piszę :) Ale to tak na boku. Co do bibliotek to spokojnie - zacznij od fundamentów, którymi zwykle są rejestry i wartości stałe dla nich oraz przerwanie - te pierwsze zwykle można od biedy zaimitować sygnałami lub zmiennymi, a te drugie to można zrobić komponent co będzie soę zachowywał jak kontroler przerwań.. Potem jak to zrobisz to zacznij kawałek po kawałku pojesyncze funkcje konwertować i łaczyć je z tymi rzeczami i już :) Trochę tp przypomona co prawda i tak "kopiowanie" mikroprocesora, ale też tak najprościej portować kody zwłaszcza te związane ściśle z wybranymi układami. Albo też druga opcja: zaimplementuj mikroprocesor w FPGA i wtedy nie będziesz musiał konwertować kodu :) (jedna z takoch prac dyplomowych czeka na potencjalną osobę na mej uczelni :))
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Jakub,

dzięki za sugestie.

Pozdrawiam
Jakub Tyburski

Jakub Tyburski Asystent dydaktyczny
- Wojskowa Akademia
Techniczna w War...

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Drobiazg :)
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Jakub,

a mógł byś podać jakieś przykłady (linki) jak podejść do takiego komponentu symulującego przerwania?

Pozdrawiam
Jakub Tyburski

Jakub Tyburski Asystent dydaktyczny
- Wojskowa Akademia
Techniczna w War...

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

W najprostszym przypadku od biedy możesz próbować zrobić coś takiego jak tu: http://www.edaboard.com/thread6393.html lub też bazować na takim ogólnym opisie:
https://issuu.com/ijsrd/docs/ijsrdv4i10075. Możesz też próbować zbudować jak tu: https://opencores.org/project,pic, czy tu: https://github.com/kevinpt/vhdl-extras/blob/master/rtl/.... A możesz też zrobić jak w tej książce (str 414-417): http://misp.mui.ac.ir/sites/misp.mui.ac.ir/files/ebook..., która w zasadzie pokazuje jak to jest zrobione dla PicoBlaze'a :) I tyle :)
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Cześć,

spróbuję najpierw kodu z pierwszego linku - wydaje się w miarę prosty do zrozumienia. Jeśli będą jakieś problemy to jako drugi wypróbuję kod z przedostatniego linku.

Pozdrawiam
Jakub Tyburski

Jakub Tyburski Asystent dydaktyczny
- Wojskowa Akademia
Techniczna w War...

Temat: Czy ktoś "portuje" biblioteki z C/C++ na VHDL/Verilog

Ok :) A kto wie - może znajdziesz przy tym coś jeszcze prostszego co mnie się nie udało znaleźć pod choćby hasłem: Priority Interrupt Controller (PIC) albo po prostu Interrupt Controller (czego oczywiście życzę) :)Ten post został edytowany przez Autora dnia 05.11.17 o godzinie 19:29

Następna dyskusja:

A structured VHDL design me...




Wyślij zaproszenie do