- Community Home
- :
- Discussion Forums
- :
- Most Active Software Boards
- :
- LabVIEW
- :
- LabVIEW FPGA SGL Inverse Tangent

Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

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

Highlighted

03-25-2016 01:43 PM

Options

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report to a Moderator

I am trying to implement an inverse tangent calculation on FPGA and I would ideally like to have the input and output be Single Precision (SGL) Floats. The input would be the Tangent and the output would be the angle in radians or PiRadians. Is there an available function to implement this in LabVIEW FPGA using SGL? I know it does exist in FXP.

I'm trying to use the Xilinx CORDIC 6.0 LogicCORE function (something I'm not familiar with) and I'm not sure I'm using it right. I see that I can get an output (I assume the angle) in SGL but it seems the input has to be Fixed Point (FXP). I'm using the Zynq on a cRIO-9068.

I've attached a VI snippet with the CORDIC node configured for pipelining.

I configured the Xilinx IP as follows:

Functional Selection: Arc Tan

Architectural Configuration: Parallel

Pipelining Mode: Maximum

Data Format: SignedFraction (no choice allowed there)

Phase Format: Radians

Input Width: 32

Output Width: 32

Round Mode: Truncate

Advanced Configuration Parameters (not really sure what these do):

Iterations: 0

Precision: 0

Coarse Rotation: checked

Compensation Scaling: No Scale Compensation (no choices allowed there)

In the resultant VI (see Pipelined SGL Arctan.png) I thought "s_axis_cartesian_tdata" was the tangent value and "m_axis_dout_tdata" was the angle in radians. But that's not what I seem to be getting. I punch in 1 for "s_axis_cartesian_tdata" and I expect to see 0.785398 for "m_axis_dout_tdata". Instead I see -1.77293E+38. I've set the Execution Mode of my FPGA target to Simulation (Simluated I/O). Don't know if I have to run this on an actual FPGA to see real values.

Thanks in advance for any help.

03-26-2016 12:00 PM

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report to a Moderator

Why not use the FXP method that already exists and do a bit of processing with the float on the host side? Convert to and from FXP on the host and let the algorithm remain optimized on the FPGA. There aren't any real reasons to do what you're asking. You want to take up more fabric on your FPGA to gain almost nothing.

What is it about SGL that attracts you?

03-28-2016 08:27 AM

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report to a Moderator

Thanks for the response. This code will form part of a larger VI. I am not as comfortable with FXP as I would like. As I understand it we need to know the expected ranges and desired precisions of given inputs and calculated outputs to effectively use FXP. Unfortunately in the application we are building the ranges could vary quite a bit as could the desired precisions. Hence we thought SGL might be the best way to go. I'll keep your suggestion in mind and give the FXP approach a deeper look.

Thanks!

04-05-2017 12:29 PM

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report to a Moderator

Hello,

If you want to calculate Arctan in FPGA VI, I strongly suggest you use the 'Atan2' under 'high throughput math function'. It has two inputs, x and y, the output is the phase. You say that you want to use SGL number, however, for this function, you can only use FXP as your input. What you need to do is convert your SGL to FXP, and convert the output to SGL again.