Forum: FPGA, VHDL & Co. Simulation mit PLL beschleunigen (iSIM)


von Gustl B. (-gb-)


Lesenswert?

Hallo,

ich bin mal wieder in der Simulationsphase. Das funktioniert auch alles 
wie es soll, aber sobald ich eine PLL einbaue ist die Simulation irre 
langsam.
Gut, klar ich kann warten, aber ich muss hier duch recht lange 
simulieren, mehrere ms und das dauert jetzt rund 10 Minuten für 10 ms. 
Das hat vorher ohne Xilinx PLL nur wenige Sekunden gedauert. Die PLL 
macht auch nicht viel, nur aus 100MHz einmal 100MHz und zusätzlich 
50MHz.

Gibt es da einen Trick wie man das schneller macht?

Vielen Dank!

von ich (Gast)


Lesenswert?

Vielleicht einfach die PLL für die Simulation durch einen einfachen Takt 
ersetzen wenn dir die Frequenz eh bekannt und fest ist.

So nach dem Prinzip:
1
clk_pll <= not clk_pll after 10ns;

von Gustl B. (-gb-)


Lesenswert?

Das könnte ich machen, aber Sinn einer Simulation ist es doch das genau 
so zu simulieren wie es später auch verwendet wird.

: Bearbeitet durch User
von ich (Gast)


Lesenswert?

Ein komplexes System simuliert man eher selten komplett (genau aus dem 
Grund, es wird extrem langsam), und gerade sowas wie eine PLL lässt sich 
auch nicht exakt simulieren. Die Frequenz schon, aber Phasenlage zum 
Eingang, Anschwingverhalten/locked und so Dinge nicht wirklich (und 
ansonsten kann man die auch so ungefähr nachbilden).
Natürlich versucht das die Xilinx PLL Simulation möglichst gut, deshalb 
wirds wahrscheinlich auch langsam. Die Frage ist, brauchst du das?

von Gustl B. (-gb-)


Lesenswert?

Das weiß ich nicht. Später schon, aber für die Simulation kann ich sie 
rauswerfen.

von Burkhard K. (buks)


Lesenswert?

Gustl B. schrieb:
> mehrere ms und das dauert jetzt rund 10 Minuten für 10 ms.

Bei mir dauern 10 ms Simulationszeit mit MMCM (iSIM) ca. 5 Minuten - 
keine Ahnung ob das jetzt am Unterschied MMCM vs. PLL liegt - oder am 
Rechner.
Ansonsten gibt es noch eine Option -nodebug, die reduziert die 
Simulationslaufzeit tatsächlich auf wenige Sekunden.

Compile for HDL Debugging (Advanced)
Specifies whether or not to generate output that has debugging 
information. When set to True (checkbox is selected), debug information 
is compiled during simulation. When set to False (checkbox is clear), 
output has no debug information and simulation runs faster.
By default, this property is set to True (checkbox is selected).

von Gustl B. (-gb-)


Lesenswert?

Wohoooo!!!

https://www.xilinx.com/support/answers/64061.html

Damit wird es wieder fast so schnell wie vorher:
1
set_property unifast true [current_fileset simset]

von mhm (Gast)


Lesenswert?

Gustl B. schrieb:
> Wohoooo!!!
>
> https://www.xilinx.com/support/answers/64061.html
>
> Damit wird es wieder fast so schnell wie vorher:
> set_property unifast true [current_fileset simset]

Davon mal abgesehen, lass die PLL wirklich einfach raus. In der 
Simulation bringt sie dir nicht wirklich was, außer dass dein Rechner 
mehr nachdenken muss. Generiere die Takte wie 'ich' geschrieben hat.

Eine Ausnahme könnte sein, wenn du das Toplevel deines Designs 
simulieren willst. Dann ist die PLL logischerweise mit drin und wird 
auch mit simuliert. Normalerweise simuliert man aber nicht unbedingt das 
Toplevel, sondern eben einzelne Blöcke.

von Duke Scarring (Gast)


Lesenswert?

Ich nutze auch ganz gern folgende Konstrukte um die Simulationszeit zu 
verkürzen:
1
    function simulation_active return std_ulogic is
2
        variable result : std_ulogic;
3
    begin
4
        result := '0';
5
        -- pragma translate_off
6
        result := '1';
7
        -- pragma translate_on
8
        return result;
9
    end function simulation_active;
10
...
11
    synthesis : if simulation_active = '0' generate
12
    end generate;
13
...
14
    simulation : if simulation_active = '1' generate
15
    end generate;

oder auch
1
    function counter_max return positive is
2
        variable result : positive;
3
    begin
4
        result := 5_000_000; 
5
        -- pragma translate_off
6
        result := 10;
7
        -- pragma translate_on
8
        return result;
9
    end function counter_max;
10
...
11
    signal counter : integer range 0 to counter_max;
Wahlweise kann man das ja auch noch mit generics kombinieren.

Duke

von Michael W. (Gast)


Lesenswert?

Das ist sehr hilfreich, wenn es um Dinge geht, die man über Sekunden 
beoachten will und wo nur alle Nase lang ein Ereignis eintrifft. Da 
kannst Du nicht einfach die Freuqenz erhöhen, sondern muss auch die 
Abtastraten im VHLD anpassen, weil sonst nichts mehr stimmt.

PLLs simuliere Ich schon lange nicht mehr. Raus und gegen was Einfaches 
ersetzen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.