Wpis z mikrobloga

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 fajne! Zdecydowanie potrzebne narzędzie przy testowaniu, dodatkowo pozwala wykryć pewne błędy już w działającym programie, które kompilator przepuści (co mu się dziwić).

Po modyfikacjach mój przebieg wygląda tak jak na załączonym obrazku. Bardzo zgrabnie, że tak powiem :)

Ale niestety na tym kończy się radość, bo pomimo sensownego przebiegu w symulatorze, w rzeczywistości.. Otrzymywany napis ma podwojoną pierwszą literkę, tj. "HHello darkness my old friend!".

I ni kij wiadomo dlaczego... Teraz by dopiero się przydał oscyloskop. Ktoś ma jakieś pomysły?

Kod:
UART.vhd: http://pastebin.com/bmkV2brB
TX.vhd: http://pastebin.com/v4cAs1wc

Spam @syn_admina

#visherdev przede wszystkim - zapraszam
#fpga #synteza #maximator #vhdl #altera #elektronika
Pobierz Visher - UART, ciągle UART. Przyczynę poprzedniego problemu znalazłem, zawiniło txIdl...
źródło: comment_Uttil5ouGIUCZP1dJIAxofc3OqMllhy7.jpg
  • 12
@Visher: Bez oscyloskopu zawsze zostaje SignalTap - zamiast obserwować przebiegi w symulatorze patrzysz na przebiegi w działającym układzie.

To wygląda na coś w rodzaju race condition. Bardzo dziwne, że problem dotyczył tylko drugiego znaku, skoro nie jest on traktowany w żaden sposób inaczej niż trzeci, czwarty, itd.
Z pierwszym już trochę inaczej ale i tak podejrzewam, że jest to związane z zachowaniem z przed "poprawki".

Tak daleko w FPGA nigdy nie
Błąd dotyczący Rapid Recompile nie powinien być krytyczny.

Rapid Recompile is an advanced design flow in the Quartus II software that instructs the compiler to reuse the results from a previous compilation to reduce compilation time.


A "instance not found" wygląda tak jakbyś próbował uruchomić SignalTap bez zsyntetyzowania jego funkcjonalności w hardware. (signaltap potrzebuje trochę LE dla siebie). Spróbuj to odpalić według jakiegoś tutoriala.
@olewales: no bo taki błąd robiłem, że po skonfigurowaniu tego SignalTapa nie kompilowało mi się od nowa z jego wgranymi blokami. Dopilnowałem tej kompilacji, wgrałem z nim i poszło. Teraz ogarniam to tak, żeby wyciągnąć z tego dane..
@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,