CY7C68013 i FPGA

Witam,

chcialbym podlaczyc interfejs USB2.0 CY7C68013 (dalej skrotowo zwany CY) do FPGA Cyclone. Bedzie on mial dwa zadania do zrobienia:

a) bootowanie FPGA w trybie passive serial; b) pelnienie roli sprzegu z komputerem.

Ad a: obraz konfiguracyjny dla FPGA bedzie pochodzil z 16-megabitowej pamieci DataFlash Atmela (ile razy mozna ja zapisywac?) lub zostanie pobrany przez USB. Czy moge podlaczyc pin nSTATUS w FPGA do pinu RESET w CY, by podczas bledu w konfiguracji FPGA automatycznie zresetowalo mi CY? Po drugie: prawdziwa zawartsc pamieci CY tez zostanie pobrana z DataFlash, potrzeba wiec tylko malego EEPROMu z bootloaderem. Czy pamiec 24LC04 moze zostac uzyta do tego celu? Niestety PDF nic o niej nie wspomina, "przeskakujac" rozmiary posrednie pamieci 24xx, a ja akurat mam 04.

Ad b: informacja ma plynac w obu kierunkach. Jesli FPGA ma cos do wyslania, to zapisuje dane do FIFO w CY. Jezeli CY cos odbierze, to ma o tym powiadomic FPGA, ktora nastepnie przeniesie dane do SDRAMu. W jakim trybie pracy CY najlepiej zrealizowac polaczenie: master synchroniczny, slave synchroniczny, czy slave asynchroniczny? Moge wygenerowac w FPGA zegar 32,5MHz dla IFCLOCK CY, o ile jest taka potrzeba, ale troche szkoda mi PLLa. Z kolei uzycie zegara 30MHz generowanego przez CY moze spowodowac pewne problemy z synchronizacja w FPGA, chyba, ze uzyje wewnetrznego RAMu M4K na FIFO do dosynchronizowania transferu. Czy ktos ma moze jakis sprawdzony przyklad podlaczenia CY do FPGA, bym nie musial ponownie odkrywac kola?

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski
Loading thread data ...
Reply to
Piotr Wyderski

Ale wtedy bedzie dawac 'w kolko' ten nConfig - nie bedzie przeszkadzac od strony usb?

Jak sie zawiesi, to sie nie zresetuje samo.

Jak zwykle - najciezszy temat se wybrales... resety, zwisy i jak calosc ma wtedy dzialac. Ja bym sie nie przejmowal. Powiem inaczej - jak mi by sie zawiesila FPGA (w sensie samoczynnej zmiany konfiguracji) to 3/4 elektroniki poszloby z dymem.

Ani lepiej ani gorzej. Jak sie ma wiecej niz jedna domene, to po prostu trza uprawiac tworczosc na trzezwo.... znaczy w takim przypadku ja preferuje po piffku. Generalnie jak jest >1 domena to trza czesc zasobow stracic na FIFO (IMHO jedyny pewny sposob pogodzenia dwoch czestotliwosci).

Pewnie malo kto zwrocil uwage - ale jak masz kilka zegarow i zadania podzielone miedzy zegary, to tak naprawde zyskujesz na Fmax ktora jest pokazywana przez Q2. Czemu? Bo dany net zegarowy jest mniejszy i ma mniejsze opoznienia/przesuniecia.

Reply to
jerry1111

Dopoki sie FPGA nie skonfiguruje, to zadne polaczenie USB nie zostanie nawiazane, wiec przeszkadzac nie bedzie. Ale to nie moj pomysl, w Cyclone Handbook jest napisane, ze po wystapieniu bledu urzadznie konfugurujace powinno zostac zresetowane. Wiem oczywiscie, ze ten reset niekoniecznie nalezy traktowac doslownie, ale podpiecie nCONFIG do RESET brzmi dosc ciekawie. Powazniejszym powodem jest jednak ograniczona liczba pinow w CY -- zabraklo mi dokladnie jednego, a chcialbym na nim zrobic migacz, ktory za pomoca odpowiedniej sekwencji blyskow sygnalizowalby roznego rodzaju awarie urzadzenia. Reszta pinow ma sluzyc do zaprogramowania FPGA. Dziala to w sposob nastepujacy:

Do MCU i FPGA jest _jednoczesnie_ podlaczona pamiec szeregowa DataFlash 16Mbitow SPI:

DF.SO => FPGA.DATA, CY.PORT1 DF.SI => FPGA.ASDI, CY.PORT2 DF.SCLK => FPGA.DCLK, CY.PORT3 DF.CE => FPGA.jakis_pin, CY.PORT4 FPGA.nCONFIG => CY.PORT5 FPGA.nSTATUS => CY.PORT6 FPGA.nCE => CY.PORT7 FPGA.CONF_DONE => CY.PORT8

  1. CY ustawia FPGA.nCE na 1 i laduje sobie potrzebne dane z flashu. Sygnaly pojawiaja sie tez na DATA i DCLK FPGA, ale poniewaz nCE=1, to FPGA je olewa.
  2. CY wysyla do flashu komende "continuous array access mode" i ustawia SCLK na 0, co wyprowadza pierwszy bit danych z flashu.
  3. CY ustawia FPGA.nCE na 0 i zaczyna machac linia SCLK, wpompowujac obraz konfiguracyjny do FPGA. Autoinkrementacja wskaznika we flashu zapewnia ciagly wyplyw danych z pamieci. Sztuczka: dane z flashu wychodza podczas zbocza opadajacego, a do FPGA wchodza podczas narastajacego na linii SCLK, wiec szyna SO=>DATA ma cala polowe okresu taktowania SCLK na ustabilizowanie, a wiec nie ma hazardow i wyscigow.
  4. Po wytaktowaniu odpowiedniej liczby bitow, albo otrzymania informacji o bledzie konfiguracji FPGA CY sprawdza, czy proces przebigl pomyslnie. Jesli nie, to probuje kilkukrotnie przekonfigurowac FPGA. W razie niepowodzenia poddaje sie i zglasza blad.
  5. Jesli sie udalo, to CY odlacza sie od szyn SI, SO i SCLK, a kontrole nad flashem przejmuje FPGA. Od teraz linie DATA, ASDI, DCLK oraz jakis_pin sluza do komunikacji z flashem.

Troche to pokrecone, ale zaleta jest taka, ze 16Mb EPCS16 kosztuje

78 zl., a DataFlash o takiej samej pojemnosci zaledwie 19, a gdzies programy dla NIOSa, wspolczynniki dla filtrow, bitmapki i byc moze kilka alternatywnych obrazow konfiguracyjnych FPGA musze trzymac.

:o)

Wolnych RAMow mam jeszcze 18, a te czestotliwosci nie sa tak do konca rozne (za wyjatkiem taktowania TDMA), bo wytwarza je jeden PLL. Ale przypomniales mi pytanie. Mam bazowy zegar clock_1x oraz zrobiony z niego na PLLu clock_2x, o dwukrotnie wiekszej czestotliwosci. Jest pewien szybki potokowy uklad liczacy, ktory jest taktowany clock_2x. Ma on dwa wejscia, A i B. W taktach nieparzystych bierze dane przez multiplekser z A, a w parzystych w B. Jak to najlepiej zapisac? Mozna dac prosty licznik mod 2 sterujacy multiplekserem, ale myslalem o wykorzystaniu do tego celu sygnalu clock_1x, clock_2x przesuwajac w fazie o 1/2 jego okresu wzgledem clock_1x, by w chwili rising_edge(clock_2x) jego wartosc byla juz ustalona. Wolno tak zrobic?

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski

"Piotr Wyderski"

wolno; jedyne ograniczenie prawdopodobnie jest takie, ze clock_1x nie moze byc wyjsciem z PLL; w Stratix PLL moze sterowac jedynie port CLOCK przerzutnikow, pamieci lub pin I/O; podejrzewam, ze Cyclone ma w tym punkcie podobna architekture;

J.A

Reply to
JA

Tutaj uwazaj - ja nie konfigurowalem Cyclonow inaczej niz poprzez EPCS (automagicznie). Cos tam z tymi konfiguracjami jest, ze potrzebuja iles bitow na poczatku oraz iles bitow na koncu obrazu :-( Moze dla Ciebie bezpieczniej jest wsadzic zwykly Flash rownolegly

8/16bitow i tak konfigurowac ustrojstwa? Interfejsik flash-altera zapewni Ci epm3064 kosztujace circa $1.

Tym bardziej stawialbym na rownolegly zwykly flash.

Niby wolno (w sensie ze sie skompiluje) ale cholera wie czy to bedzie poprawnie (znaczy tak jak Ty chcesz) dzialac. Ja bym byl mocno ostrozny przy tak synchronizowanych zegarach... Spytaj sie lepiej kogos bardziej doswiadczonego (bo ja wszystkie miedzyzegarowe synchronizacje robilem przez FIFO z lenistwa)

- albo sprawdz czy to bedzie dzialac (moze sie da w symulatorze).

Reply to
jerry1111

A to jest maly problem, moge je dorzucic -- przeciez wtaktowaniem danych do FPGA i tak zajmuje sie MCU.

No to pewnie w detalu 20$, wiec bedzie to zamiana siekierki na kijek, do tego bede musial sie nauczyc CPLD, ktorych wczesniej nie stosowalem (tylko male GALe). Troche szkoda, bo mam flasze

16Mbit rownolegle w szufladzie...

Dlaczego, bo kompletnie nie rozumiem jakie to ma zalety?

Ostrozny rowniez bede, tylko chcialbym sie dowiedziec, czy to w ogole ma szanse zadzialac. Szczegolnie, ze takich mostkow synchronicznych ja chce miec co najmniej kilka. A opowiesci Quartusa traktuje z przymruzeniem oka, bo opowiada bajki, m.in., ze uklad, ktory obawialem sie, czy pojdzie na 65MHz po przepisaniu do postaci potokowej wedlug niego ma fmax. 373MHz. O Czerwonym Kapturku jeszcze nie opowiadal...

comp.arch.fpga? Tam Xilinxowcy siedza. :-(

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski

Nie jest, to jest wejscie z zewnetrznego generatora, podlaczone bezposrednio do jednej z globalnych sieci zegarowych.

No to jeszcze mam jedno pytanie: sygnal wychodzi z podukladu pracujacego na 130MHz (clock_2x), jest zatrzaskiwany w buforze pracujacym na 65MHz (clock_1x), przechodzi przez kaskade filtrow calkujaco

-rozniczkujacych, tez na clock_1x i trafia do decymatora o _zmiennym_ stopniu decymacji. No i teraz probki wychodza z niego z czestotliwoscia clock_1x/N (co N-ty impuls clock_1x), po czym trafiaja do "DSP" osadzonego w FPGA. Czy strobowanie takim podzielonym przez licznik zbudowany z LE sygnalem nie bedzie dla FPGA problemem, tj. czy nie wprowadzi jakichs gigantycznych opoznien do ukladu? Jezeli probki trafialyby do FIFO, to jeszcze niewielki problem, ale prawdopodobnie za tym decymatorem bedzie jeszcze drugi blok decymujaco-filtrujacy o stopniu M i to jego trzeba bedzie taktowac sygnalem clock_1x/N. W druga strone (tzn. DSP => blok interpolujaco-filtrujacy) nie przewiduje problemow, bo to bedzie dzialalo podobnie jak wspomniane wczesniej mostki synchroniczne.

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski

"Piotr Wyderski":

tak tez zrozumialem Twoj opis; napisalem o tym ograniczeniu architektonicznym, bo zwykle praktyka jest taka, ze zewnetrzny zegar wchodzi na PLL, ktory produkuje wszystkie syg. zegarowe uzywane w logice, nawet jesli to jest 1x; latwiej kontrolowac przesuniecia fazowe;

nawiasem mowiac Altera w swym IP DDR-RAM controller wlasnie tak przelacza mux danych, sygnalem zegarowym; co by bylo smiesznej, data strobe DQS zrobiony jest tak, ze wejscia mux. przypiete sa na stale - jedno do LOW, drugie do HIGH, a system clock to mux przelacza :)

ten uklad 130Mhz produkuje dane co drugi clock ? czy masz 2 zestawy bufora 65MHz, pracujacych na przeciwnych zboczach ? bo inaczej nie rozumiem idei;

moim zdaniem nie, czemu mialoby to wprowadzac gigantyczne opoznienia ? quartus widzac, ze port Q jakiegos Flip-Flopa jest zegarem dla jakiejs czesci logiki, automatycznie nada mu atrybut 'clock' i przypnie do sieci zegarowej, o ile taka siec bedzie jeszcze wolna; inna sprawa, za ja uzylbym prawdopodobnie licznika do produkcji sygnalu 'write_enable', czy 'data_valid', a clock bylby clock'iem; moze nie bardzo rozumiem, co tam majstrujesz, ale ja bym to, w generalnym zarysie, zrobil tak: JESLI caly cykl przetwarzania danych zajmuje N cykli zegara JESLI poszczegolne bloki maja staly czas przetwarzania to zrobilbym licznik modulo N, wszystko pedzil jednym zegarem, a komparatory z tego licznika mod.N produkowalyby sygnaly 'Mod_X_data_valid';

oczywiscie sposob synchronizacji blokow pracujacych z rozna predkoscia zalezy od projektu, to powyzej wcale nie musi byc dobrym rozwiazaniem;

co to jest 'decymator', i to o '_zmiennym_' stopniu decymacji' ?

JA

Reply to
JA

"Piotr Wyderski":

[...]

szczerze mowiac nie wierze, ze quartus opowiada bajki, raczej jest pesymistyczny w szacowaniu fmax;

nacisnales ikonke z zegarkiem i pojawilo sie okno z czyms przypominajacym predkosciomierz w aucie ? na gorze tego okna jest pole z nazwa sygnalu, ktorego dotyczy wartosc na 'predkosciomierzu', upewnij sie, ze jest tam clock o ktory Ci chodzi ;)

J.A

Reply to
JA

Nie, uklad 130MHz pobiera dane i zwraca wynik w kazdym clocku. To jest jeden wielki uklad przetwarzania potokowego. Dane naplywaja z dwoch zrodel, ale za to z czestotliwoscia

65MHz. Dlatego chce je po kolei wrzucac do tego rotatora

-- co druga probka ze zrodla A, co druga ze zrodla B. Wyjscie ukladu tez ma byc demultipleksowane i zwracac wyniki naprzemiennie do kanalu A' i B'. dzieki temu zaoszczedze ponad 1000 LE, bo tyle mniej wiecej kosztowalby drugi rotator.

Ja nie wiem dlaczego i czy w ogole, chucham na zimne. ;-)

Nie wiedzialem, ze tak mozna. A takie liczniki juz sa, sluza do ustalania stopnia decymacji i interpolacji w blokach CIC.

Uklad do resamplingu strumienia danych wejsciowych metoda decymacji, czyli przepuszczania dalej co N-tej probki. Dziala tak, ze N-1 probek wyrzuca, a N-ta przepuszcza, i tak cyklicznie. Na przyklad wchodzi sygnal sprobkowany przez bardzo szybki przetwornik ADC z czestotliwoscia 65MHz, a ma wyjsc sygnal, ktory odpowiadalby sprobkowaniu na czestotliwosci 8KHz. No wiec trzeba zrobic resampling (+ roznego rodzaju filtrowanie antyaliasingowe na filtrach IIR w architekturze CIC itp.). Dane wyplywaja z decymatora N razy wolniej niz wplywaja, a poniewaz N moge sobie w duzym zakresie ustawiac, dalsze przetwarzanie wynikowego strumienia musze wyzwalac strobem z licznika decymatora, a nie wiem -- bo dopiero zaczalem z tymi ukladami zabawe -- czy FPGA dobrze znosza takie sytuacje.

Interpolator dziala odwrotnie: bierze dwie probki i wstawia miedzy nie N-1 zer, robiac resampling w kierunku wyzszych czestotliwosci. Nie ma z nim problemu dlatego, ze wyplywajace z niego dane sa dokladnie zsynchronzowane z clock_1x.

Ustalanym przeze mnie on-line (w celu cyfrowego ksztaltowania interesujacego mnie w danym momencie fragmentu widma). Stad nie moge uzyc PLL do wytworzenia sobie odpowiednio wolniejszego zegara -- beda po 4 niezalezne bloki interpolujace i decymujace. Pozniej sygnal wynikowy trafia do mieszacza kwadraturowego, a z niego juz na zewnatrz FPGA.

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski

"Piotr Wyderski":

mnie wyszlo, ze jednak tak ... :)

czyli 'po chlopsku' 130M robi na 2 bufory 65M;

zamiast chuchac mozna sprawdzic; napisz sobie kod, ktory ma dwa sumatory tych samych danych 8 bitowych, wynik jednego sumatora jest zatrzaskiwany slow_clk, ktory jest zewnetrznym zegarem, powiedzmy 30MHz, wynik drugiego zapisywany zegarem div_clk, ktory otrzymujesz dzielac przez 4 zewnetrzne 120MHz; po kompilacji klikasz na biala kartke oznaczajaca 'new file', z opcji wybierasz 'waveform editor' albo jakos podobnie, wyskakuje edytor, dwuklikasz na lewe pole, wyskakuje 'node finder' [pisze z pamieci ...] , tam w opcjach wybierasz 'all I/O' albo 'pins all', wybierasz wszystkie piny, pare razy OK i masz edytor gotowy do pracy, teraz trzeba narysowac wejscia;

- zaznaczasz slow_clk i klikasz ikonke z zegarkiem [chyba] i ustawiasz czestotliwosc,

- zaznaczasz drugi zegar i ustawiasz 4x czestotliwosc,

- zaznaczasz dane we i klik na ikonke 'C' [counter]

- save

- run symulator [jesli jest przypadkiem error: no input vektor lub podobnie, trzeba w settings odnalezc symulator i w odpowiednie pole wpisac stworzony file, przy okazji warto zahaczyc opcje 'overwrite input vector file'; jakis idiota wymyslil, ze najlepiej sie pracuje majac jedna kartke do rysowania wejsc i druga do ogladania wynikow, dopiero po protestach uzytkownikow Altera dodala opcje, ze sie i edytuje i oglada w tym samym oknie]

porownujac wyjscia sumatorow widzisz jakie opoznienie wprowadzil dzielnik czestotliwosci;

nie polecam [ale i nie zniechecam do] symulatora quartus'a do powaznej symulacji powaznego projektu, ale do szybkiego sprawdzenia koncepcji, a zwlaszcza do sprawdzenia timingu jest nieoceniony, timing jest naprawde dokladny; oczywiscie to samo mozna zrobic w Modelsim, jesli ktos woli;

nie wiem, czy akurat w tej pracy Ci sie to przyda, ale wysoce rekonfigurowalny system mozna uzyskac korzystajac z RAMu w FPGA; trzeba zadeklarowac odpowiednio duza i szeroka pamiec; [powiedzmy 16x32]; zwykly licznik z RESET jako jej adres, kazdy bit z pamieci to 'data_valid' albo inny 'control' dla innego modulu, co pozwala zaprogramowac 'sekwencje' przeplywu danych miedzy modulami, jeden z bitow zeruje licznik adresowy co pozwala ustawic dlugosc cyklu; mowiac inaczej masz do pewnego stopnia programowalna FSM; pamiec moze byc w latwy sposob ladowana on-line z zewnatrz, na przyklad przez usb czy i2c;

J.A

Reply to
JA

W detalu $1 :-) Obsluguje go Quartus - gotowe designy z bootloaderem sa gdzies na sieci - a jak nie to Ci wysle i juz.

Nie zauwazysz roznicy miedzy fpga i cpld :-)

no wlasnie!

Chcesz miec kilka roznych 'wsadow' do Cyclona. Po prostu w trakcie resetu wciskasz odpowiedni guzik (ktory np: zwiera ktorys gorny bit adresu flasha) i masz inny 'wsad'.

Zadzialac ma szanse - najwyzej bedzie wolne.

Jesli Q2 tak mowi, znaczy tak jest. Upewnij sie tylko czy sluchales 'opowiesci' o interesujacym Cie zegarze, bo AFAIR jak masz wiecej niz jeden zegar w ukladzie to Quartus nie podaje po prostu Fmax, tylko siakies opoznienia (nie pamietam, a teraz nie sprawdze).

Ano siedza, cholery...... Wiesz co - nie obawiaj sie tak Quartusa, bo ten program to bardziej niedoszacuje niz przeszacuje. Ja tam dla tego programu wierze :-)

Reply to
jerry1111

Prosba, zdradz nazwe tego detalisty, bede potrzebowal MAX3000A w najblizszym czasie.

Pozdrawiam M.S.

Reply to
M.S.

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.