Forum: FPGA, VHDL & Co. process innerhalb eines prozesses starten


von marco m. (jambaleija)


Lesenswert?

ist es möglich einen process innerhalb eines anderen prozesses zu 
starten also etwas in der art

process(t0)
begin

case z_alt is

when z0 => process(t1)

usw.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Jein ... Man kann umständlich Signale setzen, die andere Prozesse 
triggern.

Ist aber oft nicht notwendig und/oder sinnvoll.

Gurgel mal nach "Statemaschine"

von marco m. (jambaleija)


Lesenswert?

also wenn es sich bei obigen programmausschnitt um einen automaten 
handelt welche drei zustände kennt von denen zustand z0 bedeutet eine 
uhr soll laufen dann brauche ich doch zwangsläufig einen process in z0 
der in der sensitivity list einen takt mit 1 sekunde periodendauer 
enthält um die uhr jede sekunde um eins hoch zu zählen

von Fetz (Gast)


Lesenswert?

marco meier schrieb:
> also wenn es sich bei obigen programmausschnitt um einen automaten
> handelt welche drei zustände kennt von denen zustand z0 bedeutet eine
> uhr soll laufen dann brauche ich doch zwangsläufig einen process in z0
> der in der sensitivity list einen takt mit 1 sekunde periodendauer
> enthält um die uhr jede sekunde um eins hoch zu zählen

Öööh, das war jetzt nicht so ganz verständlich.

Erstmal zum Grundlegenden ... Wenn du etwas anderes hast als:
1
process (clk)
2
begin
3
  if clk'event and clk='1' then
4
     ...
5
  end if;
6
end process;

Dann richte erstmal das. Es ist fast immer falsch, in der 
Sensitivity-List was anderes zu haben als nur den clk.

Wenn du deinen Prozess so umgebaut hast, kannst du überlegen anfangen, 
wie du einen anderen Prozess anstoßen und auf sein Ergebnis warten 
kannst.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

marco meier schrieb:
> when z0 => process(t1)
Oh, ein Softie, der Hardware machen will/soll/muss...  ;-)
Kurz: du kannst deine komplette Softwaredenkweise vergessen. VHDL ist 
keine Programmiersprache, sondern eine Beschreibungssprache. Du 
musst also quasi einen Schaltplann in Text giessen. Wenn du da in 
vorher und nachher, oder auch in zuerst, und danach denkst, 
liegst du mit gut 95% Wahrscheinlichkeit daneben.
Abläufe in VHDL/Hardware werden in Zustandsmaschinen beschrieben. Ein 
Flipflop speichert den aktuellen Zustand, und Signale "aussen rum" 
bilden die Fortschaltbedingung.

>> Erstmal zum Grundlegenden ...
Richtig:erst mal eine blinkende LED. Wie würdest du das machen?
Und warum mache ich das so:
http://www.lothar-miller.de/s9y/archives/80-Hello-World!.html

Und dann käme schon das legendäre Lauflicht. Machs wieder so: überleg 
du dir, wie ein Lauflicht mit 8 LEDs aussehen könnte, und dann sieh 
dir das da an:
http://www.lothar-miller.de/s9y/archives/61-Lauflicht.html

Such mal hier im Forum nach "VHDL Postulate", du wirst ein paar solche 
Anfängerthreads finden...

von tomb (Gast)


Lesenswert?

Fetz schrieb:
> Dann richte erstmal das. Es ist fast immer falsch, in der
> Sensitivity-List was anderes zu haben als nur den clk.

Bitte nicht solchen Unsinn verbreiten!

von Sparxx (Gast)


Lesenswert?

Fetz schrieb:
> Erstmal zum Grundlegenden ... Wenn du etwas anderes hast als:process (clk)
> begin
>   if clk'event and clk='1' then
>      ...
>   end if;
> end process;

tomb schrieb:
> Fetz schrieb:
>> Dann richte erstmal das. Es ist fast immer falsch, in der
>> Sensitivity-List was anderes zu haben als nur den clk.
>
> Bitte nicht solchen Unsinn verbreiten!

ich glaube Fetz bezieht sich hier auf synchrone Processe.Es könnte 
andere Signale in der Sensitivity-List stehen,haben aber keinen Einfluss 
auf der Process-Aktivierung.

von tomb (Gast)


Lesenswert?

Sparxx schrieb:
> ich glaube Fetz bezieht sich hier auf synchrone Processe.Es könnte
> andere Signale in der Sensitivity-List stehen,haben aber keinen Einfluss
> auf der Process-Aktivierung.

Nicht mal das stimmt. Immerhin gibt es noch asynchrone resets in 
synchronen Prozessen.

So wie das Fetz geschrieben hat, sollte man nur getaktete Prozesse 
verwenden und das ist auf jedenfall Unsinn. Bei einem sauberen Design 
stehen dort gerade mal die Registerzuweisungen drinnen, der Rest (>95% 
vom Code) ist rein kombinatorisch und nicht getaktet.

von Fetz (Gast)


Lesenswert?

tomb schrieb:
> Nicht mal das stimmt. Immerhin gibt es noch asynchrone resets in
> synchronen Prozessen.

Profi ... Hast du schonmal gesehen, was bei asynchronen Resets passieren 
kann? Offensichtlich nicht ...

> So wie das Fetz geschrieben hat, sollte man nur getaktete Prozesse
> verwenden und das ist auf jedenfall Unsinn. Bei einem sauberen Design
> stehen dort gerade mal die Registerzuweisungen drinnen, der Rest (>95%
> vom Code) ist rein kombinatorisch und nicht getaktet.

Das sauberste Design ist 100% getaktet :)

von Fetz (Gast)


Lesenswert?

Naja gut, hätte ich einen Account, hätte ich jetzt tatsächlich meinen 
letzten Post abgeändert.

Ich hätte es anders schreiben sollen. Wenn ich Prozesse werwende, dann 
haben die Prozesse nur clock in der Sensitivity-List.

Konbinatorische Logik hat man selbstverständlich auch. Dafür verwende 
ich aber keinen Prozess ...

Erklär die Unterschiede, wann man was nimmt und was nicht mal einem 
Anfänger ...

von tomb (Gast)


Lesenswert?

Fetz schrieb:
> Profi ... Hast du schonmal gesehen, was bei asynchronen Resets passieren
> kann? Offensichtlich nicht ...

Natürlich, trotzdem verwendet man sie mindesten so häufig wie synchrone 
Resets. Gerade im ASIC-Bereich wo Fläche zählt, wird man meist 
asynchrone und nicht synchrone Resets finden. Beides hat seine 
Berechtigung und manches geht überhaupt nur auf eine Weise.

> Das sauberste Design ist 100% getaktet :)

Kombinatorik ist nicht getaktet, warum sollte man es in einen getakteten 
Prozess schreiben? Synchrones Design benötigt halt noch etwas mehr als 
Flipflops ;)

Natürlich ist das nur eine Sichtweise. Viele fahren gut, auch ohne 
dieser Trennung. Bei etwas größeren Projekten habe ich zumindest 
festgestellt, dass eine saubere Trennung einfacher zu handhaben ist. 
Kleinere Dinge wie einen Counter mach ich noch in einem getakteten 
Prozess. Alles was komplexer ist, wird strikt gesplittet.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

tomb schrieb:
> Gerade im ASIC-Bereich
Ich tippe das Verhältnis Entwickler FPGA:ASIC etwa 95:5 ...
> wird man meist asynchrone und nicht synchrone Resets finden.
Die wird man da finden, weil die Bauteile so ausgelegt sind. Auf einem 
FPGA sollte aber immer synchron entwickelt werden, denn nur so kann 
die Timing-Analyse Fehler entdecken.

> Beides hat seine Berechtigung und manches geht nur auf eine Weise.
Richtig, und deshalb muss man seine Zielarchitektur kennen.

> Kombinatorik ist nicht getaktet,
> warum sollte man es in einen getakteten Prozess schreiben?
Konterfrage: warum nicht?
Nur, weil es in allen Lehrbüchern aus dem letzten Jahrtausend die 
2-Prozess-Schreibweise gepflegt wird? Und damit regelmässig Leute 
kombinatorische Schleifen/Zähler bauen?

Meine (getakteten) Prozesse sehen üblicherweise so aus:
1
   process begin
2
      wait until rising_edge(clk);
3
      :
4
   end process;
Der Vorteil: keine fehlerhafte Sensitivliste möglich.
Ok, VHDL2008 gibts auch... ;-)

von tomb (Gast)


Lesenswert?

Lothar Miller schrieb:
>> Kombinatorik ist nicht getaktet,
>> warum sollte man es in einen getakteten Prozess schreiben?
> Konterfrage: warum nicht?
> Nur, weil es in allen Lehrbüchern aus dem letzten Jahrtausend die
> 2-Prozess-Schreibweise gepflegt wird?

Nein, weil es eher der Hardware entspricht. Ist wohl Geschmackssache, 
viele kommen auch mit einem Prozess gut zurecht, ich tu mir wesentlich 
leichter mit (mindestens) zwei Prozessen, weil die Leitungen, FF-In und 
FF-Out (present und next state) auch so in Hardware vorhanden sind. Find 
es einfach "natürlicher".

> Und damit regelmässig Leute
> kombinatorische Schleifen/Zähler bauen?

Das hat nichts mit der Schreibweise sondern mit einem Denkfehler zutun. 
Wenn es daran scheitert, hilft auch eine andere Schreibweise nichts.

von berndl (Gast)


Lesenswert?

tomb schrieb:
> Gerade im ASIC-Bereich

tja, aber beim ASIC hast du typischerweise auch eine Komponente 
'PON-Reset und Clock' drauf. Ausserdem volle Kontrolle ueber die 
Verdrahtung. Und die Clockverdrahtung ist beim ASIC auch was 
spezielles...

Im Gegensatz dazu hast du beim FPGA oft einen externen Reset und dann 
noch die Resetleitungen ueber normale Routingresourcen. Wenn das als 
asynchroner Reset durchs FPGA geroutet wird gibts halt Probleme.

Je nach FPGA kann es ja auch sinnvoll sein, einen externen Reset erstmal 
ueber FFs einzusynchronisieren und dann intern als asynchronen Reset zu 
verwenden. Haengt halt immer von der Zielplattform ab...

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.