Mathematische Operationen, ein Problem?

Persönliche Seite #2944077
Lesenswert?

Hallo zusammen,
ich habe ein schon etwas längeres Programm geschrieben, welches 
angemessen lange (ca. 2-3 min) bei der Syntehe benötigt. Nun habe ich 
das Programm noch um eine letzte wichtige Komponente erweitert, doch 
plötzlich führt die Synthese zu keinem Ende mehr (ich habe über 1 Std. 
gewartet).

Was habe ich erweitert?

Es gibt in meinem Programm eine Integer Signal, welches bei jedem Takt 
um 1 erhöht wird, wenn ich in einem bestimmten Prozess bin. Diese soll 
quasi eine Zeitmessung wiederspiegeln.

Diese Zeit möchte ich nun "auswerten". Mein Systemtakt beträgt 50 MHz. 
Also entspricht ein Takt einer Dauer von 2E-8 Sekunden. Ergo sind 500E3 
Takte = 10ms.

Ich möchte diese Zeit nun in Millisekunden-Stellen aufteilen:

Es gibt vier Stellen:

- Zehntausend entspricht 10.000 ms = 10 s
- Tausend entspricht 1.000 ms = 1 s
- Hundert entspricht 100 ms = 0,1 s
- Zehn entspricht 10 ms = 0,01 s

Das war meine Idee (am Beispiel der Zehntausender Stelle [50 MHz Takt]):
1
signal TIMER: integer;
1
while (TIMER > (500000000)) loop
2
  X := X + 1;
3
  TIMER <= TIMER - (500000000);
4
end loop;

Nach dieser Schleife steht in X die Anzahl "wie oft 10s vorkamen".
Danach kann dann ermittelt werden wie oft 1s vorkam usw. usf.

Doch sobald ich diese while Schleifen in mein Programm einbaue ist 
Feierabend und er Synthetisiert bis zum Sankt Nimmerleinstag..

Was mache ich verkehrt?

Viele Grüße
Gast #2944095
Lesenswert?

meinst du wirklich Synthese? mir klingt das eher nach "hängt in der 
Simulation fest"

das code-schnipsel ist ein wenig mager um eine Aussage über den Fehler 
zu treffen.

Ich vermute, dass der Simulator immer in den Process springt und nie 
fertig wird bzw. wird die while schleife nie verlassen.

gruß
Persönliche Seite #2944137
Lesenswert?

Das ist doch die Schreibweise für eine while Schleife oder?
1
[<label>:] while <expression> loop
2
   -- ...
3
end loop [<label>];

Edit: Habe gerade einen Satz von L.M. gefunden, wo er sagt, dass man 
keine while-loop Schleifen benutzen soll. Mhh, dann muss ich das 
irgendwie anders lösen. Irgendwie komisch wenn man Ewigkeiten nur 
C/C++/Java geproggt hat :-(
#2944149
Lesenswert?

Ich mache auch sowas, bei 100MHz. kombinatorisch geht zwar sehr schnell, 
braucht aber hier extrem viel Logik, daher kann das schon sein dass das 
länger dauert.

Ich habe das in einem getaktetet process:

if    timer                 timer > 99999999 then
      timer <= timer - 10000000;
      sekunden <= sekunde + 1;
elsif timer < 100000000 and timer > 9999999 then
      timer <= timer - 10000000;
      hundert_ms <= hundert_ms + 1;
elsif timer < 10000000 and timer > 999999 then
      timer <= timer - 1000000;
      zehn_ms <= zehn_ms + 1;
elsif timer < 1000000 and timer > 99999 then
      timer <= timer - 100000;
      eine_ms <= eine_ms + 1;
end if;

Also das ist die Zerlegung in Zehnerstellen, dauert aber etwas, also 10 
Takte je Zehnerstelle maximal.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren