I've got the following problem with some skill code I've written that should export more than one place bound per component to IDF.
The code so far seems stable, but I have issues with calculating the arc radius if it is not between 10 and 170 degrees or 0/180 degrees.
I've created a test case that exhibits the issue. It is attached as boards.zip it contains 2 board files. Case2.brd which is the original board in millimeters and micron_2decimals.brd which is a conversion of case2.brd with 2 decimal points. Looking at this there should be precisely a factor 1000 in difference, this is however not the case, I can get better precision after the translation. Here's the arc data that I can get out using the attached skill program
Arc data millimeters microns
Center x -1.06 -1059.77
Center y -0.122 -122.36
Radius 0.151 150.52
x1 -0.98 -980.0
y1 -0.25 -250.0
x2 -1.14 -1140.0
y2 0.005 5.0Originally posted in cdnusers.org by ejlersen
Load the skill program and run ns_idf to get files named boardname.emp/emn and temp_ptc.emp/emn (the last is the Cadence IDF output)
Look in the boardname.emp file to see the data above, they're listed just below the line with the arc radius in the boardnameemp file.
The boards.zip also contains an Excel spreadsheet that shows the calculation method. This is also written in the skill code, but in a rather complex system due to the fact that the angles has to be correct with respect to sign and degree. I've had customers looking at the output and this should be the only issue left to get the correct results.
Now using mathematics I can calculate the arc radius to the following
In millimeters (case2.brd) I get the angle to be -170.86
And in microns I get the angle to be -179.89
The weird thing here is that using the Cadence built in IDF export functionality gives the same figure in both cases, namely -179.798
So I'm looking for a way to get more precision out of the board using millimeters.
Does anyone have any idea whats going on here? I'm just very curious as to how the built in Cadence IDF export can get the precision from the case2.brd to calculate the angle whereas I cannot do the same