📄 hyperlynx-4_11.ulp
字号:
unknownIC = yes; // set component as unknown
ICname = E.name; // remember component reference designator
ICvalue = E.value; // remember component value name (IC number)
// parse reference designators?
if ( strstr( ICname, "IC" ) == 0 ) {
if ( isdigit( ICname[2] ) ) unknownIC = no;
}
else if ( isdigit( ICname[1] ) ) {
if ( strchr( ICname, 'U' ) == 0 ) unknownIC = no;
}
if ( unknownIC == no ) {
unknownIC = yes; // reset component as unknown
if ( strstr( ICvalue, "74" ) == 0 ) {
ICstate = 0;
ICvaluelen = strlen( ICvalue );
ICccnt = 0;
for ( int i=2; i<ICvaluelen; i++ ) {
if ( isalpha( ICvalue[i] ) ) {
ICccnt++;
}
}
unknownIC = no;
if ( ICccnt > 0 ) {
ICreflib = "74" + strsub( ICvalue, 2, ICccnt ) + ".PML";
}
else {
ICreflib = "74TTL.PML";
}
} else
if ( strstr( ICvalue, "40" ) == 0 ) {
unknownIC = no;
ICreflib = "74HC.PML";
ICvalue = "74HC" + ICvalue;
}
if ( unknownIC == no ) {
printf("%s, %s, %s",ICname,ICreflib,ICvalue);
ICpn =E.package.name;
if ( strstr( ICpn,"TSSOP" ) != -1 ) {
printf("_TSSOP");
}
else if ( strstr( ICpn,"TQFP" ) != -1 ) {
printf("_TQFP");
}
else if ( strstr( ICpn,"SSOP" ) != -1 ) {
printf("_SSOP");
}
else if ( strstr( ICpn,"PLCC" ) != -1 ) {
printf("_PLCC");
}
else if ( strstr( ICpn,"LCC" ) != -1 ) {
printf("_LCC");
}
else if ( strstr( ICpn,"DIP" ) != -1 ) {
printf("_DIP");
}
else if ( strstr( ICpn,"QFP" ) != -1 ) {
printf("_QFP");
}
else if ( strstr( ICpn,"BGA" ) != -1 ) {
printf("_BGA");
}
else if ( strstr( ICpn,"PGA" ) != -1 ) {
printf("_PGA");
}
else if ( strstr( ICpn,"DIL" ) != -1 ) {
printf("_DIP");
}
else if ( strstr( ICpn,"DIP" ) != -1 ) {
printf("_DIP");
}
else if ( strstr( ICpn,"SO" ) != -1 ) {
printf("_SSOP");
}
printf("\n");
}
}
}
}
}
if ( GenerateHyperlynxFile == no ) {
exit( EXIT_SUCCESS );
}
output( filesetext( B.name, ".HYP" ) ) {
printdivider();
printf("%s", usage);
printf("* %s\n*\n", Version);
printf("* %s\n*\n", EAGLE_SIGNATURE);
printf("* HyperLynx Board exported from:\n");
printf("* %s\n", B.name);
printf("* At %s\n*\n", t2string(time()));
if (project.schematic) {
printf("* Schematic is loaded.\n");
}
else {
printf("* Schematic NOT is loaded.\n");
}
printf("*\n\n");
printf("{VERSION=2.10} Compatible with Hyperlynx version 2.10.\n");
printf("{UNITS=ENGLISH WEIGHT}\n\n");
// BOARD OVERALL AREA DIMENSIONS
// Writes the board dimensions found on layer 20
printheader("Board Dimensions");
printf("{BOARD\n");
// wires on the dimension layer
B.wires(W) {
if (W.layer == 20 ) {
if (W.curve) {
// arcs in the dimension layer
printf("(PERIMETER_ARC X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f XC=%5.*f YC=%5.*f R=%5.*f) Arcs: Board Outline Arc is CCW\n",
precision_of_nets,u2inch(W.arc.x1),precision_of_nets,u2inch(W.arc.y1),
precision_of_nets,u2inch(W.arc.x2),precision_of_nets,u2inch(W.arc.y2),
precision_of_nets,u2inch(W.arc.xc),precision_of_nets,u2inch(W.arc.yc),
precision_of_nets,u2inch(W.arc.radius) );
}
else {
printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Wires: From Board\n",
precision_of_perimeter,u2inch(W.x1),precision_of_perimeter,u2inch(W.y1),
precision_of_perimeter,u2inch(W.x2),precision_of_perimeter,u2inch(W.y2));
}
}
}
// rectangles on the dimension layer
B.rectangles(R) {
if (R.layer == 20 ) {
printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Board : Bottom\n",
precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y1),
precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y1) );
printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Board : Right\n",
precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y1),
precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y2) );
printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Board : Top\n",
precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y2),
precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y2) );
printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Board : Left\n",
precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y2),
precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y1) );
}
}
// polygons on the dimension layer
B.polygons(P) {
if (P.layer == 20 ) {
P.wires(W) {
if (W.layer == 20 ) {
printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Polygon Wires: From Board\n",
precision_of_perimeter,u2inch(W.x1),precision_of_perimeter,u2inch(W.y1),
precision_of_perimeter,u2inch(W.x2),precision_of_perimeter,u2inch(W.y2));
}
}
}
}
// circles in the dimension layer
B.circles(C) {
if (C.layer == 20 ) {
printf("(PERIMETER_ARC X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f XC=%5.*f YC=%5.*f R=%5.*f) Circles: Board Outline Arc is CCW\n",
precision_of_nets,u2inch(C.x),precision_of_nets,u2inch(C.y+C.radius),
precision_of_nets,u2inch(C.x),precision_of_nets,u2inch(C.y+C.radius),
precision_of_nets,u2inch(C.x),precision_of_nets,u2inch(C.y),
precision_of_nets,u2inch(C.radius) );
}
}
// holes in the board
int halfdrilldiameter;
B.holes(H) {
halfdrilldiameter = H.drill / 2;
printf("(PERIMETER_ARC X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f XC=%5.*f YC=%5.*f R=%5.*f) Holes: Board Outline Arc is CCW\n",
precision_of_nets,u2inch(H.x),precision_of_nets,u2inch(H.y+halfdrilldiameter),
precision_of_nets,u2inch(H.x),precision_of_nets,u2inch(H.y+halfdrilldiameter),
precision_of_nets,u2inch(H.x),precision_of_nets,u2inch(H.y),
precision_of_nets,u2inch(halfdrilldiameter) );
}
// package wires on the dimension layer
B.elements(E) {
E.package.wires(W) {
if (W.layer == 20 ) {
if (W.curve) {
// package arcs in the dimension layer
printf("(PERIMETER_ARC X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f XC=%5.*f YC=%5.*f R=%5.*f) Arcs: Board Outline Arc is CCW Package %s in %s.LBR\n",
precision_of_nets,u2inch(W.arc.x1),precision_of_nets,u2inch(W.arc.y1),
precision_of_nets,u2inch(W.arc.x2),precision_of_nets,u2inch(W.arc.y2),
precision_of_nets,u2inch(W.arc.xc),precision_of_nets,u2inch(W.arc.yc),
precision_of_nets,u2inch(W.arc.radius),
E.package.name,E.package.library );
}
else {
printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Wires: From Package %s in %s.LBR\n",
precision_of_perimeter,u2inch(W.x1),precision_of_perimeter,u2inch(W.y1),
precision_of_perimeter,u2inch(W.x2),precision_of_perimeter,u2inch(W.y2),
E.package.name,E.package.library);
}
}
}
// package rectangles on the dimension layer
E.package.rectangles(R) {
if (R.layer == 20 ) {
printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Package %s in %s.LBR : Bottom\n",
precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y1),
precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y1),
E.package.name,E.package.library );
printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Package %s in %s.LBR : Right\n",
precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y1),
precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y2),
E.package.name,E.package.library );
printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Package %s in %s.LBR : Top\n",
precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y2),
precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y2),
E.package.name,E.package.library );
printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Package %s in %s.LBR : Left\n",
precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y2),
precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y1),
E.package.name,E.package.library );
}
}
// package polygons on the dimension layer
E.package.polygons(P) {
if (P.layer == 20 ) {
P.wires(W) {
if (W.layer == 20 ) {
printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Polygon Wires: From Package %s in %s.LBR\n",
precision_of_perimeter,u2inch(W.x1),precision_of_perimeter,u2inch(W.y1),
precision_of_perimeter,u2inch(W.x2),precision_of_perimeter,u2inch(W.y2),
E.package.name,E.package.library);
}
}
}
}
// package circles in the dimension layer
E.package.circles(C) {
if (C.layer == 20 ) {
printf("(PERIMETER_ARC X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f XC=%5.*f YC=%5.*f R=%5.*f) Circles: Board Outline Arc is CCW Package %s in %s.LBR\n",
precision_of_nets,u2inch(C.x),precision_of_nets,u2inch(C.y+C.radius),
precision_of_nets,u2inch(C.x),precision_of_nets,u2inch(C.y+C.radius),
precision_of_nets,u2inch(C.x),precision_of_nets,u2inch(C.y),
precision_of_nets,u2inch(C.radius),
E.package.name,E.package.library );
}
}
// package holes
int halfdrilldiameter;
E.package.holes(H) {
halfdrilldiameter = H.drill / 2;
printf("(PERIMETER_ARC X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f XC=%5.*f YC=%5.*f R=%5.*f) Holes: Board Outline Arc is CCW Package %s in %s.LBR\n",
precision_of_nets,u2inch(H.x),precision_of_nets,u2inch(H.y+halfdrilldiameter),
precision_of_nets,u2inch(H.x),precision_of_nets,u2inch(H.y+halfdrilldiameter),
precision_of_nets,u2inch(H.x),precision_of_nets,u2inch(H.y),
precision_of_nets,u2inch(halfdrilldiameter),
E.package.name,E.package.library );
}
}
printf("}\n\n");
// LAYER INFORMATION
printheader("Thickness of Copper and Dielectric Layer Data");
if ( UseBoardStackUp == yes ) {
printf("{STACKUP\n");
layer_counter = 0;
B.layers(L) CountLayers(L);
Total_Layers = layer_counter; // remember active layers
layer_counter = 0;
B.layers(L) PrintLayer(L);
printf("}\n");
// TOTAL BOARD THICKNESS
printf("* Total Board Thickness %6.4f inch\n\n",Total_Board_Thickness);
}
else {
printf("* No PCB Thickness Data Generated !!! \n*\n\n");
}
// PACKAGES ON THE BOARD
printheader("Components");
printf("{DEVICES\n");
int unknowncomponenttype, pincount, componentspace;
string componentname;
string componentvalue;
B.elements(E) {
// get the number of pins
pincount = 0;
E.package.contacts(C) {
pincount++;
}
// set component as unknown
unknowncomponenttype = yes;
// remember component reference designator
componentname = E.name;
// truncate component values at the first space
// ASK HYPERLYNX : what about something like .1u 50v?
componentvalue = E.value;
if ( TruncateComponentValues == yes )
if ( ( componentspace = strchr( componentvalue, ' ' ) ) != -1 )
componentvalue = strsub( componentvalue, 0, componentspace );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -