Standardmäßig werden Gleitkommakonstanten, wenn die benutzerdefinierte Anweisung verwendet wird, als einzelne Präzision kompiliert und Gleitkommaoperationen mit einzeler Präzision in der Hardware implementiert. Die folgenden Problemumgehungen führen dazu, dass Gleitkommakonstanten kompiliert werden, während Doppelpräzisions-Fließkommaoperationen in der Software implementiert werden.
Sie können eine der folgenden Problemumgehungen verwenden:
Option 1 - Ändern Sie Ihre Software durch Hinzufügen des Postfix "L" zur Doppelpräzisions-Fließkommakonstanten, um sicherzustellen, dass die Konstanten nicht in einzelne Präzision konvertiert werden.
Die folgende Tabelle zeigt Beispielcode und Gleitkomma-benutzerdefinierte Befehls-Hardwarenutzung, Präzision und ob sich die Implementierung in Hardware oder Software befindet.
Beispielcode | FP CI Nutzung | Präzision | Umsetzung |
b= a * 4,67 | Ja | Einzelnen | Hardware |
b = a * 4,67 | Nein | Doppel | Software |
b = a * 4,67f | Ja | Einzelnen | Hardware |
b = a * 4,67f | Nein | Einzelnen | Software |
b = a * 4,67L | ist es egal* | Doppel | Software |
Option 2 - Entfernen Sie in public.mk manuell die Flag -mcustom-fpu-config und ersetzen Sie sie durch die einzelnen Compiler-Flags, verzichten Sie aber auf die Flag -fsingle-precision-constant.
"-mcustom-fpu-config=60-1" zu "-mcustom-fmuls=252 –mcustom-fadds=253 –mcustom-fsubs=254" oder
"-mcustom-fpu-config=60-2" zu "-mcustom-fmuls=252 –mcustom-fadds=253 –mcustom-fsubs=254 –mcustom-divs=255"
Bitte beachten Sie, dass der Unterschied zwischen 60-1 und 60-2 darin besteht, dass 60-1 die Flag –mcustom-divs nicht hat.
Weitere Einzelheiten finden Sie in Anhang D in http://www.altera.com/literature/ug/ug_nios2_custom_instruction.pdf