- 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

- 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....

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