Klausur Aufgabe 4

Mario Trageser
Windoof-User
Windoof-User
Beiträge: 40
Registriert: 20. Jul 2013 14:28

Klausur Aufgabe 4

Beitrag von Mario Trageser »

Hallo,
mich würde interessieren, wie die Lösung von Aufgabe 4a in der Klausur aussah.
Ich habe etwas in der Art geschrieben:

Code: Alles auswählen

provisis(
    Bits#(maxVal, operandsSize),
    Bits#(maxVal, resultSize/2),
    resultSize <= 64,
    resultSize <= 2*operandsSize,
    operandsSize < resultSize
);
Ich habe nur das blöde Gefühl, dass das syntaktisch falsch ist. Leider werde ich in dem Fall aus den Übungsfolien auch nicht sehr schlau, da wurde ja nur ein kleiner Teil der Provisos eingeführt.
Wie sähe das denn richtig aus?

Liebe Grüße,
Mario

s1mstar
Windoof-User
Windoof-User
Beiträge: 38
Registriert: 18. Apr 2013 14:26

Re: Klausur Aufgabe 4

Beitrag von s1mstar »

Das würde mich ebenfalls interessieren! (Ich habe nämlich so ziemlich das Gleiche [geraten]). :wink:

Ich habe mir eben mal das Kapitel 9 des Buches "Bluespec by Example" durchgelesen. Hier sind Provisos beschrieben. Ich habe jetzt zwar grob eine Idee wie Provisos funktionieren, finde zu der Klausuraufgabe jedoch kein passendes Beispiel. Vielleicht hilft es dir ja weiter ;)

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

Re: Klausur Aufgabe 4

Beitrag von JHofmann »

Hallo,

die Provisos sind leider etwas daneben. "maximumValue" ist ein numeric type und mit Bits funktioniert das daher nicht.

Code: Alles auswählen

module mkMult(Mult#(maximumValue))
     provisos(
         Log#(maximumValue, operandsBits), // How many bits do I need to store a value of maximumValue
         Mul#(operandsBits, 2, resultBits), // The result of the multiplicaten may be at most twice as long as the operands
         Add#(operandsBits, someOtherVal, resultBits), // Ensure that resultBits is less or equal than operandsBits
         Add#(resultBits, someVal, 64) // Ensure that resultBits is less or equal than 64
         );
Bei Provisos sorgt der Compiler dafür, dass die Typen den entsprechenden Gleichungen entsprechen.

Z.B. Add#(a, b, c) stellt sicher, dass a + b = c und alle drei "numeric types" sind.
Dabei können auch einzelne Typen weggelassen werden und der Compiler leitet diese wenn möglich her.
Z.B. Add#(resultBits, b, 64) resultBits und 64 sind bekannt aber b nicht. Der Compiler würde b berechnen (was wir aber nicht brauchen für den Rest der Aufgabe).

Viele Grüße,

s1mstar
Windoof-User
Windoof-User
Beiträge: 38
Registriert: 18. Apr 2013 14:26

Re: Klausur Aufgabe 4

Beitrag von s1mstar »

JHofmann hat geschrieben:

Code: Alles auswählen

    Mul#(operandsBits, 2, resultBits), // The result of the multiplicaten may be at most twice as long as the operands
Ahh, jetzt habe ich das verstanden.
Ich dachte, dass bei diesem Statement 2*operandsBits = resultBits gelten muss (anstatt 2*operandsBits <= resultBits); Also zwangsläufig operandsBits = resultBits / 2 ist.

Vielen Dank! :)

Antworten

Zurück zu „Archiv“