Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Symulacja czasowa w Activ-HDL 7.1sp2, ISE WebPack 8.2i sp2

09 Wrz 2006 19:57 5327 18
  • Poziom 11  
    Czesc,

    Podczas symulacji czasowej sygnal wyjsciowy zamiast oczekiwanej wartosci zawsze przyjmuje XX. Wszystkie ustawienia domyslne.

    Uaktulanilem active hdl 7.1 sp2 do:
    DesignFlowUpdatefor7[1].1sp2.exe
    XilinxSchematicLibrariesISE8[1].2sp2forActive-HDL7.1(..).exe
    XilinxVHDLLibrariesISE8[1].2SP2withIPUpdate1forActiv(..).exe


    (Dla np Active-VHDL 6.3 + ise 6.1 symulacja czasowa przebiegala poprawnie.)

    Problem wystepuje nawet dla najprostszych modulow typu:
    Code:

    library IEEE;
    use IEEE.STD_LOGIC_1164.all;
    use IEEE.STD_LOGIC_UNSIGNED.all;

    entity MyTestSimple is
       port(
            CLK : in STD_LOGIC;
           in1 : in STD_LOGIC_VECTOR(7 downto 0);
           in2 : in STD_LOGIC_VECTOR(7 downto 0);
           out1 : out STD_LOGIC_VECTOR(7 downto 0)
            );
    end MyTestSimple;

    --}} End of automatically maintained section

    architecture MyTestSimple of MyTestSimple is
    begin
       process(CLK)
       begin
          if CLK'event and CLK='1' then
             -- enter your statements here --
             out1 <= in1 + in2;
          end if;
       end process;
    end MyTestSimple;
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Poziom 13  
    No u mnie w Activie 5,1 powyższy kod tez chodzi. Operator + nie jest predefiniowany do uzywania ze std_logic. Trzeba go przeciązyc czyli zdefiniowac na nowo. Byc moze w starszych wersjach to przeciązenie zrobione jest waśnie w pakiecie IEEE.STD_LOGIC_unsigned a w nowszych w IEEE.STD_LOGIC_arith . Spróbuj dodac ten pakiet, może pomoże.
  • Poziom 11  
    Dziekuje za odpowiedz, ale ....

    Generalnie mam problem z symulacja czasowa po implementacji. sygnal wyjsciowy zamiast oczekiwanej wartosci zwraca zawsze XX (Unknown).

    Dla Active-HDL 7.1 synteza i implemetacja przechodzi. Problem jest przy samej symulacji czasowej (po implementacji). Na Active-HDL 7.1 sygnal wyjsciowy zamiast oczekiwanej wartosci zwraca zawsze XX. Dla kazdego z symulowych modulow sygnaly wyjsciowe przyjmuja XX (Dla Active-HDL 7.1 ).

    W ramach ciekawostki:
    Na Active-HDL 6.3 (ISE 6.3) dla powyszy przykladu (i innych...) symulacja czasowa dziala, ale tylko dla rodziny ukladow VIRTEX. Dla pozostalych rodzin Virtex2 itd. sygnal wyjsciowy jest znowu zawsze XX.

    Podejrzewam, ze brak mi odpowiednich bibliotek, ale wydaje mi sie, ze wszytkie potrzebne patch-e itp. zainstalowalem.

    Z powazaniem
    Mariusz

    Dodano po 1 [godziny] 24 [minuty]:

    Pamietam, ze kiedys trzeba bylo robic globalny reset przed symulacja czasowa. Moze mam cos podobnego zrobic ??
  • Poziom 16  
    Czesc,

    Zakladam, ze mowiac symulacja czasowa walczysz z plikami vhd i sdf z Xilinx'a? Troche mnie zmylilo, ze robiles update do biblioteki schematowej w Activie.

    Jak startujesz symulacje timingowa to zresetuj system w symulacji.
    X'y dostaniesz na sygnalach jak ich wartosc na poczatku jest "U" to jak ruszysz z symulacja to funkcje rezolucji pozwracaja Ci X na kazdy sygnal gdzie jego wejscie ma gdzies cos innego niz 1 albo 0.
    Dla Xilinx'a, w zaleznosci od ukladu masz globalny sygnal GSR (global set reset) i to jest ich wewnetrzny reset ktory odpala sie jako pierwszy i globalnie resetuje albo ustawia wszystkie przerzutniki (to co sie dzieje zaraz po konfiguracji) a potem zwalnia reset i przelacza sie na reset uzytkownika (cokolwiek jest w Twoim design'ie). Zobacz czy czasem nie masz tutaj problemu.

    Ogolnie jak zrobisz pozadny reset to wszystkie przerzutniki powinny wystawic na swoich wyjsciach 1 albo 0 i to powinno ustabilizowac Ci symulacje. Tylko pamietaj o potrzymaniu tego resetu aktywnego przez jakis czas w zaleznosci od tego co masz w designie a potem go zwolnij.

    Jak to Ci nie pomoze, to poszukaj kto jest driver'em dla Twojego sygnalu i kto go w zasadzie ustawia na U albo X. Do tego masz komende "drivers" a za nia podaj sciezke hierarchiczna od top level do sygnalu. Kiedys dzialalo w activie klikniecie prawym klawiszem na sygnale w hierarchy browser (cokolwiek to sie teraz nazywa) copy a potem paste w konsoli. Nie wiem jak jest teraz bo dawno go nie uzywalem.

    Jak wydasz ta komende to w konsoli powinienes dostac liste driver'ow (czyli sygnalow od ktorych zalezy wartosc tego sygnalu obserwowanego). Popatrz sobie ktory z nich walczy z U albo X i cofaj sie z komenda drivers, chodzac po sygnalach az znajdziesz ten ktory jest tym pierwszym. (cofaj sie w hierarchi idac od sygnalu w gore do top level)

    Tylko nie rob tego po zainicjalizowaniu symulacji. Rusz ja az reset sie skonczy (ten ktory dodasz na samym poczatku) i pare tikow zegara pozniej.

    Daj znac jak bedziesz mial problem z tym.
    Ogolnie procedura wyglada tak:
    1. Dodaj reset i zobacz czy pomoglo.
    2. Po zainicjalizowaniu symulacji wykonaj komende "run 0" (run zero) i popatrz sobie na wejscia do FPGA czy masz odpowiednie drivery dla kazdego pinu (nie mozesz miec zadnych U albo X w tym momencie na top levelu Twojego projektu, czyli na pinach do FPGA)
    3. Uzyj komendy drivers i znajdz sygnal ktory wystawia x albo u wyzej w hierarchi i zobacz dlaczego.

    Pozdrawiam
    tony_tg
  • Poziom 11  
    Dziekuje za odpowiedz.
    Zgadza sie walcze z plikami vhd i sdf z Xilinx'a ;)

    Symulacja czasowa wykonuje dla przykladu podanego wyzej. Implementacja dla rodziny Virtex4.

    Ustawilem GSR (przez 10 taktow). Ale sytuacja sie nie poprawila

    Po kliknieciu na list drivers out1 otrzymalem
    # : Signal out1(7) = X
    # : Process out1_7_OBUF/VITALBehavior = X
    # : Signal out1(6) = X
    # : Process out1_6_OBUF/VITALBehavior = X
    # : Signal out1(5) = X
    # : Process out1_5_OBUF/VITALBehavior = X
    # : Signal out1(4) = X
    # : Process out1_4_OBUF/VITALBehavior = X
    # : Signal out1(3) = X
    # : Process out1_3_OBUF/VITALBehavior = X
    # : Signal out1(2) = X
    # : Process out1_2_OBUF/VITALBehavior = X
    # : Signal out1(1) = X
    # : Process out1_1_OBUF/VITALBehavior = X
    # : Signal out1(0) = X
    # : Process out1_0_OBUF/VITALBehavior = X

    definicje processu VITALBehavior mozna znalesc w:
    simprim_vital.vhd
    dla architecture X_OBUF_V of X_OBUF

    trzeba jeszcze jakis reset zrobic ??
    Pozdrawiam
    Mariusz
  • Poziom 13  
    A to dopiero, dobrze sie czasem dowiedzieć czegos nowego. O plikach sdf nie miałem pojęcia.

    Do tej pory P&R w webpacku robił mi plik w vhdlu. Ten wsadzałem do activa, generowałem testbencha, nawet skrypt *.do i ... cieszyłem sie że działa ;). Tymczasem to własnie w sdf są informacje o opoznieniach.
    Myslałem, że jest tak: w pliku .vhd po translacji siedzą bramki i przerzutniki z uwzglednionymi opóźnienimi, a w pliku .vhd po rutażu dodatkowo opóznienia połączeń.

    Mam więc pytanie (bo widze ze jesteście obeznani ;)): czym sie rózni .vhd po translacji od tego po P&R.

    PS. czy sumulacja czasowa ma jakis sens? na moim starym lapie (400Mhz) taka symulacja 8ms trwa ok. 20min) Chyba lepiej to od razu wsadzić kod do sprzętu. No chyba ze ktos projektuje IP, to raczej nie ma wyjścia

    PS2. Moze wyjściem bedzie uaktualnienie projektu \Vlib\simprim plikami
    z ISE?
  • Poziom 11  
    czesc.

    \Vlib\simprim mam uaktulanione - porownywalem zawartosc katalogu ISE i active jest 1 do1.

    Symulacja czasowa oddaje (powinna), rzeczywiste zachowanie sie danej logiki w odpowiednim ukladzie. Moim zdaniem symulacja po syntezie jest to tak jakby symulacja funkcjonalna.

    Jesli programujesz logike typu "dioda ma migac". wtedy najlepiej wrzucac na uklad i jak miga jest ok :).

    Symulacja czasowa dla mnie ma sens jesli:
    - robisz cos bardziej zlozonego logicznie
    - w chwili obecnej nie masz danego ukladu
    - testy na "zywym" ukladzie sa czasochlonne- wrzucenie na uklad podlaczenie odpowiednich urzadzen, podanie danych wyjsciowych, sprawdzenie danych wyjsciowych...

    Pozdrawiam
    Mariusz
  • Poziom 16  
    Hmm, napisalem post i chyba internet mi sie rozlaczyl bo nie wiem gdzie go wyslalem wiec pisze jeszcze raz :)

    Mariusz,

    Mozesz mi podeslac vhd, sdf i testbench na priv'a. Ja rusze to na modelsim i odpisze na grupie jaka byla przyczyna tych X'ow.
    Chodzi mi o output z Xilinx'a (time_sim.vhd i time_sim.sdf jak nie zmieniales nazwy modelu). No chyba, ze juz dziala.

    Ijon_Tichy,

    W zasadzie dla FPGA sa 3 etapy na ktorych dokonuje (lub dokonywalo kiedys) symulacji.
    Idac od gory na dol jest tak:

    1. Symulacja behavioural
    Masz pomysl na uklad wiec siadasz i zaczynasz pisac. Nie interesuje Cie jak to bedzie zaimplementowane ani na czym bedziesz to odpalal. Kodujesz swoja logike na wysokim poziomie abstrakcji.
    Symulacje uzywasz do sprawdzenia czy logicznie Twoj kod robi to co powinien. Na tym etapie projektujesz logike i tylko logike. Nie interesuje cie czestoliwosc zegara ani architektura tegoz, ignorujesz wszystkie timingi bo sa nie istotne na tym etapie.
    Jedyne co sie liczy to czy logicznie Twoj design robi to co bys chcial aby robil.

    2. Symulacja post-synthesis
    Wlasnie uzyles syntezatora wiec symulujesz jego output aby zobaczyc czy czasem nie zwalil czegos i to cos co wypluj jest logicznie odpowiednikiem tego co robiles w punkcie 1.
    Roznica tutaj jest taka, ze symulujesz netliste mapowana na konkretna biblioteke vendora na dana rodzine ukladow. W netliscie uzyte sa tylko elementy biblioteczne z FPGA plus makra jakie dane narzedzie p&r rozpoznaje.
    Caly plik to po prostu podlaczone elementy z biblioteki rodziny na ktorej chcesz to odpalic. Na tym etapie nie interesuja Cie za bardzo timingi tylko to czy Twoj uklad po translacji dalej dziala tak jak chciales.
    Na tym etapie mozesz sobie popatrzec na "schemat" Twojego designu. Bedziesz mial wszystkie bramki, przerzutniki, itp. Bardzo dobra rzecz do pobawienia sie co robi syntezator jak przechodzisz synteze. Celem oczywiscie jest kodowanie w taki sposob, ze projektujac uklad dokladnie wiesz co bedziesz mial po syntezie.
    Ten etap niejako umarl smiercia naturalna. Historycznie byl potrzebny jak syntezatory byly watpliwej jakosci i trzeba bylo je sprawdzac czy aby napewno sie nie pomylili. Teraz nie ma wiekszej potrzeby, no chyba ze jestes hardcorowcem albo robisz na ASIC'i.
    Ale ma duza wartosc edukacyjna i polecam pobawic sie tym aby nauczyc sie jaka logika jest generowana dla jakiego kodu VHDL czy Verilog.
    Pewne timingi bardzo proste sa zaimplementowane na tym etapie i pojawiaja sie w symulacji. Jest ich malo i za bardzo znaczenia nie maja ale potrafia wnerwic czasami ;)


    3. Symulacja post place and route.
    Zaimplementowales swoj uklad i p&r wyplul 2 pliki. Jeden z netlista i drugi SDF z informacjami o opoznieniach. Na tym etapie netlista nie zawiera jakichkolwiek makr, tylko i wylacznie prymitywy czyli to co jest fizycznie w FPGA.
    Bibioteka prymitywow ma zaimplementowane wszystkie parametry timingowe dla nich czyli te wszystkie setup, hold, propagation delay etc. W zwiazku z tym ze uklad jest po place and route to znane sa dlugosci polaczen wewnetrznych wiec
    mozna opoznic sygnal jak on sobie przeplywa wewnatrz FPGA przez od jednego przerzutnika do drugiego przez te wszystkie switche itd. Do tego dochodza bloki IO i delay na nich czyli opoznienia na pinach FPGA.
    Bibioteka ustawia te wszystkie czasy domyslnie i jak nie zaladujesz sdf'a to symulujesz cos co nie odpowiada dokladnie temu co sie w FPGA dzieje. Dopiero SDF nadpisze wszystkie opoznienia wartosciami wynikajacymi z konkretnej realizacji twojego ukladu plus doda opoznienia na liniach.
    W tym momencie symulujesz dokladnie to co jest naprawde w srodku FPGA. w sdf'ie sa zawsze 3 wartosci opoznien min, typ, max i mozesz uzyc jakie chcesz aby np zobaczyc jak sie uklad zachowuje jak temperatura wzrosnie itd.
    Symulacja timingowa bardzo czesto jest dokumentacja twojego projektu. Inaczej mowiac, jak robisz cos dla kogos to poprosza Cie o wyniki symulacji timingowej, potem przyjza sie testbenchom i jak stwierdza, ze w zasadzie testbenche sa Ok to wyplaca Ci forke za projekt :)

    Ja osobiscie robie symulacje timingowa tylko wylacznie jak pracuje nad duzym projektem i nie moge go sprawdzic w ukladzie bo nie mam plyty gotowej. W wiekszosci przypadkow daje sie projekt podzielic na mniejsze kawalki i po jednym przetestowac na dev kitach a potem polaczyc wszystko razem jak bedzie docelowa plyta gotowa.
    No i oczywiscie uzywam tego jako dokumentacji jak juz wszystko dziala :) Z kazda symulacja jest jednak tak, ze jest tak dobra jak testbenche ktore napiszesz a, ze nie ma na to czasu wiec sprawdza sie logike w ukladach a potem bawi w pisanie ich.

    8ms w symulacji zabiera 20 minut? Ludzie maja wieksze problemy, puszczenie symulacji rownolegle na wielu komputerach zajmuje tydzien albo dwa wiec nie przejmuj sie ;)

    Pozdrawiam,
    tony_tg
  • Poziom 13  
    tony_tg,

    Bardzo fajnie to wytlumaczyles wszystkim tutaj o tych 3ech etapach symulacji:) Mnie nurtuje to, czy (abstrahujac od jakosci testbench'a) te timing rzeczywiscie zgadzaja sie z rzeczywistoscia? Jest w sumie zdumiewajace, ze istnieje takie oprogramowanie, ktore pozwala Ci wejrzec jakby w kazdy punkt tak ogromnego ukladu scalonego jakim jest FPGA. W tym momencie wydawaloby sie, ze kity do testowania tego oprogramowania bylyby niepotrzebne bo wszystko mozesz sobie przesymulowac. Wiec wlasciwie jak to jest - warto inwestowac i wydac 200$ na taka plytke czy nie? Pytam bo ciagle sie waham a jestem tylko skromnym studentem:)

    PS. Jak w Activie-HDLu po syntezie mozna zobaczyc schemat ukladu W POSTACI BRAMEK I PRZERZUTNIKOW.

    Pozdrowienia,
    genos182
  • Poziom 16  
    Genos,

    Te timingi sa tak dobre jak dobry byl inzynier piszacy biblioteke symulacyjna. Nie mniej, nie wiecej. Warto miec najnowsze biblioteki bo to tylko "software" wiec bledy sa i zawsze byly ale sa poprawiane. Cale zalozenie symulacji timingowej jest oparte na tym, ze chcesz zajrzec do srodka i przesymulowac to jak to faktycznie dziala. Oczywiscie na poziomie cyfrowym.

    Zainwestowanie w dev kit to nie jest wydanie pieniedzy bez sensu !
    Zakladajac, ze biblioteka nie ma bledow a Twoj symulator jest idealny i tez nie oszukuje Cie w symulacji to jeszcze pozostaje sprawa napisania testbencha. Jak wrzucisz cos na dev kit'a to nie tylko sprawdzasz co sie dzieje w srodku FPGA ale i jak on wspolpracuje z otoczeniem czyli z tym wszystkim co masz naokolo. Pewnie, ze sie da przesymulowac prawie wszystko ale to zabiera mase czasu i troche wiedzy jak takie systemy sumulowac (w sensie FPGA/PCB).

    Kiedys byla taka opcja w Activie, ze mozna bylo sobie otworzyc edif'a w BDE (Block Diagram Editor). Nie wiem jak to sie teraz nazywa ale mozna bylo sobie otworzyc tego edifa i podac mu biblioteke i on ladnie wyrysowal diagramy uzywajac elementow bibliotecznych. Nie mam Activa teraz wiec nie moge Ci sprawdzic tego ale wiem, ze cos takie bylo bo sam tego uzywalem. Zobacz w dokumentacji do BDE jak otwierac edif'a jako BDE.

    Pozdrawiam,
    tony_tg

    Dodano po 3 [godziny] 50 [minuty]:

    Mariusz,

    Dzieki za projekt w Activie. Popatrzylem sobie po logach co tam robisz i .... ehm, w zasadzie to nie wiem co powiedziec....

    Na poczatek musisz jakis testbench napisac albo uzyc stymulatorow w waveformie. z tego co widze po logach to skompilowales time_sim.vhd i jego zaladowales jako top level do symulacji. No i dostales X bo w zasadzie zegar nie dziala, na in1 i in2 jest U wiec na out1 jest X :)

    zapisz sobie ten kod ktory dolaczam jako tb.vhd i dolacz do projektu w activie. Skompiluj time_sim.vhd, potem tb.vhd i do symulacji zaladuj TB z tb.vhd. Sdf'a przyloz do /tb/uut/ (sdf musi byc zaladowany na odpowiedniej hierarchi a ze pojawil sie testbench to Twoja hierarchia w projekcie jest /tb/uut/ teraz. Jak to zrobisz to odpal sobie symulacje na 10 us i zobacz, ze uklad robi to co ma robic.

    Pozdrawiam,
    tony_tg

    Code:

    -- ----------------------------------------------------------------------------
    Library IEEE;
    Use     IEEE.Std_Logic_1164.All;
    -- ----------------------------------------------------------------------------

    -- ----------------------------------------------------------------------------
    Entity TB Is
    End;
    -- ----------------------------------------------------------------------------

    -- ----------------------------------------------------------------------------
    Architecture SIM Of TB Is
    -- ----------------------------------------------------------------------------

        -- ------------------------------------------------------------------------
        Component MyTestSimple Is
            Port(
                CLK  : In  Std_Logic;
                in1  : In  Std_Logic_Vector(7 Downto 0);
                in2  : In  Std_Logic_Vector(7 Downto 0);
                out1 : Out Std_Logic_Vector(7 Downto 0)
            );
        End Component;
        -- ------------------------------------------------------------------------

        -- ------------------------------------------------------------------------
        Constant cPeriod       : Time := 50 ns;
        Constant cHalfPeriod   : Time := cPeriod / 2;
        Constant cWaitSomeTime : Time := 300 ns;
       
        Constant cIn1_Value0 : Std_Logic_Vector(7 Downto 0) := x"00";
        Constant cIn2_Value0 : Std_Logic_Vector(7 Downto 0) := x"00";
        Constant cIn1_Value1 : Std_Logic_Vector(7 Downto 0) := x"DE";
        Constant cIn2_Value1 : Std_Logic_Vector(7 Downto 0) := x"AD";
        Constant cIn1_Value2 : Std_Logic_Vector(7 Downto 0) := x"BE";
        Constant cIn2_Value2 : Std_Logic_Vector(7 Downto 0) := x"EF";
        -- ------------------------------------------------------------------------

        -- ------------------------------------------------------------------------
        Signal clk  : Std_Logic;
        Signal in1  : Std_Logic_Vector(7 Downto 0);
        Signal in2  : Std_Logic_Vector(7 Downto 0);
        Signal out1 : Std_Logic_Vector(7 Downto 0);
        -- ------------------------------------------------------------------------

    -- ----------------------------------------------------------------------------
    Begin
    -- ----------------------------------------------------------------------------

        -- ------------------------------------------------------------------------
        UUT : MyTestSimple Port Map (
            CLK  => clk,
            in1  => in1,
            in2  => in2,
            out1 => out1
        );
        -- ------------------------------------------------------------------------

        -- ------------------------------------------------------------------------
        SystemClockGenerator : Process
        Begin
            clk <= '0';
            Wait For cHalfPeriod;
            clk <= '1';
            Wait For cHalfPeriod;
        End Process;
        -- ------------------------------------------------------------------------

        -- ------------------------------------------------------------------------
        InputStimulus : Process
        Begin
            in1 <= cIn1_Value0;
            in2 <= cIn2_Value0;
            Wait For cPeriod * 100 ;
            in1 <= cIn1_Value1;
            Wait For cWaitSomeTime;
            in2 <= cIn2_Value1;
            Wait For cWaitSomeTime;
            in1 <= cIn1_Value2;
            Wait For cWaitSomeTime;
            in2 <= cIn2_Value2;
            Wait;
        End Process;
        -- ------------------------------------------------------------------------

    -- ----------------------------------------------------------------------------
    End SIM;
    -- ----------------------------------------------------------------------------
  • Poziom 13  
    tony_tq

    Dzieki za wykład o przebiegu implementacji, lepszego nie widziałem w żadnej książce.

    wsadziłem sdf-a, no i pojawiły sie X
    tak wpisałem w makrze :
    asim TESTBENCH_FOR_symulacja -sdftyp -AUTO="$DSN\src\TOPsch_TIMESIM.SDF"

    bez sdf-a jest OK ;)

    To by potwierdzało ze to tylko 'software' , zreszą bardzo stary(ISE 7.1)
    a active 5.1(prehistoria), bo w sprzecie kod działa.

    Płyty ewaluacyjne to swietna rzecz, ale jeszcze lepiej zrobic sobie taką samemu , za 1/3 pieniazków( w Polsce 200$ to kupa forsy).
    BGA i cztery warstwy odpadają, ale do nauki przecież nie są potrzebne

    PS. czy uzywałeś Chip Pro Scope do debugowania? Jesli tak to jak to działa?
  • Poziom 16  
    Czesc,

    Jak uzywasz starszej wersji symulatora z nowsza wersja ISE (chodzi o to kiedy te softy na rynek weszly) to zazwyczaj jest tak, ze przekompilowane biblioteki na symulator nie beda kompilowane z wlasciwych zrodel od vendora fpga. Najlepiej jest przekompilowac je samemu. W Xilinxie sa w vhdl/src/. wez zrodla i skompiluj do biblioteki simprim i uzyj tej a nie tej ze strony producenta.

    Ja nie mam Activa i rano przekompilowalem zrodla z ISE 8.2 na modelsim bo widzialem w naglowku tego co mi Mariusz przyslal, ze takiej wersji uzywa i w modelsim bylo juz prosto. (komendy sa bardzo podobne w obu symulatorach)

    biblioteka simprim jest aktualna, swiezutko po skompilowaniu ustawiona na globalna, ze nie musze jej podawac z komendy polecen.

    vlib work
    vcom time_sim.vhd
    # -- Compiling entity mytestsimple
    # -- Compiling architecture structure of mytestsimple
    vcom tb.vhd
    # -- Compiling entity tb
    # -- Compiling architecture sim of tb
    vsim -t ps -sdftyp /tb/uut/=K:/tmp/modelsim/TIME_SIM.SDF work.tb

    # Loading Loading blah blah blah blah (laduje biblioteki i projekt i sdfa)
    # Loading K:/tmp/modelsim/TIME_SIM.SDF
    # ** Note: (vsim-3587) SDF Backannotation Successfully Completed.
    # Time: 0 ns Iteration: 0 Region: /tb File: tb.vhd

    view wave
    # tutaj dodalem sygnaly do waveforma
    run 10000 ns

    i na waveformie wszystko bez X'ow niezaleznie czy z sdf'em czy bez.
    Uklad odpowiedzial zmiana wyjscia po 7300 ps (Virtex 4) od rising_edge na zegarze.
    Bez sdf'a powinienes dostac default 100 ps opoznienia bo tyle jest default w bibliotece simprims dla FF a tylko jeden poziom przerzutnikow jest. Jak nie widzisz zadnego to znaczy ze masz simulation resolution ustawione na ns a do symulowania simprims musisz to miec ustawione na ps. Zreszta zerknij do sdf'a tam jest (TIMESCALE 1 ps).
    Ja zmienilem rozdzielczosc switchem -t ps dla komendy vsim.

    To robilem dla tego kodu w oryginalnym poscie po place and route.
    Nie mam activa ale jak ktos chce to moge to co jest w tym temacie puscic na spartana i dac plik *.do do modelsima lacznie z kompilacjami bibliotek itd. To powinno pomoc. Kiedys active rozumial pliki do z modelsima ale czy dalej rozumie to nie wiem.

    ChipScope'a i tego typu narzedzi uzywam i chwale sobie. No i dziala znakomicie ;)

    Pozdrawiam,
    tony_tg
  • Poziom 11  
    Tony,
    Dziekuje za opdowiedz - masz bardzo duza wiedze na ten temat.

    Do symulacji czasowej oczywiscie uzylem stymulatorow w waveformie. Na CLK podalem domyslny zegar (chyba 100ns). A na in1, in2 00001111.
    Pewnie tego w logach nie zapisalem, ale wymuszenie na 100% byly podawane.;) Takie same wymuszenia wczesniej podawalem do symulacji funkcjonalnej, symulacji po syntezie i dzialalo - na wyjsciu byl sygnal oczekiwany czyli 00011110;)

    Nie dokonca rozumiem:
    - dlaczego 10us trzeba puscic symucje - (5-10 taktow nie wystarczy - dla zegara 100ns wystarczy 1us)
    - "zmienilem rozdzielczosc switchem -t ps" - moze z jednostakami ma cos nie tak???
    - "7300 ps dla virtex4" - skad te czasy

    W chwili obecnej nie ma tego jak sprawdzic Twojego przykladu.
    Ale napewno go wieczorem sprawdze i odpisze co bylo nie tak.

    Jeszcze raz serdeczne dzieki. Twoja wiedza jest wielka!!!

    Pozdrawiam
    Mariusz
  • Poziom 16  
    Kurcze az nie wytrzymalem i sciagnalem sobie ewalke Activa 7.1 sp2. Zainstaluje ja sobie w domu i odpale ta prosta symulacje i zobacze co oni tam wyrabiaja w tym gui. Napisze tez krotkie how-to odnosnie uzywania narzedzi symulacji i na co trzeba zwrocic uwage jak sie zaczyna bawic w symulacje timingowa i mam nadzieje, ze temat zamkniemy i kazdy bedzie mogl sobie przeczytac to i odpalic symulacje na swoim symulatorze. A przynajmniej zaladuje mu sie symulacja poprawnie.

    Jak na razie to widze, ze duzo ludzi nie ma pojecia jak uzywac tych narzedzi. Czy to jest glowna przeszkoda, ze malo osob zabiera sie za uklady reprogramowalne?

    A jesli chodzi o activa to juz widze ze na stronie producenta, biblioteki skompilowane sa ze starych zrodel ISE. do activa 7.1 sp2 sa tylko biblioteki z ISE 8.1. czyli jak uzywasz starszego albo nowszego ise to nie masz wyboru i trzeba sobie biblioteki przekompilowac.

    Pozdrawiam,
    tony_tg
  • Poziom 13  
    Chyba faktycznie nie jest latwo sie za to (uklady programowalne) zabrac - wiem to z wlasnego doswiadczenia. Jest duzo detali, ktorych jak sie nie wie to trzeba spedzic pare dni zeby zrozumiec w czym blad.

    Apropos ladowania edifa do bde to jest cos takiego jak code2graphics conversion wizzard i mozna tam wrzucic edif'a i zrobi z tego schemat. Problem w tym jak mam tego edif'a wygenerowac bo nie widze takiej mozliwosci w opcjach do syntezy....?

    pozdrawiam,
    genos
  • Poziom 16  
    Mariusz,

    Czekam na licencje od Aldec'a bo po zainstalowaniu Activa na ewalce to moge sobie przesymulowac pare przerzutnikow przed synteza. Jest wbudowane ograniczenie, ze symulator moze zaalokowac maksymalnie 5MB na symulacje a jak sprobowalem ten przyklad to jest 5.3MB hehehe i to bez ladowania sdf'a. Cialem go do czegos mniejszego ale bez pelnej licencji na 20 dni nie moge zadnej timingowej odpalic. 5MB to za malo. Jak tylko dostane licencje to odpisze co tam zrobic. No ale moge tez nie dostac jej i wtedy nie wiem co zrobic.

    Male how-to jak podchodzic do symulacji jest prawie gotowe, ale poczekam na activa aby podac je na ten symulator i modelsima.


    Co do biblioteki simprim to ja jednak nalegalbym na przekompilowanie jej sobie za kazdym razem jak sie ise przeinstaluje. To nie jest trudne. Wystarczy w activie pojsc do forderu VLIB w jego instalacji i tam w folderze simprim otworzyc projekt activa *.adf. Kazda biblioteka to projekt w tym symulatorze i nawet dostarczyli makro do.
    Jak otworzy sie projekt simprim to polecam wymiane tego makra do z tego co przychodzi z instalacja na cos takiego:

    Code:

    set OPT -dbg
    setlibrarymode -rw simprim
    clearlibrary
    acom -work simprim $OPT -quiet $XILINX\vhdl\src\simprims\simprim_vpackage.vhd
    acom -work simprim $OPT -quiet $XILINX\vhdl\src\simprims\simprim_vcomponents.vhd
    acom -work simprim $OPT -quiet $XILINX\vhdl\src\simprims\simprim_vital.vhd
    # Tego nie chcemy a jak chcemy to juz wiemy jak uzywac smart models i poradzimy sobie
    #acom -work simprim $OPT $DSN\src\smartmodel_wrappers.vhd
    #acom -work simprim $OPT $DSN\src\simprim_smodel.vhd
    setlibrarymode -ro simprim


    Jak tylko ustawiona jest zmienna XILINX w windowsie, to makro znajdzie sobie aktualna wersje ISE i skompiluje biblioteke. W ten sposob mozna miec kilka wersji ISE i ta zmienna sobie wybierac na ktorej sie robi i tylko przekompilowywac biblioteke za kazdym razem jak sie przesiadasz z jednego ise na drugiego.

    Ta sama procedura jest dla innych vendorow jak altera itd oraz innych symulatorow jak modelsim.

    Genos,
    Jak nie mozesz znalezc jak zaladowac edif'a do activa to zaladuj vhdl'a po syntezie, tego do symulacji z unisim. uzyj code2graphics i tyle. Tylko biblioteke unisim musisz miec plus chyba schematowe. Nie znalazlem jeszcze jak zaladowac edif'a w activie ale w folderze BIN w activie to znalazlem edf2vhd.exe wiec jakos da sie to cudo zawolac a potem uzyc code2graphics. Nie mialem wystarczajaco czasu aby sie tym pobawic.

    XST pluje plikiem NGC(domyslnie) lub NGD (opcja) w nowszych ISE. Nie pamietam jak bylo kiedys ale wydawalo mi sie, ze jakos edif'a tez mozna bylo w GUI ustawic. Na razie, mozesz puscic sobie projekt w ISE do syntezy i uzyc ngc2edif.exe z folderu $XILINX/bin/nt.
    Ale ogolnie to wygeneruj sobie post-simulation vhdl i tego zaladuj do activa. Powinno byc ok. Ja zaladowalem sobie cos prostego i wyszlo calkiem niezle.

    Pozdrawiam,
    tony_tg

    PS. Trzymajcie kciuki bo jak nie bedzie licencji to nie bedzie rozwiazania oryginalnego problemu :)
    No i jeszcze jedna rzecz. Trzymajmy sie oryginalnego tematu. Jak sa pytania o XST czy cos co nie jest zwiazane z tematem to zakladajcie nowy watek. W ten sposob kiedys ludzie szukajacy odpowiedzi na forum beda mieli latwiejsze zycie szukajac odpowiedzi na swoje pytanie.
  • Poziom 16  
    Mariusz,

    Dostalem licencje na 20 dni na Activa 7.1 wiec moglem w koncu odpalic sobie ta symulacje. Zrobilem to tak:

    1. Zainstalowalem biblioteki simprim wersji ISE 8.1, nie sciagalem zadnych update'ow itd.
    2. Uzylem makra ktore masz powyzej i przekompilowalem simprim ze zrodel z ISE 8.2
    3. Zalozylem sobie nowy projekt i dodalem do niego pliki time_sim.vhd i moj tb.vhd oraz time_sim.sdf (kod zrodlowy tb.vhd masz wyzej)
    4. Kliknalem prawym klawiszem na time_sim.vhd w projekcie i wybralem Compile
    5. To samo zrobilem dla tb.vhd
    6. Rozwinalem biblioteke (ostani folder w drzewku projektu) i kliknalem prawym klawiszem na tb i wybralem "Set As Top Level".
    7. Poszedlem do menu: Design>>Settings i tam ustawilem sie na General>>Simulation>>SDF i w okienku gdzie pokazal mi sdf'a w kolumnie Load zmienilem z No na YES
    8. W menu Simulation wybralem "Initialize Simulation".
    9. Symulacja sie zainicjalizowala i otworzylem sobie waveform'a i dodalem sygnaly z TB i UUT (w design browser panel na zakladce Structure masz drzewko hierarhi i mozesz zlapac sobie cokolwiek i przeniesc do waveforma)
    10. wydalem polecenie "run 10 us" w konsoli.
    11. W waveformie nie ma zadnych X ani U na wyjsciach. Wszystko ladnie sie symuluje.


    Jeszcze raz spojrzalem na te screenshoty ktore mi przyslales dzisiaj aby potwierdzic to co znalazlem wczoraj w domu. Bawilem sie jak wystartowac symulacje aby dostac te X'y ktore Ty dostajesz i w koncu znalazlem jak.

    Po pierwsze musisz podac zly top level czyli nie zrobiles tego co opisalem w punkcie 6. Po skompilowaniu tego default top level byl nie testbench tylko design mytestsimple co jest zle (pierwszy skompilowany plik jest domyslnym top levelem chyba). Do tego jak inicjalizujesz symulacje dla tej enityt to nie ma zadnych stymulatorow z testbencha bo sie nie zaladowal. Teraz dodalem stymulatory w waveformie i faktycznie dostalem X'y.

    Zrob tak jak Ci podalem w przepisie i przestan sie bawic stymulatorami w waveformie. To cudo fakt faktem jest zaimplementowane w Activie i w ModelSim'ie ale nie jest zdefiniowane w standardzie VHDL'a wiec nie wiesz jak i kiedy sie stymulatory przykladaja z jakiegos GUI. Pozostan przy testbenchu w VHDL i wszystko bedzie dobrze. No i do tego zacznij pisac makra "do" bo przynajmniej zawsze mozna sobie popatrzec jak sie wystartowalo symulacje i co sie robilo. Jak klikasz w GUI to nigdy nie bedziesz pewien czy wszystko dobrze kliknales czy nie a potem jest jak jest.

    Daj znac czy pomoglo czy nie. Jak masz jakies pytania to wal. Jak potrzebujesz to wysle Ci na priva projekt w activie 7.1 z makrem "do" wiec zrobi Ci symulacje dokladnie tak jak to zrobil na mojej maszynie lacznie z przekompilowaniem biblioteki simprim i nie bedzie niepewnosci, ze cos nie bylo klikniete.

    Pozdrawiam,
    tony_tg


    Zapomnialem dodac o tych stymulatorach z GUI.
    Cala idea tej opcji jest taka, ze pracujesz nad swoim design'em i cos tam piszesz, i masz kawalek kodu, ktory nie wiesz czy dziala czy nie i chcialbys to szybko wiedziec a nie masz testbencha. Wtedy bierzesz sobie to cos do osobnego pliku, szybko go kompilujesz, ladujesz do symulacji i uzywasz stymulatorow w waveformie. Zauwaz, ze jak w waveformie pojdziesz do stymulatorow to w tym okienku jest zakladka Hotkeys. Mozesz sobie podpiac klawisze do sygnalow i jak robisz symulacje to puszczasz ja w krokach powiedzmy 100 ns pare razy i mozesz kliknac klawisz i on zmieni Ci stymulator na przeciwny. W ten sposob mozesz szybko bez pisania testbencha sprawdzic male cos nad czym wlasnie pracujesz. Fajna rzecz ale tylko do sprawdzania behavioural code. Jak jestes zadowolony, to wkladasz to cos do swojego projektu i przetestujesz to dokladniej z testbench'em. Testbench jest czyms w hdl'ach co ma sprawdzic Twoj uklad. Stymulatory w GUI to pomoc ale nigdy nie byly zaprojektowane do symulacji czasowej. Zauwaz tez, ze klikajac w GUI mozna sie zmeczyc i zazwyczaj bedzie trzeba zrestartowac symulacje i powtorzyc te wszystkie klikniecia. Polecam pisanie makr wlasnie dlatego bo okaze sie, ze na 3 razy 2 udalo Ci sie kliknac wszystko w odpowiedniej kolejnosci w odpowiednim czasie a raz sie nie udalo i trzeba powtarzac proces od nowa.
    Swoja droga to dodam to do tego dokumentu, ktory obiecalem.

    Pozdrawiam,
    tony_tg
  • Poziom 11  
    Tony,

    Wczesniej bardzo czesto wykorzystywalem stymulatory z GUI z poziomu waveforma (prawie zawsze :)). Klikam dodaje zegar, klikam dodaje hotkey, dodaje licznik, bardzo szybko mozna przetestowac czy wogole cos dziala itp... .

    Teraz sytuacja przedstawia sie nastepujaco.
    Symulacja czasowa -> Testbanch - Waveform
    1. Symulujac uklad z wykorzystaniem wymuszen z poziomu testbench-a wszystko dziala poprawnie.
    2. Podajac wymuszenia z poziomu waveform-a symulacja zachowuje sie dziwnie. Na wyjsciu XX - nie dziala.

    Dlaczego sie tak dzieje?? - nie rozumiem :(

    Jak juz pisalem wyzej w poscie (dla wymuszenia z poziomu waveform-a )
    Na Active-HDL 6.3 (ISE 6.3) dla powyszego przykladu (i innych...) symulacja czasowa dziala, ale tylko dla rodziny ukladow VIRTEX. Dla pozostalych rodzin np..: Virtex2 sygnal wyjsciowy jest znowu zawsze XX.

    Moim zdaniem w Active HDL jest blad.

    Napisales:
    "Stymulatory w GUI to pomoc ale nigdy nie byly zaprojektowane do symulacji czasowej."

    Moze i nie, ale dla symulacji czasowej dla Activa z poziomu Waveformie jest mozliwosc podawania wymuszen. (dawniej mi to dzialalo). Po zatym nie widze generalnie roznicy pomiedzy podawaniem wymuszen z poziomu testbanch(1) i z poziomu waveforma (2). Podaje sygnal na wejscie (1 lub 2 sposobem) i chce miec poprawna odpowiedz na wyjsciu.

    Zgadza sie, ze napisanie testbanch-a daje wieksze mozliwosci.
    Z poziom waveform - nie mam takich mozliwosci ze np po 300ns podaje 10000111, po 500 ns podaje 10011111, po 333ns 11111111. Pyzatym testując cos bardziej zlozonego "na 3 razy 2 uda sie kliknac w odpwiedniej kolejności”. Ale to, ze Stymulatory w GUI nie dzialaja to jest poprostu blad Activa. Takie jest moje prywatne zdanie.

    Szczerze mówiąc chyba nigdy nie pisalem sam od początku testbanch - tylko generowałem z waveforma
    Robie to tak:
    1. Symulacja z wykorzystaniem wymuszen z poziomu waveforma
    2. Idz do pkt.1 jeśli waveform wyglada nie poprawnie (zostal podany nie poprawny wektor wymuszen itp. )
    3. Generacja testbanch-a na podstawie Waveforma (opcja single process powoduje wygenerowanie testbanch, wlasnie tego typu, który mi przeslales)
    4. Dalsze rozszerzanie, dopisywanie wymuszen przez modyfikacje wygenerowanego testbanch-a.


    Wnioski:
    1. Nie uzywac wymuszen (stymulatorow) z poziomu waveform-a podczas symulacji czasowej. - nie dziala (na chwile obecna)
    2. Używać testbanch do symulacji czasowej – wieksze możliwości sterowania wymuszeniami - dziala

    Dziekuje bardzo za odpowiedz i za poswiecony czas.

    p.s.
    Czekam na dokument, ktory obiecales.

    Pozdrawiam
    Mariusz
  • Poziom 16  
    Mariusz,

    Zgadzam sie z Toba, ze w activie jest blad bo udostepniajac ta opcje w GUI, a w zasadzie dodajac nowa funkcjonalnosc do standardu vhdl nalezy zapewnic aby ona dzialala tak jak uzytkownik sie spodziewa.

    Natomiast, nie zgadzam sie, ze jest to blad symulacji jako takiej bo stymulator pochodzi z czegos co nie jest zdefiniowane w standardzie jezyka wiec nie wiadomo jak to ma byc w zasadzie zaimplementowane i co to cudo w zasadzie ma robic. Wszystko jest fajnie dla symulacji behavioural bo tutaj niewiele sie dzieje, ale jak zaladujesz symulacje timing, dojdzie vital i na koniec przylozysz sdf'a to rozne cuda sie w symulatorze zaczynaja dziac i to na dlugo zanim ruszysz z symulacja. Z ciekawostek to np. w zaleznosci jak posortujesz procesy w symulatorze do wykonania, mozesz otrzymac rozne wyniki symulacji (a juz w Verilogu to dopiero jest zabawa, patrz race conditions przy symulacji). Kiedy i jaki driver zadziala na sygnal tez jest wazne. A wszystko dlatego, ze hdl jako jezyk gdzie wszystko dzieje sie rownolegle, nagle jest wykonywany na maszynach sekwencyjnych. Jak robisz to z poziomu vhdl w testbenchu to jak cos sie nie symuluje poprawnie to jest to ewidentna wina jadra symulacji, koniec kropka. I tutaj producent oprogramowania musi cos z tym zrobic. Ale zauwaz, ze nazwa "TestBench" pojawia sie w standardzie jezyka i niejako sugeruje jak dokonywac symulacji, natomiast nie jest nic powiedziane o stymulatorach/driver'ach nie pochodzacych z jezyka vhdl. Jak zaczynasz sie bawic z stymulatorami to jak juz zauwazyles, w starszej wersji cos dzialalo ale nie dla wszystkich rodzin, czyli w zaleznosci jak zostal wypluty time_sim.vhd i sdf i co w nim bylo to albo zadzialalo albo nie a podejrzewam, ze zrodlem problemu bylo wlasnie to ze stymulator z GUI przylozyl sie albo za wczesnie albo za pozno albo nie w tym miejscu co trzeba i cos tam w bibliotece simprim nie tak wystartowalo.

    Powinienes sie zglosic do Aldec'a z tym i pogadac z application engineer i zobaczyc co oni powiedza na ten temat. Daj im ten przyklad i zapytaj sie dlaczego w zasadzie ten stymulator nie przypial sie tak jak powinien.

    Z drugiej strony, to moze nie byc priorytetem dla nich bo skoro nie zadzialalo dla symulacji timingowej to widocznie malo ludzi uzywa tych stymulatorow w symulacji timing i nikt nie zglasza problemow z nimi wiec nikt nic nie poprawia w nich. Zakladam, ze jakby znalazlo sie wiecej klientow narzekajacych na ten problem to bylby juz dawno rozwiazany.

    Wnioski:
    1. Bug w activie jest.
    2. Malo albo nikt z ludzi uzywajacych activa, uzywa stymulatorow do symulacji czasowej.

    Pozdrawiam,
    tony_tg