www.mikrocontroller.net

Forum: FPGA, VHDL & Co. 64MHz Takt in Modelsim erzeugen?


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Günter (dl4mea) (dl4mea)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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)

Autor: user (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Pacitus (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Das timmt aber immer noch nicht genau.

Autor: Günter (dl4mea) (dl4mea)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Christian R. (supachris)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Bertram (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Günter (dl4mea) schrieb:
> und schon ists bis auf das Tastverhältnis ziemlich genau
vollkommen irrelevant, da man nur aus rising baut

Autor: O_o (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Günter (dl4mea) (dl4mea)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Christian R. (supachris)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: PittyJ (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
>> 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.

Autor: Klaus Falser (kfalser)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Günter (dl4mea) (dl4mea)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
>>> 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)

Autor: SuperWilly (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
>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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net