Seite 1 von 1

Bluespec Type Error

Verfasst: 1. Mai 2015 16:30
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

Re: Bluespec Type Error

Verfasst: 3. Mai 2015 16:10
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.

Re: Bluespec Type Error

Verfasst: 5. Mai 2015 10:38
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

Re: Bluespec Type Error

Verfasst: 5. Mai 2015 11:00
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ß,

Re: Bluespec Type Error

Verfasst: 6. Mai 2015 08:59
von FloZou
Danke, hat mir geholfen!

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

Gruss