Projekt oscyloskopu cyfrowego. Trochę czasu minęło odkąd wszystko zacząłem, jakiś miesiąc - przez ten czas do ogarnięcia było sporo dużych i drobnych problemów, które potrafiły zająć cały dzień.. Zdecydowanie projektowanie czegoś na FPGA wymaga dużej trzeźwości umysłu. W sumie spędziłem może nad tym projektem z 100 roboczogodzin.

W ostatnim wpisie pokazałem Wam połączony moduł ADC, pamięć RAM i interfejs VGA, wraz z niewielką ilością systemu napisanego w VHDL. Dało to w efekcie
Visher - Projekt oscyloskopu cyfrowego. Trochę czasu minęło odkąd wszystko zacząłem, ...

źródło: comment_yKlgVPc8UOU7D9ZREo85MjJeETRcFpTB.jpg

Pobierz
@SIr_Kakao: podobnie działa też assign:

assign czteryjedynki is "1111";

Przydaje się często w takim zastosowaniu:

assign zmiennalsb is zmienna(7 downto 0);

Po powyższym przykładzie zamiast pisać ciągle zmienna(7 downto 0) żeby mieć najmłodsze 8 bitów, można pisać już tylko zmienna
lsb
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ć
Visher - Elo Mirko. Pamiętacie jak tydzień temu mówiłem, że idę w kierunku oscyloskop...

źródło: comment_YX1P0z92fKFIu29AN2sOiZcdHCEHN66T.jpg

Pobierz
@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
UART skończony, teraz pora na 8-kolorowe VGA :-)

I to nie byle jakie, bo od razu skok w 1920 x 1080 @ 60 fps - z zegarem 148,5 MHz! Bo mnie stać ;-)

Taki testowy ekran jak na obrazku zajmuje 50 na 8000 bloków logicznych w moim układzie FPGA. Choć brzmi to obiecująco jeżeli myśleć o tym ile można w taki układ wpakować funkcji, to mimo tego podobno szybko zaczyna miejsca brakować
Visher - UART skończony, teraz pora na 8-kolorowe VGA :-)

I to nie byle jakie, bo ...

źródło: comment_ljITNk4VBphsl5BDIF9Wvfzf2G1Q8j4v.jpg

Pobierz
UART, ciągle UART. Przyczynę poprzedniego problemu znalazłem, zawiniło txIdle które było w stanie wysokim przez dwa cykle i dwukrotnie zwiększyło indeks po pierwszym znaku, przeskakując na trzeci. Wynikało to ze złego przekazywania zmiennej w procesie do sygnału - wołam @olewales

Problem rozwiązałem rozszerzając kod UART.vhd tak, aby przy dłuższym czasie trwania txIdle, nie przeskakiwało do kolejnego znaku. I fajnie, niby powinno działać.

Przy okazji nauczyłem się obsługiwać symulator ModelSim - jakie to
Visher - UART, ciągle UART. Przyczynę poprzedniego problemu znalazłem, zawiniło txIdl...

źródło: comment_Uttil5ouGIUCZP1dJIAxofc3OqMllhy7.jpg

Pobierz
@olewales:

Czasowo wyglądało to mniej więcej tak:

1) Przesyłany jest do bufora pierwszy znak
2) Start transmisji
3) Pierwszy znak jest kopiowany z bufora i przekazany do wysłania
4) Transmisja się zakończyła, ale nie została zatrzymana, więc brany jest znak w buforze i kopiowany do wysłania - ale w buforze ciągle siedzi jeszcze pierwszy znak, więc idzie drugi raz
5) Drugi znak jest kopiowany do bufora i siedzi w nim nieruszony,
Zmagania z FPGA i VHDL ciąg dalszy ;-)

Tym razem rzuciłem sobie wyzwanie napisać UARTa, poszło całkiem sprawnie i czuję większa swobodę w tym języku konfiguracji. Póki co zaimplementowałem samo nadawanie które na ogół działa, #!$%@? się jednak dziwnym błędem - zawsze wcina drugi znak. Jakikolwiek by nie był, cokolwiek by przed nim nie stało.. Pozostałe znaki w napisach o różnej długości są spoko, problem przy różnych baudach (testowałem 9600 i 38400).
Visher - Zmagania z FPGA i VHDL ciąg dalszy ;-) 

Tym razem rzuciłem sobie wyzwanie...

źródło: comment_WDOwVE0BJ7UQVWtuR68VNtf4y3YOvDg6.jpg

Pobierz
No, to pierwszy krok w FPGA mam już za sobą - nie mniej jednak jeszcze mnóstwo przede mną. Na ten moment udało mi się zrobić całkiem zgrabny debouncer przycisku z podziałem na sam debouncer i licznik, który to zaaplikowałem dla czterech pinów. Kod jest tu:

http://pastebin.com/fB0nYThM

Wszelkie uwagi mile widziane :) Staram się jeszcze zrozumieć sens podziału na jednostki, architektury i komponenty oraz jak nimi operować. Konkretnie sposób w jaki dochodzi do
Visher - No, to pierwszy krok w FPGA mam już za sobą - nie mniej jednak jeszcze mnóst...

źródło: comment_KloDqPjcmjE27kpVgI9EuTbCQS4ovtXF.jpg

Pobierz
@fhrh: ciężko mi odpowiedzieć, na Politechnice mam dostęp do biblioteki i tam wygrzebuję informacje z paru książek naraz i łącze to w całość. Żadna nie nauczyła mnie sama z siebie tego co tu pokazałem - też nie czytałem żadnej od początku do końca. Do tego internet - videotutoriale na YT, stackoverflow-podobne serwisy, gotowe programy...
Piszę sobie licznik do debouncera przycisku (napisałem sam debouncer w jednym pliku i działał, ale teraz chcę podzielić to na dwa pliki i dwie osobne jednostki: uogólniony licznik i debouncer) i mam problem z instrukcją:

Q <= '1' when (clkCounter = target) else '0';
Kod wygląda tak:

http://pastebin.com/UzSgSGPi

Błąd wyrzucany to:

Error (10500): VHDL syntax error at PositiveCounter.vhd(34) near text "when"; expecting ";"
W czy jest problem...?

#fpga #synteza #vhdl #altera #
@Leniek: nie robie tego zawodowo, trochę dłubię w audio na płytce de1 od terasica, jestem z niej zadowolony. Myślę że dobrym projektem na start są filtry. Pisałem w verilogu
#elektronika #vhdl

Wie ktoś może, dlaczego w tym układzie nie chce mi wrócić do standby po wykonaniu zadania, tylko trzyma cały czas frame na wyjściu?

https://gist.github.com/anonymous/867c62fb4db6909560f2

Taki bench jest napisany do tego:

https://gist.github.com/anonymous/426c18bc8475fe066acc

Ogółem problem się zaczął gdy odwróciłem logikę RXD. Jak stan active wbijał na logicznej 1 (a stan bezczynności to 0), to przez jeden tick mieliśmy wyprowadzenie na DATAout, po czym wracało do 0. A teraz, kiedy bitem startu jest
Khaine - #elektronika #vhdl

Wie ktoś może, dlaczego w tym układzie nie chce mi wró...

źródło: comment_z1pTstbwTMurpl70Kc71Z72MI8S4nNiK.jpg

Pobierz
No curwa w końcu ;_;

Mocno uważajcie na sensitivity list w procesach. Brakowało po prostu w ostatnim procesie sensitivity od FRAME, przez co nie aktualizował stanu. Natomiast, żeby potem nie aktualizował z każdym tickiem (bo jak procek albo coś innego przypadkowo sprawdzi to dostanie bzdury), trzeba było dodać jeszcze jedną kontrolkę przy zmianie stanu.
Khaine - No curwa w końcu ;_; 

Mocno uważajcie na sensitivity list w procesach. Br...

źródło: comment_05omvx8znGmCI1UKRcNH3h8fU2fGujKU.jpg

Pobierz
#elektronika #vhdl

Pytanie kolejne z dziedziny RSa.

http://www.bealto.com/fpga-uart_rx.html

Wzoruję się na tym UARTcie robiąc własny. Generalnie ma on taktowanie 16x większe niż jest BAUD na komunikacji. No spoko. I teraz działanie ma takie, że sprawdza co 8 ticków stan bitu na RXD jak dostanie wcześniej bit startu. No spoko. No tylko problem jest w tym, że ten bit wypada po 8 tickach aby znajdował się możliwie na środku czasu trwania sygnału na
#elektronika #vhdl

Próbuję właśnie "zaprojektować" bufor do RS232. Początkowo myślałem, żeby zrobić to na rejestrze przesuwnym, ale przypomniałem sobie, że przecież w VHDLu istnieje pętla for. Tylko teraz zastanawiam się jak on to dokładnie będzie robił.

Generalnie na ten moment jak pojawi się bit startu na linii RXD, to w następnym takcie zegara nastąpi przejście w stan odebrania. Teraz musimy z każdym tyknięciem ładować do ramki poszczególne bity, a gdy doliczymy się
@Khaine: nie chce Cie denerwowac, ale w prawilnych mirkokontrolerach kazdy bit jest probkowany 3 razy, w rownych odstepach czasu, zeby uniknac bledow. decyzja o poziomie logicznym bitu zapada na zasadzie wiekszosci 'glosow' czastkowych.
#elektronika #fpga #vhdl

Tak wygląda schemat gotowego UARTa do procka przy którym obecnie dłubię (bo on sam swojego bufora nie ma). I generalnie jedna rzecz mnie patrząc na to zastanawia. Z tego co widzę odczyt wejścia następuje na życzenie procka. Nie lepiej jest mu dać przerwanie jak bufor się zapełni? No bo w ten sposób to on musi cały czas żądać odczytu (gdzieś co 160 taktów zegara, bo max baud jest CLK/16,
Khaine - #elektronika #fpga #vhdl

Tak wygląda schemat gotowego UARTa do procka prz...

źródło: comment_MIvfjHWF4l2ciAGcS5WpE61xNkzd4TI3.jpg

Pobierz
#elektronika #fpga #vhdl

Chcę sobie otworzyć komunikację (na razie ultra prostą, po prostu aby zobaczyć czy bangla) z prockiem PicoBlaze zaimplementowanym w FPGA po RS232.

RSa mam na przejściówce USB->RS232, ale to nie ma raczej większego znaczenia. Do komunikacji ze strony kompa chcę użyć terminala Hercules, ale to też nie ma większego znaczenia raczej. Jako, że mam taktowanie 27 MHz na kwarcu, to zrobiłem sobie timer, który dzieli mi to przez 1875
Khaine - #elektronika #fpga #vhdl

Chcę sobie otworzyć komunikację (na razie ultra ...

źródło: comment_l4M26OXImR0wH70eAO4GDziBrxQe8h6V.jpg

Pobierz
Teraz jeszcze jest pytanie -> czy jak jest tam ten przetwornik RS232, to on mi usuwa bity startu i stopu, czy wywala z siebie 10 bitowe ramki? Bo teraz w sumie nie wiem też jak to potraktować. Czy ten układ komunikacyjny musi mi tylko sekwencyjnie przetwarzać sygnał seryjny na wektor, czy jeszcze bity stopu i startu wywalać?
@oldwizzy: Nay, ten sterownik jest też zaimplementowany w VHDLu (a LCD ma jakieś swoje coś jeszcze). W każdym razie nie zmieniło się nic poza tym, że delay półsekundowy od zapełnienia rejestru indeksowego sprawił, że nagle dolna linijka stała się widoczna. Być może za duże taktowanie? No ale jego oscylator ma rzekomo 250 kHz a ja mam udupione takty do 210 kHZ mniej więcej (27 MHz/128). W sumie nie sprawdzałem ze zmianą