Action Blocks

Eolithic
Erstie
Erstie
Beiträge: 12
Registriert: 4. Okt 2010 16:33

Action Blocks

Beitrag von Eolithic »

Guten Tag,

mir ist eben beim durchgehen der Übungen eine kleine Frage aufgekommen.
Soweit ich Action Methoden und Action Blocks verstanden habe, sind diese da um anzuzeigen das der Inhalt der Methode bzw. des Blocks den Zustand der Schaltung ändern kann, aber nicht muss.

Jetzt wird in Übung 2 folgendes als Beispiel angegeben:

Code: Alles auswählen

Stmt myFirstFSM = {
	seq
		action
			$display("Hello World.");
		endaction
	endseq
};
Behandelt der Compiler $display anders, wenn es innerhalb eines ActionBlocks ist? Werden bestimmte Funktionen implizit als Aktion behandelt, wenn man den Block weglässt? $display funktioniert ja beispielsweise auch ohne explizit angegebenen Action-Block wunderbar.
Oder wurde der Action Block verwendet, da eine Ausgabe auf der Konsole im Grunde eine Zustandsänderung einer Konsolenanwendung ist?

JHofmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 23. Apr 2015 10:43

Re: Action Blocks

Beitrag von JHofmann »

Eolithic hat geschrieben:

Code: Alles auswählen

Stmt myFirstFSM = {
	seq
		action
			$display("Hello World.");
		endaction
	endseq
};
Behandelt der Compiler $display anders, wenn es innerhalb eines ActionBlocks ist? Werden bestimmte Funktionen implizit als Aktion behandelt, wenn man den Block weglässt? $display funktioniert ja beispielsweise auch ohne explizit angegebenen Action-Block wunderbar.
Oder wurde der Action Block verwendet, da eine Ausgabe auf der Konsole im Grunde eine Zustandsänderung einer Konsolenanwendung ist?
Hallo,

$display wird intern wie eine Action behandelt und muss daher in einem solchen Kontext stehen. Bei Stmt ist es nun so, dass alle Befehle die nicht mit action/endaction umgeben sind als einzelne action interpretiert werden. Ist in diesem Fall ist es also äquivalent das $display nicht mit action und endaction zu umgeben.

Ein Beispiel wo das nicht geht ist z.B.

Code: Alles auswählen

Stmt myFirstFSM = {
	seq
		action
			let d <- something.response.get();
			$display("Hello World %d.", d);
		endaction
	endseq
};
würde gehen. Einen Fehler gibt es mit

Code: Alles auswählen

Stmt myFirstFSM = {
	seq
		let d <- something.response.get();
		$display("Hello World %d.", d);
	endseq
};
weil 'd' nicht gefunden werden kann.

Viele Grüße,

Eolithic
Erstie
Erstie
Beiträge: 12
Registriert: 4. Okt 2010 16:33

Re: Action Blocks

Beitrag von Eolithic »

Ah ok,

vielen Dank für die schnelle Antwort. :)

Antworten

Zurück zu „Archiv“