Bluespec Type Error

FloZou
Windoof-User
Windoof-User
Beiträge: 32
Registriert: 12. Okt 2010 14:10
Wohnort: Darmstadt
Kontaktdaten:

Bluespec Type Error

Beitrag von FloZou »

Hey,

ich habe einen Compile Error und werde einfach nicht schlau draus.

Und zwar moechte ich einen ActionValue Rueckgabewert in meiner Int#(32) Variable abspeichern:

Code: Alles auswählen

result <= myModule.getResult();
Folgender Fehler erscheint:

Code: Alles auswählen

Error: "HelloModule.bsv", line 51, column 27: (T0020)
  Type error at:
    myModule.getResult

  Expected type:
    Int#(32)

  Inferred type:
    ActionValue#(Int#(32))
In einem anderen Modul rufe ich eine andere Methode so auf und dort funktioniert es.

Danke schonmal!

Gruss

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

Re: Bluespec Type Error

Beitrag von JHofmann »

Hallo,
die Fehlermeldung besagt, dass der Kompiler ein Int#(32) erwartet aber die Syntax ein ActionValue#(Int#(32)) impliziert. Dies liegt an der Verwendung des falschen Zuweisungsoperators.
Statt

Code: Alles auswählen

result <= myModule.getResult();
müsste es

Code: Alles auswählen

Int#(32) valueReturned <- myModule.getResult(); // <- gets a value from an ActionValue method
result <= valueReturned;
heißen.

FloZou
Windoof-User
Windoof-User
Beiträge: 32
Registriert: 12. Okt 2010 14:10
Wohnort: Darmstadt
Kontaktdaten:

Re: Bluespec Type Error

Beitrag von FloZou »

Danke,
das löst das Problem. Was die Fehlermeldung besagt war mir schon klar.

Nur hat sich für mich immer noch erklärt warum man den "Return Value" nicht direkt an result "anschließen" kann.

Gruss

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

Re: Bluespec Type Error

Beitrag von JHofmann »

Hallo,

das liegt an der unterschiedlichen Semantik der Operatoren. Das Interface eines Registers ist dabei:

Code: Alles auswählen

interface Reg #(type a_type);
  method Action _write(a_type x1);
  method a_type _read();
endinterface: Reg
"_write" ist dabei die Action die mit "<=" aufgerufen wird. Sie erwartet dabei allerdings einen Wert des entsprechenden Typs als Parameter.

Wenn Sie hier einen ActionValue#(a_type) übergeben ist dies einfach ein anderer Typ und Bluespec wird Ihnen sagen das ein entsprechender <= Operator nicht definiert ist.

Für ActionValue (ebenso ein Typ wie Reg) ist der Operator <- definiert um die Action auszuwerten und den Wert zurück zugeben.

Im Umgang mit Bluespec sollten Sie immer daran denken das Bluespec eine stark typisierte Sprache ist. Der Compiler wird nicht versuchen zu raten was Sie mit einem Ausdruck meinen könnten sondern immer nur genau das auswerten was angegeben ist.

Ich hoffe das hat das Problem etwas verständlicher erklärt.
Gruß,

FloZou
Windoof-User
Windoof-User
Beiträge: 32
Registriert: 12. Okt 2010 14:10
Wohnort: Darmstadt
Kontaktdaten:

Re: Bluespec Type Error

Beitrag von FloZou »

Danke, hat mir geholfen!

Kenne das von Haskell. Nur war mir dem Unterschied '<-' und '<=' nicht so bewusst!

Gruss

Antworten

Zurück zu „Archiv“