divide by zero error from XILINX ISE

A

Amish Rughoonundon

Hi,
I have this code. XILINX ISE Is giving me an error HDLParsers:866
"Division by zero" during synthesis. Why is that? Thanks for the help

Code:
CONSTANT CLOCK_FREQUENCY        : integer := 50000000;      -- Input
clock frequency in hertz

CONSTANT SWITCHING_FREQUENCY    : integer := 400000;        -- date
drive frequency in hertz

CONSTANT CLOCK_END_RAMP_RESET_A             : integer :=
INTEGER((REAL(1)/(REAL(2)*REAL(SWITCHING_FREQUENCY)))/(REAL(1)/
REAL(CLOCK_FREQUENCY)))-1;
 
P

Paul Uiterlinden

Amish said:
Hi,
I have this code. XILINX ISE Is giving me an error HDLParsers:866
"Division by zero" during synthesis. Why is that? Thanks for the help

Code:
CONSTANT CLOCK_FREQUENCY        : integer := 50000000;      -- Input
clock frequency in hertz

CONSTANT SWITCHING_FREQUENCY    : integer := 400000;        -- date
drive frequency in hertz

CONSTANT CLOCK_END_RAMP_RESET_A             : integer :=
INTEGER((REAL(1)/(REAL(2)*REAL(SWITCHING_FREQUENCY)))/(REAL(1)/
REAL(CLOCK_FREQUENCY)))-1;

I have no idea. One thing I do know: your code looks overcomplicated (to
me).

If I'm not mistaken, the above is identical to:

constant CLOCK_END_RAMP_RESET_A : integer :=
integer(0.5 * real(CLOCK_FREQUENCY) / real(SWITCHING_FREQUENCY)) - 1;

For the rest: I don't have real experience with Xilinx (or any other
synthesizer for that matter).
 
G

Gabor Sz

Hi,
 I have this code. XILINX ISE Is giving me an error HDLParsers:866
"Division by zero" during synthesis. Why is that? Thanks for the help

Code:
CONSTANT CLOCK_FREQUENCY        : integer := 50000000;      -- Input
clock frequency in hertz

CONSTANT SWITCHING_FREQUENCY    : integer := 400000;        -- date
drive frequency in hertz

CONSTANT CLOCK_END_RAMP_RESET_A             : integer :=
INTEGER((REAL(1)/(REAL(2)*REAL(SWITCHING_FREQUENCY)))/(REAL(1)/
REAL(CLOCK_FREQUENCY)))-1;

I'm going to take a wild guess that Xilinx is taking 1/CLOCK_FREQUENCY
and converting it to integer zero, instead of using a real for the
final
divide operation. Perhaps using Paul's simplified version will fix
the problem. The other possibility is that Xilinx's real format has
an underflow for 1/50000000. This might happen if they don't use
enough bits when dividing the mantissas for the intermediate result.
Either way it could be called a bug. IEEE floating point has defined
the temporary precision just for this sort of issue.

-- Gabor
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,017
Latest member
GreenAcreCBDGummiesReview

Latest Threads

Top