Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

jednoczesny odczyt i zapis do/z kolejki fifo w vhdl

zlootawy 10 Nov 2007 11:55 7213 57
  • Helpful post
    #31
    J.A
    Level 28  
    pndemon wrote:
    czy nie jest tak że poprawia on sygnał i redukuje ewentualne przesunięcia?

    niestety nie wiem, tez slyszalem taka opinie, ze pll poprawia jakosc
    zegara zewnetrznego, z drugiej strony czytajac u xilinxa opis modulu
    DCM przy okazji tego watku, znalazlem tam analize wahania fazy clock
    w przypadku polaczenia kilku DCM w kaskadzie, z czego by wynikalo,
    ze jednak pll sama wnosi swoj jitter;
    i jeszcze - ja nie mam nic przeciwko uzywaniu pll, sam mam zawsze
    w swoich projektach przynajmniej jedna, chcialem jedynie zwrocic
    uwage na ewentualne efekty uboczne;

    J.A
  • #32
    zlootawy
    Level 10  
    J.A wrote:

    tak, w rzeczywistym ukladzie pll potrzebuje okreslonego czasu,
    by zaczac generowac zegar, zdziwiony jestem tym, ze na symulatorze
    ten czas to jedynie 2ns, [mialo byc 20 000ps ?] zwykle w specyfikacji
    jest mowa o kilkuset cyklach zegarowych nim pll zaczyna pracowac zgodnie
    z ustawionymi parametrami;

    J.A



    hmmm... no to troche mnie to zmartwilo...ale generalnie rzecz biorac to moze nie jest tak zle... zaprogramowuje fpga i od tego momentu juz czas startuje... wiec jesli uklad nie zaczyna pracy od razu.. tylko czeka na zewnetrzny trigger ktory nadejdzie po kilkuset taktach zegara, to nic zlego nie powinno sie wydarzyc.. dcm zdazy sie wyrobic.. a potem juz jest dobrze az do ponownego zaprogramowania fpga

    zlootawy
  • Helpful post
    #33
    J.A
    Level 28  
    zlootawy wrote:
    hmmm... no to troche mnie to zmartwilo...


    znalazlem taki tekst w user manual virtex5:

    The LOCKED output indicates whether the DCM clock outputs are valid, i.e.,
    the outputs exhibit the proper frequency and phase.
    After a reset, the DCM samples several thousand clock cycles
    to achieve lock. After the DCM achieves lock, the LOCKED signal
    is asserted High.
    The DCM timing parameters section of the Virtex-5 Data Sheet provides
    estimates for locking times.

    zwracam uwage zwlaszcza na: 'several thousand';
    ten sygnal "LOCKED" mozesz uzyc jako wskaznik, ze uklad jest
    gotowy do pracy, cos w rodzaju - "ok, bierzemy sie do roboty" :)

    ==============
    wlasnie zauwazylem, ze firefox zawija poprawnie tekst
    w innych watkach, tylko w tym nie ...
    dziwne

    J.A
  • #34
    zlootawy
    Level 10  
    ide jak burza i posuwam sie caly czas do przodu, dzieki Poradom z forum Elektrody :-)

    Obecnie zatrzymalem sie na autoinkrementacji adresu, tzn. mam maszyne stanow w stylu:

    IDLE
    ADRES
    ZAPIS.

    ktora startuje ilekroc fifo nie jest puste. W pierwszym przejsciu adresem jest to co podal uzytkownik na porcie wejsciowym. Ale przy kazdym kolejnym wywolaniu adres ma sie sam zwiekszac o stala wartosc.

    To co mi przychodzi na mysl, to stworzyc licznik, ktory zwieksza sie o jeden przy kazdym wejsciu do stanu ADRES.

    I gdy ta wartosc jest rowna 1 wtedy REG_ADDR <= P_I_ADDR; a pozniej REG_ADDR <= REG_ADDR + wartosc;


    Ale jakos nie mam sympatii do takich rozwiazan, sprawdzania kazdorazowo wartosci licznika itd...

    Moze ktos ma jakis genialny w swej protocie pomysl?


    Dzieki
    zlootawy
  • Helpful post
    #35
    pndemon
    Level 19  
    ja w takich wypadkach robię w stanie ADRES jakiś sygnał CE dla licznika, jak wchodzę do stanu ADRES to ustawiam go na 1, dla pozostałych stanów jest 0, wtedy jak automat będzie schodził ze stanu ADRES to nastąpi inkrementacja licznika, oczywiście możesz w automacie stanu ograniczyć że gdy P_I_ADDR = 1 to CE = 0, wtedy co prawda nie będziesz mógł dekodować wyjść na podstawie sygnału next_state, ale i tak przypuszczam, że tego nie robisz :)
  • #36
    zlootawy
    Level 10  
    pndemon wrote:
    ja w takich wypadkach robię w stanie ADRES jakiś sygnał CE dla licznika, jak wchodzę do stanu ADRES to ustawiam go na 1, dla pozostałych stanów jest 0, wtedy jak automat będzie schodził ze stanu ADRES to nastąpi inkrementacja licznika, oczywiście możesz w automacie stanu ograniczyć że gdy P_I_ADDR = 1 to CE = 0, wtedy co prawda nie będziesz mógł dekodować wyjść na podstawie sygnału next_state, ale i tak przypuszczam, że tego nie robisz :)



    ale sprawdzania licznika sie nie uniknie, tzn. jesli licznik = 1 to adres z portu, w przeciwnym razie adres powiekszam o 4.

    czyli przypisanie z portu i inkrementacja musi byc w jednym procesie.
  • Helpful post
    #37
    pndemon
    Level 19  
    Code:
    if rising_edge(clk) then
    
      if rst <= '1' then
        cnt <= (others => '0');
      elsif ce = '1' then
        if load = '1' then
          cnt <= addr;
        else
          cnt <= cnt + '1';
        end if;
      end if;
    end if;


    w maszynie stanu w stanie ADRES
    Code:
     if cnt = "000" then
    
      ce <= '1';
      load <= '1';
    else
      ce <= '0';
      load <= '0';
    end if;



    chodzi o coś takiego?
  • Helpful post
    #38
    J.A
    Level 28  
    zlootawy wrote:
    Moze ktos ma jakis /.../ pomysl?

    nie dam glowy, ze wiem, o co ci chodzi ...
    ale jesli domyslam sie prawidlowo, moglbys to zrobic
    mniej wiecej tak:
    zmien FSM z IDLE->ADRES->ZAPIS->IDLE na
    IDLE_1->ADRES_1->ZAPIS_1->IDLE->ADRES->ZAPIS->IDLE
    a dalej chyba jasne ?
    nie wiem, czy to bedzie efektywniejsze z punktu widzenia
    wygenerowanego hardware, ale unikniesz nielubianego
    sprawdzania wartosci licznika :)
    za to bedziesz mial multiplekser;

    =====================

    mala prywata, moglby ktos wyslac mi prywatna wiadomosc testowa
    oraz takiego testowego maila i powiadomic o tym w tym watku ?
    mam wrazenie, ze moja lacznosc z elektroda tymi kanalami sie urwala;

    dzieki z gory;

    J.A
  • #39
    zlootawy
    Level 10  
    J.A wrote:

    mala prywata, moglby ktos wyslac mi prywatna wiadomosc testowa
    oraz takiego testowego maila i powiadomic o tym w tym watku ?
    mam wrazenie, ze moja lacznosc z elektroda tymi kanalami sie urwala;

    dzieki z gory;

    J.A


    witam, nie bardzo rozumiem co oznacza: "wyslac mi prywatna wiadomosc testowa
    oraz takiego testowego maila"


    wyslalem wiadomosc poprzez elektrode.

    Wojtek
  • #40
    zlootawy
    Level 10  
    pndemon wrote:
    Code:
    if rising_edge(clk) then
    
      if rst <= '1' then
        cnt <= (others => '0');
      elsif ce = '1' then
        if load = '1' then
          cnt <= addr;
        else
          cnt <= cnt + '1';
        end if;
      end if;
    end if;


    w maszynie stanu w stanie ADRES
    Code:
     if cnt = "000" then
    
      ce <= '1';
      load <= '1';
    else
      ce <= '0';
      load <= '0';
    end if;



    chodzi o coś takiego?


    wyglada to fajnie.. ale do jednorazowego uzytku... cnt w pierwszym cyklu bedzie na poczatku rowne zero, ale nigdy wiecej znowu. gdzies by nalezalo to zerowac po zakonczeniu pracy...

    Dodano po 1 [godziny] 16 [minuty]:

    pomyslalem o czyms takim

    Code:
    process(SIG_NEXT_STATE,REG_CURRENT_STATE_FIFO) --proces sluzy do autoinkrementacji adresu (o cztery co cykl)
    
     begin    
     
     
     if REG_CURRENT_STATE_FIFO = fifo_idle then

                sig_addr_ce <= '1';
                sig_addr_load <= '1';
                
    else
       case SIG_NEXT_STATE is
         when mem_addr =>
             
                sig_addr_ce <= '1';
                sig_addr_load <= '0';

       
        when others=>

                sig_addr_ce <= '0';
                sig_addr_load <= '0';
       end case ;

    end if;


    end process ;




    tylko ze sa tu pomieszane dwie maszyny stanow. Jedna dotyczaca zapisywania danych zwejscia do fifo i druga przerzucajaca dane z fifo na zewnatrz fpga. czy takie cos jest w dobrym stylu?

    jedyny problem ze w momencie wejscia do stanu ADRES po raz pierwszy, uzyskuje nie P_I_ADRR ale juz powiekszony adres o stala wartosc.
  • Helpful post
    #41
    J.A
    Level 28  
    zlootawy wrote:
    tylko ze sa tu pomieszane dwie maszyny stanow. Jedna dotyczaca zapisywania
    danych z wejscia do fifo i druga przerzucajaca dane z fifo na zewnatrz fpga.
    czy takie cos jest w dobrym stylu?

    wydaje mi sie, ze nie da sie inaczej zrobic, fifo laczy ze soba
    jakby 2 rozne, nieomal niezalezne kawalki, pracujace z roznym zegarem;
    do obslugi wpisu i odczytu powinnienes miec niezalezne fsm
    kontrolowane sygnalami fifo_empty i ew. fifo_full;
    zlootawy wrote:
    jedyny problem ze w momencie wejscia do stanu ADRES po raz pierwszy,
    uzyskuje nie P_I_ADRR ale juz powiekszony adres o stala wartosc.

    jesli dobrze odczytuje znaczenie nazw sygnalow, to powinienes
    ustawiac na '1' albo 'addr_load', albo 'addr_ce' [count_enable?],
    ale nie oba na raz;

    a czemu nie tak:

    Code:

    IDLE     
        (if fifo_not_empty)     next_state: GET_ADDR
    GET_ADDR
        addr_counter <= addres_from_pins
                                next_state: WRITE
    WRITE
        { jakas akcja zapisujaca }
       if (fifo_empty)          next_state: IDLE
       else                     next_state: ADDR_INCREMENT
    ADDR_INCREMENT
       addr_counter <= addr_counter + 4
                                next_state: WRITE


    J.A
  • #42
    zlootawy
    Level 10  
    J.A wrote:

    Code:

    IDLE     
        (if fifo_not_empty)     next_state: GET_ADDR
    GET_ADDR
        addr_counter <= addres_from_pins
                                next_state: WRITE
    WRITE
        { jakas akcja zapisujaca }
       if (fifo_empty)          next_state: IDLE
       else                     next_state: ADDR_INCREMENT
    ADDR_INCREMENT
       addr_counter <= addr_counter + 4
                                next_state: WRITE


    J.A


    no wlasnie nie bardzo... poniewaz adres nie jest inkrementowany co jeden zapis przeze mnie :-) SRAM ma tryb burst. Biora w nim udzial 2 ostatnie bity adresu. Sterujac odpowiednio liniami sterujacymi adres sam sie zwieksza.. ale 2 bity starczaja tylko na 3 dodatkowe adresy liczac od adresu startowego. Wyglada to tak:

    idle
    adres
    write1
    write2
    write3
    write4

    Adres podany w stanie adres sluzy do zapisu jednego slowa w WRITE1. W kolejnych writach dziala burst. po zakonczeniu jesli ma jeszzcze slowa do zapisu, wracam do trybu idle (empty is null) i ponownie podaje adres, ale juz o 4 wiekszy niz startowy podany przez uzytkownika. no i tak to sie kreci.

    to co juz tam wymodzilem byloby chyba dobre... tylko jakas sztuczke musze zrobic zeby w trybie ADRES miec dobry adres a nie juz ten powiekszony... w sumie to komsetyka... mozna kazac uzytkownikowi podawac o 4 mniejszy :-)

    Dodano po 1 [minuty]:

    J.A wrote:


    jesli dobrze odczytuje znaczenie nazw sygnalow, to powinienes
    ustawiac na '1' albo 'addr_load', albo 'addr_ce' [count_enable?],
    ale nie oba na raz;


    J.A



    hmmm.... CE wlacza licznik, a LOAD powoduje zaladowanie wartosci startowej. w kolejnych przejsciach juz tylko CE na 1, LOAD na 0, poniewaz nie laduje wartosci, tylko inkrementuje.

    Wojtek
  • #43
    zlootawy
    Level 10  
    o tak juz jest dobrze

    Code:
    process(SIG_NEXT_STATE,SIG_NEXT_STATE_FIFO) --proces sluzy do autoinkrementacji adresu (o cztery co cykl)
    
     begin    
     
     
     if SIG_NEXT_STATE_FIFO = fifo_data_colecting then
                sig_addr_ce <= '1';
                sig_addr_load <= '1';
                
    else
       case SIG_NEXT_STATE is
         when mem_addr =>
             
                sig_addr_ce <= '1';
                sig_addr_load <= '0';

       
        when others=>

                sig_addr_ce <= '0';
                sig_addr_load <= '0';
       end case ;

    end if;
  • Helpful post
    #44
    J.A
    Level 28  
    Quote:
    o tak juz jest dobrze
    brawo;
    to z niecierpliwoscia czekamy na kolejne wiesci o dalszych postepach ;)
    JA
  • Helpful post
    #45
    pndemon
    Level 19  
    Code:
    wyglada to fajnie.. ale do jednorazowego uzytku... cnt w pierwszym cyklu bedzie na poczatku rowne zero, ale nigdy wiecej znowu. gdzies by nalezalo to zerowac po zakonczeniu pracy... 

    oczywiście, same bzdury napisałem, niestety pisałem to na kacu, teraz już wiem, że nie był to dobry pomysł, ciekawe że wtedy wydawało to się takie proste i oczywiste, mam nadzieję, że nie namąciłem za dużo :D
  • #46
    zlootawy
    Level 10  
    pndemon wrote:


    oczywiście, same bzdury napisałem, niestety pisałem to na kacu, teraz już wiem, że nie był to dobry pomysł, ciekawe że wtedy wydawało to się takie proste i oczywiste, mam nadzieję, że nie namąciłem za dużo :D



    nie no spoko.. kazda uwaga jest dla mnie cenna..

    podczas procesu implementacji mojego projektu, xilinx wyklada sie na kolejce fifo. otrzymuje komunikat:

    Quote:
    logical block 'kontroler/Inst_fifa' with type 'fifa' could
    not be resolved. A pin name misspelling can cause this, a missing edif or ngc
    file, or the misspelling of a type name. Symbol 'fifa' is not supported in
    target 'virtex2p'.



    oraz


    Quote:
    gdBuild:76 - File "C:\Documents and
    Settings\wojtek\Pulpit\Inz\Powrot_do_old_fifo/fifa.ngc" cannot be merged into
    block "kontroler/Inst_fifa" (TYPE="fifa") because one or more pins on the
    block, including pin "dout<35>", were not found in the file. Please make
    sure that all pins on the instantiated component match pins in the
    lower-level design block (irrespective of case). If there are bussed pins on
    this block, make sure that the upper-level and lower-level netlists use the
    same bus-naming convention.


    wydaje mi sie ze dobrze okreslilem typ urzadzenia... fifo pochodzi z Core Generatora... czy w zwiazku z tym cos trzeba umiescic w pliku ucf?

    Thx
    zlootawy
  • Helpful post
    #47
    J.A
    Level 28  
    Quote:
    xilinx wyklada sie na kolejce fifo

    komunikaty wskazuja, ze zrobiles balagan z pinami na poziomie,
    gdzie implementujesz fifo i w module fifo, ich [pinow] nazwy
    lub/i ilosc sie nie zgadza;
    innymi slowy - klocek o nazwie fifo nie pasuje ksztaltem do
    przygotowanej dla niego dziurki ;)

    J.A
  • #48
    zlootawy
    Level 10  
    J.A wrote:
    Quote:
    xilinx wyklada sie na kolejce fifo

    komunikaty wskazuja, ze zrobiles balagan z pinami na poziomie,
    gdzie implementujesz fifo i w module fifo, ich [pinow] nazwy
    lub/i ilosc sie nie zgadza;
    innymi slowy - klocek o nazwie fifo nie pasuje ksztaltem do
    przygotowanej dla niego dziurki ;)

    J.A



    hmmmm no i wyglada na to, ze sie zawodze na mojej fifo...

    wygenerowalem ja w CoreGeneratorem z szerokoscia szyn danych rownych 15... i nie moge w miejsce pietnastki wstawic zmiennej... tzn. moge ale jej wartosc musi byc mniejsza rowna 15.


    wiec moze wygenerowac kolejke o szerokosci slowa najwiekszej przewidywanej...

    no slabo to wyglada :(

    zlootawy
  • Helpful post
    #49
    pndemon
    Level 19  
    z tego co się orientuję, to komponenty powstałe w CoreGen są już gotową netlistą - nie podlegają syntezie, tak więc nadanie im innej szerokości spowoduje błędy, jedynym rozwiązaniem jakie przychodzi mi do głowy to skorzystanie z narzędzia do syntezy, inaczej mówiąc twoje fifo musisz opisać kodem vhdl, pozostaje mieć nadzieję, że będzie równie wydajne jak to z CoreGen
  • Helpful post
    #50
    J.A
    Level 28  
    zlootawy wrote:
    wygenerowalem ja w CoreGeneratorem z szerokoscia szyn danych rownych 15...
    i nie moge w miejsce pietnastki wstawic zmiennej... tzn. moge ale jej wartosc musi
    byc mniejsza rowna 15.

    znowu to samo ... ;)

    w quartusie da sie bez problemow, bo jego coregen generuje zwykly
    kod vhdl lub verilog;
    byc moze w ise tez sie da, o ile pamietam coregen produkuje jakis plik
    z nazwa makra i parametrami, moze tam da sie zmienic liczbe na parametr ?
    jesli nie, zawsze mozesz wygenerowac fifo 4 czy 8 bitowe i z tego
    'poskladac' fifo o potrzebnej ci szerokosci implementujac odpowiednia
    ilosc razy;
    ew. mozesz napisac swoje fifo o sparametryzowanej szerokosci,
    ale proste to nie jest;

    J.A
  • Helpful post
    #51
    pndemon
    Level 19  
    Quote:
    byc moze w ise tez sie da

    pewności nie mam, ale raczej wątpię, Xilinx ma fioła na punkcie licencji i raczej nie udostępniają swoich kodów, tylko już skompilowane moduły.
  • Helpful post
    #52
    J.A
    Level 28  
    pndemon wrote:
    /.../ komponenty powstałe w CoreGen są już gotową netlistą

    ze niby nacisniecie guzika 'finish' w coregen uruchamia synteze
    i tak wygenerowana netliste dolacza do reszty ?
    byc moze, ale byloby to strasznie glupie [dla uzytkownika] rozwiazanie;
    pndemon wrote:
    Quote:
    byc moze w ise tez sie da

    pewności nie mam, ale raczej wątpię

    moze tak, ale warto sprobowac w pliku zrobionym przez coregen
    [wlasnie doczytale, ze jest to plik *.xco]
    podmienic liczbe na parametr;
    ew. pogoglic szukajac hasla: "xilinx coregen parameter";
    albo jakos podobnie;
    J.A
  • #53
    zlootawy
    Level 10  
    J.A wrote:

    w quartusie da sie bez problemow, bo jego coregen generuje zwykly
    kod vhdl lub verilog;



    hmm... to moze zainstalowac quartusa i przerzucic kod vhdla :)




    J.A wrote:

    byc moze w ise tez sie da, o ile pamietam coregen produkuje jakis plik
    z nazwa makra i parametrami, moze tam da sie zmienic liczbe na parametr ?
    jesli nie, zawsze mozesz wygenerowac fifo 4 czy 8 bitowe i z tego
    'poskladac' fifo o potrzebnej ci szerokosci implementujac odpowiednia
    ilosc razy;
    ew. mozesz napisac swoje fifo o sparametryzowanej szerokosci,
    ale proste to nie jest;

    J.A



    generalnie jest troche dziwnie... wygenerowalem w CG fifo z szerokoscia slowa 128 bitow.

    wsrod atrybutow jest miedzy innymi c_din_width =>128, i tutaj moge podac zmienna <= 128 i chyba jest poprawnie..

    ale niezbyt mi sie to podoba...

    a wygenerowanie fifo o szerokosci slowa 1 bit? mozna tak? i np. 128 razy powtorzyc to... adres ten sam.. zegar tez.. tylko czy nie pojawia sie nowe problemy, np. opoznienie w docieraniu sugnalow do niektorych wygenerowanych fifo.. tzn. chodzi mi o to czy mozna zaufac ze taka ukladanka ze 128 czesci bedzie dzialac tak samo sprawnie jak jeden 128 bitowy. troche namotalem.

    Dodano po 19 [minuty]:

    J.A wrote:

    ze niby nacisniecie guzika 'finish' w coregen uruchamia synteze
    i tak wygenerowana netliste dolacza do reszty ?
    J.A


    tak... po klinieciu "Fnish" CG kilka ladnych minut tworzy element... gdyby robil sam vhd zrobilby to momentalnie... tak mysle.

    J.A wrote:

    moze tak, ale warto sprobowac w pliku zrobionym przez coregen
    [wlasnie doczytale, ze jest to plik *.xco]
    podmienic liczbe na parametr;

    J.A


    chyba jednak takie cos przyblokowali... z xco generalnie nic nie mozna zrobic.. po klikniecu w niego uruchamia sie CG. Mozna podejrzec kod vhd ale w postaci nic nie mowiacej... troche parametrow, takze te z szerokoscia szyny, ale ustawienie wartosci wiekszej niz przy generacji skutkuje bledem jak kilka postow wyzej zamiescilem.

    ja generalnie do projektu dolaczam taki nic niemowiacy vhd niz xco... to chyba nie ma znaczenia z ktorej opcji skorzystam.

    hmmm... moze cos robie zle.. w podgladzie graficznym elementow skrzyneczka FIFO ma ciagle napisane na rysunku ze ma szerokosc 15..0..
  • Helpful post
    #54
    pndemon
    Level 19  
    J.A wrote:
    ze niby nacisniecie guzika 'finish' w coregen uruchamia synteze
    i tak wygenerowana netliste dolacza do reszty ?

    nie wiem co się tam dzieje, ale podczas syntezy projektu z dołączonymi elementami CoreGen, są one traktowane jako "blackbox" i całkowicie ignorowane przez syntezer, jedynie wielkości portów są sprawdzane.

    zlootawy wrote:
    a wygenerowanie fifo o szerokosci slowa 1 bit? mozna tak? i np. 128 razy powtorzyc to... adres ten sam.. zegar tez..

    fifo jest generowane w oparciu o BlockRAM (chyba, że wybrałeś inaczej), stąd nie wiem czy sklejanie jakiegoś większego z kilku mniejszych będzie mieć ręce i nogi, trzeba by zobaczyć co powstanie z tego po syntezie, na pewno BlockRAM może pracować tylko z szerokościami 2^n
  • Helpful post
    #55
    J.A
    Level 28  
    zlootawy wrote:
    to moze zainstalowac quartusa i przerzucic kod vhdl

    jasne ;), bede ci mogl nawet poradzic ktory quzik nacisnac;

    zlootawy wrote:
    a wygenerowanie fifo o szerokosci slowa 1 bit? mozna tak?
    i np. 128 razy powtorzyc to


    masz czas i ochote, mozesz poeksperymentowac;
    zrob top level ktory implementuje fifo o szerokosci 16 bitow,
    skompiluj i zapisz takie dane jak: uzycie logiki, blokow pamieci, Fmax;
    potem to samo, ale z implementacja 16 razy fifo o szerokosci
    1 bit, porownaj liczby;
    byc moze kompilator jest na tyle 'domyslny', ze bedzie umial
    polaczyc jednobitowe moduly w szersze;
    a jesli nie, moze roznica w Fmax bedzie na tyle mala, ze nieistotna;

    wygeneruj fifo o szerokosci 128 bitow i zrob w top level implementacje,
    ktora polaczy tylko 8 bitow wejsciowych i 8 wyjsciowych;
    skompiluj i porownaj zuzycie zasobow z projektem, w ktorym top level korzysta
    ze wszystkich 128 bitow;
    moze kompilator jest na tyle cwany, ze usunie logike nigdzie nie polaczona;

    fifo 1 bitowe w przypadku xilinxa ma sens, bo te kosci i software
    potrafia wykorzystywac look-up table, normalnie sluzace jako
    generatory funkcji logicznych, jako regularna pamiec
    [czego nie potrafi altera, zeby nie bylo, ze zawsze chwale altere]

    J.A
  • #56
    zlootawy
    Level 10  
    pndemon wrote:
    pewno BlockRAM może pracować tylko z szerokościami 2^n


    hmmm... jak to?
    w kreatorze moge wybrac dowolna szerokosc z zakresu od 1 do 256....

    spotkalem sie takze z taka opinia:

    Code:
    A large asynchronous FIFO will always most efficiently be implemented
    
    in a dual-ported BlockRAM, and have a width of 1, 2, 4, 9, 18, or 36
    bits. If you need a different width, just pad it to the higher value.



    i badz tu madry...

    zlootawy
  • Helpful post
    #57
    J.A
    Level 28  
    zlootawy wrote:
    pndemon wrote:
    BlockRAM może pracować tylko z szerokościami 2^n
    hmmm... jak to?

    mozesz zrobic fifo/ram o szerokosci 3, tyle ze faktycznie zuzyjesz
    modul pamieci o szerokosci 4, to mial, jak sadze, pndemon na mysli;

    JA
  • #58
    zlootawy
    Level 10  
    Code:
    Number of Slices containing only related logic:
    

    USED: 126
    AVAILABLE: 126
    UTILIZATION 100%


    Czy taka informacja w Summary nie powinna niepokoic? Doszedlem do jakiegos progu?