divide by zero error from XILINX ISE

A

Amish Rughoonundon

Guest
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:1:5118223ae0]
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;
[/code:1:5118223ae0]
 
Amish Rughoonundon wrote:

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:1:f389a9b906]
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;
[/code:1:f389a9b906]
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).

--
Paul Uiterlinden
www.aimvalley.nl
e-mail addres: remove the not.
 
On Jun 10, 11:53 am, Amish Rughoonundon <amishrughoonun...@gmail.com>
wrote:
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:1:beab46322d]
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;
[/code:1:beab46322d]
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
 

Welcome to EDABoard.com

Sponsor

Back
Top