Seite 1 von 1

Lösung 2.2.2

Verfasst: 18. Feb 2017 10:56
von mProg
In der Lösung für 2.2.2 wird in dem Rule mkSimpleCounter die Maybe so getestet

Code: Alles auswählen

if(isValid(maybeIncr)) begin
incrVal = fromMaybe(?, maybeIncr);
end
Meine Frage ist, warum man nicht gleicht es als

Code: Alles auswählen

incrVal = fromMaybe(0, maybeIncr);
Das wäre doch kürzer und funktioniert

Re: Lösung 2.2.2

Verfasst: 18. Feb 2017 10:58
von JHofmann
Moin,

das war ein artifizielles Beispiel um die Funktionen zu zeigen :) Wurde in der Übungsbesprechung auch angesprochen iirc.

Viele Grüße,

Re: Lösung 2.2.2

Verfasst: 18. Feb 2017 11:10
von mProg
Danke. Eine Frage noch dazu. Ich habe auch versucht so den Code zu schreiben, um das Ergebnis zu testen:

Code: Alles auswählen

	res + fromMaybe(?,incW.wget()) - fromMaybe(?,decrW.wget());
Jedoch kriege ich dasselbe Ergebnis, wenn ich anstelle ? den Wert 0 einsetze.
Das wundert mich, da ja wenn ich ein Register mit mkReg(?) initializiere, ich den Wert 10101010... (AAAA...) bekomme.
Warum funktioniert es dann mit "?" auch?

Re: Lösung 2.2.2

Verfasst: 18. Feb 2017 11:13
von JHofmann
bsv-reference-guide hat geschrieben:The programmer is encouraged to use don’t-care values where possible, both because it is useful
documentation and because the compiler can often choose values that lead to better circuits.

Re: Lösung 2.2.2

Verfasst: 18. Feb 2017 15:21
von 0b101101101
Aber in diesem kann einem doch NICHT egal sein, welchen Wert man benutzt. Nur der Wert 0 macht Sinn, denn ansonsten ist die Rechnung falsch. Also müsste man

Code: Alles auswählen

res + fromMaybe(0, incW.wget()) - fromMaybe(0, decrW.wget());
.
machen, denn sonst könnte Bluespec für die ?, zb. den Wert 1 wählen.