Variable Modulparameter Scope

Jannis
Mausschubser
Mausschubser
Beiträge: 63
Registriert: 15. Apr 2015 17:10

Variable Modulparameter Scope

Beitrag von Jannis » 16. Feb 2017 20:23

Hallo,

angenommen, ich habe folgendes Modul

Code: Alles auswählen

module mkTest#(Int#(j) x)(Empty);

		Stmt stmt = {
				seq
						$display("Hallo Welt! %b", x);
						delay(10);
				endseq
		};

		mkAutoFSM(stmt);
endmodule
Dann kann ich es beispielsweise mit

Code: Alles auswählen

		Int#(12) x = 1;
		mkTest(x);
instanziieren. Ich kann auch beliebige andere Bitbreiten für x wählen (z.B. 8 oder 11, da j beliebig ist).

Ist es möglich, innerhalb von mkTest auf den Parameter "j" zuzugreifen? Wo genau ist es möglich, auf j zuzugreifen?

Möchte ich beispielsweise

Code: Alles auswählen

Int#(32) val = j;
in das Modul mkTest einbauen, so sagt der BlueSpec-Compiler: "Unbound variable `j'". Allerdings funktioniert folgendes:

Code: Alles auswählen

Int#(j) jVal = 0;
was einen Int der Größe j erstellt und 0 zuweist. Etwas dreckig: Wenn man jVal mit -1 initialisiert und zählt, wie oft man den Wert shiften kann, ohne dass er 0 wird, bekommt man den Wert von j (die Anzahl an Bits von Int#(j)). Diese Anzahl=j kann man dann natürlich auch irgendwo speichern oder ausgeben. Ich bin mir aber sicher, dass das auch einfacher gehen muss..

Viele Grüße

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

Re: Variable Modulparameter Scope

Beitrag von JHofmann » 16. Feb 2017 20:28

Hallo,

da kommt der Unterschied zwischen 'numeric types' und Integer zum tragen.

Code: Alles auswählen

Int#(32) val = fromInteger(valueOf(j));
sollte möglich sein.

'valueOf' wandelt von 'numeric type' in Integer um. Andersherum funktioniert es leider nicht.

Viele Grüße,

Jannis
Mausschubser
Mausschubser
Beiträge: 63
Registriert: 15. Apr 2015 17:10

Re: Variable Modulparameter Scope

Beitrag von Jannis » 16. Feb 2017 20:47

Hallo,

mit 'valueOf' funktioniert es tatsächlich. Es war hier verwirrend, dass j keine Variable, sondern ein "numeric type" ist. Denn dann macht auch die Fehlermeldung von Bluespec Sinn, dass j keine deklarierte Variable ist.

Vielen Dank für die schnelle Antwort

Antworten

Zurück zu „Archiv“