Nie wiem czy popularniejszy w Polsce Xilinx robi tą samą technologię, ale hipy Altery których używam, ładowane są przy każdym starcie zasilania z pamięci EPROM/FLASH... Jeśli są tutaj użytkownicy układów FPGA wykonanych w tej technologii to mam do Was pytanie o próbę wyjaśnienia następującego zjawiska:
Zrobiliśmy dwie płyty prototypowe z kością altery Cyclone C6. Kości normalnie ładują swoją konfigurację z szeregowego flasha. Obie płyty były zaprogramowane taką samą zawartością: był tam interfejs do zewnętrznej kostki procka motoroli, kilka UARTów, interfejs do pamięci sram i flash dla programu itp... standard.
Płyta była zaprogramowana tak, że nie miała aplikacji w pamięci. Miała tylko bootloader który miał za zadanie załadować aplikację do pamięci sram (podtrzymywaną bateryjnie) i skoczyć do załadowanego kodu po wykryciu dłuższej przerwy między znakami (około 3,5sekund). Obie płyty działały elegancko przez chyba tydzień... Pewnego dnia, mój kolega softwareowiec, który bawił się jedną z tych płyt zgłosił mi problem, że płyta nie działa. Że przedwcześnie zakończa ładowanie aplikacji (500kb ładowane 38400 baud). Ponieważ druga płyta działała w porządku, podejrzewałem uszkodzenie elektroniczne - mysłałem, że jakiś Maxim poszedł się kochać itp. Nie. Elektronika jest w porządku. Wygląda to na to, że UART wewnątrz FPGA się zacina po kilkunastu sekundach pracy i procek z programem bootloadera nie widzi w pewnym momecie znaków, więc przystępuje do uruchamienia w połowie ściągniętej aplikacji... Próbowałem zaprogramować FPGA jeszcze raz, tym razem "na miękko", czyli tylko przez JTAGa, nie zamazując tej podejrzanej zawartości flasha, ale wszystko działa poprawnie za kazdym razem...
I teraz mam do Was pytanie - ki czort???!!! Jaki może być powód dla którego płyta zmieniła swoją funkcjonalność po jakimś czasie? Rozumiem, gdyby coś działało niestabilnie - sam napisałem ten kod UARTa dla FPGA w VHDLu, więc nie mam do niego pełnego zaufania :-) ale w końcu działał poprawnie i nagle się zepsuł? I to nie zepsuł sie tak, ze czasem działa, czasem nie - po prostu nie działa i już. Jednocześnie druga taka sama płyta działa dobrze cały czas. Jednocześnie "zła" płyta zaprogramowana przez JTAGa działa również dobrze... Nie ma możliwosci zniszczenia bootloadera ze strony kodu - bootloader jest wprogramowany wewnątrz FPGA w pamięć ROM... Co jest grane?? Ktoś ma pomysł na wyjaśnienie tego zjawiska? Sama się zawartość flasha zmieniła? Ale jak? Przecież jest chroniona cheksumą... Co jest grane?