Elo Mirko. Pamiętacie jak tydzień temu mówiłem, że idę w kierunku oscyloskopu? Nie kłamałem i swoje przez ten tydzień zrobiłem ( ͡°͜ʖ͡°) Jest i gfycat na dole ( ͡°͜ʖ͡°) Pod punktami informacje co dalej z projektem
Trochę to trwało, bo wyszedł dodatek do Wiedźmina, ale pomimo tego udało mi się zrobić to co chciałem. Po kolei:
1) Nauczyłem się obsługiwać wbudowaną pamięć RAM w układach MAX10. Z dostępnych 378 kb (kilo BITÓW) pamięci utworzyłem bufor na 8-kolorowy obraz 320 x 240 px. Mało, ale daje to sporo czasu na renderowanie. Przy 60 FPS 1024x786 (taki mam monitor, wyświetlam na nim tylko fragment 320 x 240), po wyrenderowaniu pierwszych 240 linii, zostaje mi czas 546 linii. Jedna linia trwa 0.021 ms, czyli mam 11.46 ms na wyrenderowanie obrazu. Póki co renderowanie realizuję przy pomocy bardzo prostej architektury procesora, który maksymalnie (bez błędów zapisu do pamięci) daje się taktować zegarem 260 MHz - całkiem miło :)
Zegar 260 MHz to okres 3.84 ns, czyli mam 2 984 375 taktów w tym czasie ( ͡°͜ʖ͡°) Można szaleć z obliczeniami, albo zwiększyć rozdzielczość, albo zmniejszyć ilość kolorów i dać więcej pamięci na próbki z ADC.
2) Dopasowałem czasowo timingi VGA i RAM'u. To mi zajęło najwięcej - miałem problem z symulacją i musiałem testować na hardware.
3) Odpaliłem ADC i powiązałem go z kolejnym modułem RAMu, niezależnym od poprzedniego. Tutaj zaczęła się zabawa z qsys w Quartusie Prime, nie jest to takie pisanie niskopoziomowe, tylko konfigurowanie protokołów Altery, czyli ten cały Avalon. Niby fajne bo szybko można ze sobą połączyć mnóstwo rzeczy, ale też dużo czytania i patrzenia po PDFach. Czasem jednak to fajniej samemu napisać kod i tak też zrobiłem w celu zapisywania próbek z ADC w pamięci RAM. Nie udało mi się za pomocą qsysa i Avalonu tak połączyć wszystkiego, aby przesyłanie danych działo się automatycznie, niemal bez kodu.
4) Dodanie renderowania kropek według próbek to już prościzna, w przyszłości będę implementował rysowanie linii ofc.
Jakie plany na dalej? Interfejs oscyloskopu, renderowanie tekstu. Jak to zbiorę w kupę to pomyślę co dalej.. Nie wiem jak bardzo chcę wchodzić w ten projekt, myślę sobie że mógł bym zrobić z tego pracę inżynierską, a pomysł jest taki: Oscyloskop/przystawka oscyloskopowa ok. 200-500 MSPS na FPGA z pamięcią DDR3 (wcale nie musi być to DDR3) i interfejsem USB 3.0 oraz HDMI/VGA. Część roboty byłaby wykonywana na FPGA, a możliwe byłoby szybkie przesłanie sygnału do komputera i tam dalsza jego analiza/obróbka. Program na komputerze byłby mocno dopieszczony, ładny interfejs z możliwością szybkiego "przeglądania" sygnału, ze swobodą i bez toporności z jaką się obecnie spotyka w większości oscyloskopów (np. ograniczone skalowanie w pionie - napięcie na działkę i poziomie - czas na działkę) itd.
Zdaję sobie sprawę z pewnych problemów które tutaj wystąpią, dzięki rozmowie z @0xFE dowiedziałem się że np. prowadzenie ścieżek pod DDR3 wymaga około 6 warstw, a dla dobrego szybkiego ADC - 4 warstwy. Na obecny moment wydaje się to poza moimi umiejętnościami, no ale przecież o to chodzi żeby je powiększać ( ͡°͜ʖ͡°)
Tak samo zdaję sobie sprawę z tego, że komputer nie będzie w stanie wyrobić z przetwarzaniem takiej ilości informacji. W końcu, przy 500 MSPS 8-bit, jest to 500 MB danych do przetworzenia na sekundę. USB nie ma DMA z tego co kojarzę, a w ogóle to 500 MB/s to absolutny max dla USB 3.0 - którego zapewne nie uda mi się uzyskać.
To czy pójdę w tym lub innym kierunku to kwestia bardzo rozwojowa. Ważna będzie dla mnie też opinia doświadczonych użytkowników narzędzi warsztatowych, a także firm branżowych, czy taki produkt zainteresował by inwestorów/kupców - niekoniecznie musi opadać im kopara, ale mógł by to być fajny zgrabny oscyloskop do domowego warsztatu, gdzie choćby 200 MSPS mogło by wystarczyć do pracy z szybszymi mikrokontrolerami. Nie powinno to też kosztować dużych pieniędzy, układ FPGA to 100-300 zł, szybkie ADC 150-300 zł (300 za 500 MSPS), scalak na USB 3.0 od FTDI to 50 zł.. I samo PCB pewnie z 100-200 zł.
@Visher: Nie chcę Ci podcinać skrzydeł ale raczej nie masz szans konkurować na rynku oscyloskopów USB z chińczykami (chociażby). Za $100 można już na aliexpress przebierać w modelach, a według Twoich wyliczeń (zakładam, że są poprawne) nie pokrywa to nawet kosztów komponentów. A gdzie produkcja (produkt z układami BGA trudno będzie sprzedać jako kit), testowanie, pisanie softu czy zysk. Nie mówiąc o inwestorze/dystrybutorze, który będzie też chciał swoją działkę. Polecam film
@olewales: odnosząc się do rynku konsumentów i przedsiębiorców bardziej miałem na myśli to, czy budowa czegoś takiego gdziekolwiek by się przydała. Głównie informacja, czy ktoś by chciał mieć wygodny interfejs w komputerze, bo choć tak naprawdę byłem tylko w jednym warsztacie elektronicznym pewnej firmy z różnymi "poważnymi" maszynami: stanowisko na sito do pasy lutowniczej, piec do lutowania (w formie taśmy), maszyna do automatycznego nakładania elementów SMD i parę innych podobnych, oraz
Trochę to trwało, bo wyszedł dodatek do Wiedźmina, ale pomimo tego udało mi się zrobić to co chciałem. Po kolei:
1) Nauczyłem się obsługiwać wbudowaną pamięć RAM w układach MAX10. Z dostępnych 378 kb (kilo BITÓW) pamięci utworzyłem bufor na 8-kolorowy obraz 320 x 240 px. Mało, ale daje to sporo czasu na renderowanie. Przy 60 FPS 1024x786 (taki mam monitor, wyświetlam na nim tylko fragment 320 x 240), po wyrenderowaniu pierwszych 240 linii, zostaje mi czas 546 linii. Jedna linia trwa 0.021 ms, czyli mam 11.46 ms na wyrenderowanie obrazu. Póki co renderowanie realizuję przy pomocy bardzo prostej architektury procesora, który maksymalnie (bez błędów zapisu do pamięci) daje się taktować zegarem 260 MHz - całkiem miło :)
Zegar 260 MHz to okres 3.84 ns, czyli mam 2 984 375 taktów w tym czasie ( ͡° ͜ʖ ͡°) Można szaleć z obliczeniami, albo zwiększyć rozdzielczość, albo zmniejszyć ilość kolorów i dać więcej pamięci na próbki z ADC.
2) Dopasowałem czasowo timingi VGA i RAM'u. To mi zajęło najwięcej - miałem problem z symulacją i musiałem testować na hardware.
3) Odpaliłem ADC i powiązałem go z kolejnym modułem RAMu, niezależnym od poprzedniego. Tutaj zaczęła się zabawa z qsys w Quartusie Prime, nie jest to takie pisanie niskopoziomowe, tylko konfigurowanie protokołów Altery, czyli ten cały Avalon. Niby fajne bo szybko można ze sobą połączyć mnóstwo rzeczy, ale też dużo czytania i patrzenia po PDFach. Czasem jednak to fajniej samemu napisać kod i tak też zrobiłem w celu zapisywania próbek z ADC w pamięci RAM. Nie udało mi się za pomocą qsysa i Avalonu tak połączyć wszystkiego, aby przesyłanie danych działo się automatycznie, niemal bez kodu.
4) Dodanie renderowania kropek według próbek to już prościzna, w przyszłości będę implementował rysowanie linii ofc.
Jakie plany na dalej? Interfejs oscyloskopu, renderowanie tekstu. Jak to zbiorę w kupę to pomyślę co dalej.. Nie wiem jak bardzo chcę wchodzić w ten projekt, myślę sobie że mógł bym zrobić z tego pracę inżynierską, a pomysł jest taki: Oscyloskop/przystawka oscyloskopowa ok. 200-500 MSPS na FPGA z pamięcią DDR3 (wcale nie musi być to DDR3) i interfejsem USB 3.0 oraz HDMI/VGA. Część roboty byłaby wykonywana na FPGA, a możliwe byłoby szybkie przesłanie sygnału do komputera i tam dalsza jego analiza/obróbka. Program na komputerze byłby mocno dopieszczony, ładny interfejs z możliwością szybkiego "przeglądania" sygnału, ze swobodą i bez toporności z jaką się obecnie spotyka w większości oscyloskopów (np. ograniczone skalowanie w pionie - napięcie na działkę i poziomie - czas na działkę) itd.
Zdaję sobie sprawę z pewnych problemów które tutaj wystąpią, dzięki rozmowie z @0xFE dowiedziałem się że np. prowadzenie ścieżek pod DDR3 wymaga około 6 warstw, a dla dobrego szybkiego ADC - 4 warstwy. Na obecny moment wydaje się to poza moimi umiejętnościami, no ale przecież o to chodzi żeby je powiększać ( ͡° ͜ʖ ͡°)
Tak samo zdaję sobie sprawę z tego, że komputer nie będzie w stanie wyrobić z przetwarzaniem takiej ilości informacji. W końcu, przy 500 MSPS 8-bit, jest to 500 MB danych do przetworzenia na sekundę. USB nie ma DMA z tego co kojarzę, a w ogóle to 500 MB/s to absolutny max dla USB 3.0 - którego zapewne nie uda mi się uzyskać.
To czy pójdę w tym lub innym kierunku to kwestia bardzo rozwojowa. Ważna będzie dla mnie też opinia doświadczonych użytkowników narzędzi warsztatowych, a także firm branżowych, czy taki produkt zainteresował by inwestorów/kupców - niekoniecznie musi opadać im kopara, ale mógł by to być fajny zgrabny oscyloskop do domowego warsztatu, gdzie choćby 200 MSPS mogło by wystarczyć do pracy z szybszymi mikrokontrolerami. Nie powinno to też kosztować dużych pieniędzy, układ FPGA to 100-300 zł, szybkie ADC 150-300 zł (300 za 500 MSPS), scalak na USB 3.0 od FTDI to 50 zł.. I samo PCB pewnie z 100-200 zł.
Spamlista (wołajcie jak chcecie): @syn_admina, @printf
#visherdev przede wszystkim - zapraszam
#vga #monitory #fpga #synteza #maximator #vhdl #altera #elektronika
źródło: comment_YX1P0z92fKFIu29AN2sOiZcdHCEHN66T.jpg
PobierzKomentarz usunięty przez autora