- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I use Quartus 13.1.0.182 web edition with a Cyclone III FPGA
The project is compiled with the Floating point custom instruction 2.0 from Qsys. My code calculates the square root and some times the results is absolutely wrong. I checked (in disassembly) that custom instruction 251 is called like expected. Here is the code:#include "altera_nios_custom_instr_floating_point_2.h"
float temp1, sinDelta, debugVal, cosDelta;
temp1 = sinDelta * sinDelta;
debugVal = 1.0f - temp1;
cosDelta = sqrtf(debugVal);
And here are the variables results (obtained during debugging): sinDelta: 0.000162738579 (0x392aa4ce) temp1: 2.64838445e-008 (0x32e37e97) debugVal: 0.99999994 (0x3f7fffff) cosDelta: 0.5 (0x3f000000) The cosDelta should be around "1". Is seems the custom square root encounters issues with results near 1! Do I do something wrong or is it an Altera implementation bug?
Link Copied
4 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Looks that way, probably failing to increment the exponent when the mantissa is rounded up.
FWIW you'll probably get better precision from calculating one of sqrt((1+sin)*(1-sin)) or sqrt(0.5 - sin*sin + 0.5).- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
--- Quote Start --- Looks that way, probably failing to increment the exponent when the mantissa is rounded up. FWIW you'll probably get better precision from calculating one of sqrt((1+sin)*(1-sin)) or sqrt(0.5 - sin*sin + 0.5). --- Quote End --- Thank you for your reply. Even if your fix works in this special case (not already test), I don't really trust this sqrt hardware function! There is no guaranty it would not do the same with an other rounded. I should ask Altera directly
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Neither of those expressions will help the bug, just give extra precision.
And I should also have suggested: sqrt((0.5+sin+0.5)*(0.5-sin-0.5)).- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Its a bug and will be fixed....

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page