Datum:
Hallo, zwei Fragen: a) wie erzeuge ich in Modelsim einen 64MHz-Takt? b) wie schreibe ich das effizient wenn ich über lange Zeiträume simulieren will? Zu a) ich möchte in Modelsim einen 64MHz-Takt erzeugen, also 7,8125ns low, 7,8125 high. Leider aber macht mir das Modelsim die Nachkommastellen nicht, wenn ich es einfach so schreiben würde:
-- the 64MHz clock clock64 : process begin clk64 <= '0'; wait for 7.8125 ns; clk64 <= '1'; wait for 7.8125 ns; end process clock64; |
Das ganze brauche ich weil ich extern gesamplete Daten als Input habe, die ein ganz genaues Timing haben, und das ständige Rumskalieren beim Ausmessen von Zeiten ist äußerst nervig. Das ganze verzehntausendfachen geht auch wieder nicht, weil dann der Simulator ewig läuft. Also habe ich die Zeiten gerundet und mach meist 8ns und manchmal 7ns Delays. Die Frage hier: Geht das einfacher?
-- the 64MHz clock clock64 : process begin clk64 <= '0'; wait for 8 ns; clk64 <= '1'; wait for 8 ns; clk64 <= '0'; wait for 7 ns; -- 7 clk64 <= '1'; wait for 8 ns; clk64 <= '0'; wait for 8 ns; clk64 <= '1'; wait for 8 ns; clk64 <= '0'; wait for 8 ns; clk64 <= '1'; wait for 8 ns; clk64 <= '0'; wait for 7 ns; -- 7 clk64 <= '1'; wait for 8 ns; clk64 <= '0'; wait for 8 ns; clk64 <= '1'; wait for 8 ns; clk64 <= '0'; wait for 8 ns; clk64 <= '1'; wait for 7 ns; -- 7 clk64 <= '0'; wait for 8 ns; clk64 <= '1'; wait for 8 ns; end process clock64; |
zu b) Mit diesem Takt sample ich das GPS 1pps-Signal ab, und wenn ich den Modelsim hier über 1sec (noch besser wären 16sec) simulieren lasse, dann läuft das ewig. Wie kann man das am effizientesten beschleunigen? Danke für eure Hilfe! Günter (dl4mea)
Datum:
du musst die simulation auf ps umschalten vsim -t ps den clk erzeuge ich dann so signal clk : std_logic := '0'; begin clk <= not clk after 7812 ps
Datum:
Das timmt aber immer noch nicht genau.
Datum:
Hi, naja, dann machen wir halt einfach
clock64 : process begin clk64 <= '0'; wait for 7812ps; clk64 <= '1'; wait for 7813ps; end process clock64; |
und schon ists bis auf das Tastverhältnis ziemlich genau Womit ich sagen wollte: Danke, das geht! Jetzt nur noch die ergänzende Frage: Wie kann ich es am effizientesten machen wenn ich mit diesen Einstellungen 1sec oder länger simulieren möchte? Ciao, Günter
Datum:
Günter (dl4mea) schrieb: > Jetzt nur noch die ergänzende Frage: Wie kann ich es am effizientesten > machen wenn ich mit diesen Einstellungen 1sec oder länger simulieren > möchte? Hm, für solche langen zeiten ist Modelsim nicht wirklich optimal. Das simuliert man am besten mit File I/O und dann ohne Wave-Ausgabe.
Datum:
Günter (dl4mea) schrieb: > und schon ists bis auf das Tastverhältnis ziemlich genau vollkommen irrelevant, da man nur aus rising baut
Datum:
Christian R. schrieb: > Günter (dl4mea) schrieb: >> Jetzt nur noch die ergänzende Frage: Wie kann ich es am effizientesten >> machen wenn ich mit diesen Einstellungen 1sec oder länger simulieren >> möchte? > > Hm, für solche langen zeiten ist Modelsim nicht wirklich optimal. Das > simuliert man am besten mit File I/O und dann ohne Wave-Ausgabe. oder waveform größe begrenzen, dann kannst du modelsim auch 24h simulieren lassen :D
Datum:
Hallo, ganz verstehe ich das mit der Waveform-Größe nicht. Denn das würde doch heißen, ich kann mir die Ergebnisse bei 1sec, 2sec usw. nicht anschauen kann? Also genauer gesagt: Ich taste mit den 64MHz ein 1pps von GPS ab und bräuchte eh nur das Geschehen rings um den 1pps rum (1pps plus etwa 500 clocks). Da wird nämlich der nächste Korrekturfaktor ausgerechnet. Ciao, Günter
Datum:
Wie gesagt solche langen sachen macht man lieber mit Ein- und Ausgabe über Files. Lass doch alles was du sehen willst, in ein File schrieben, meinetwegen noch mit Simulationszeit usw. dann kannst du ohne Wave Ausgabe simulieren lassen, das geht um einiges schneller.
Datum:
>> Das ganze verzehntausendfachen >> geht auch wieder nicht, weil dann der Simulator ewig läuft. Das vestehe ich jetzt nicht. Der Simulator sollte, wenn man den Process von der Clock abhängig macht, doch eh nur auf die Flankenwechsel bei der Clock achten. Und ob die Zeitbasis das ms us oder ps ist, das ist für die Rechenzeit völlig egal. Die Zeiten zwischen den Flankenwechseln werden ignoriert, weil da ja eh nichts passieren kann. Jedenfalls habe ich es so verstanden.
Datum:
PittyJ schrieb: > Jedenfalls habe ich es so verstanden. Stimmt so auch. Das eigentliche Problem mit der zeitlichen Auflösung ist die maximale Simulationszeit, weil die Simulatoren die interne Zeit entweder als unsigned 32 Bit oder 64 Bit Zahl darstellen. Bei 32 Bit und ps Auflösung ist dann bei ca. 4 ms Schluss. Eine Auflösung in ps oder ns macht die Simulation nicht schnelle oder langsamer.
Datum:
>>> Das ganze verzehntausendfachen >>> geht auch wieder nicht, weil dann der Simulator ewig läuft. Ich benötige für die Bearbeitung meiner Inputdaten (Capture-File des ADC) immer dieselbe Anzahl Taktflanken und nicht einfach nur einen Lauf über insgesamt 1sec. Wenn ich also Faktor Zehntausend mache, nur damit ich mit Nanosekunden-Auflösung zeitlich 1:10000 skalierte Timing-Events brauche, dann brauch ich dennoch dieselbe Anzahl Events bis mein komplettes Capturefile abgearbeitet ist. Das "-t ps" hat schon was gebracht. Günter (dl4mea)
Datum:
>ich kann mir die Ergebnisse bei 1sec, 2sec usw. nicht anschauen
Siehst du dann überhaupt noch irgendetwas? Du solltest dir überlegen,
wie man die Ergebnisse ohne Wave-Betrachtung überprüfen/bewerten kann.
VG, SuperWilly