/* Dieses ULP berechnet alle Signallaengen eines Layouts und die zu- * gehoerige Frequenz (f=c/l) und erzeugt eine Textdatei LENGTH.TXT, die * alle Signale nach Frequenz bzw Laenge sortiert enthaelt. * Bei der Frequenzberechnung handelt es sich um eine ganz einfache * Umrechnung, die eine erste Abschaetzung bzgl. Stoerstrahlung erlaubt. * * * This ULP output a list LENGTH.TXT of all signals of a layout sorted by its * length and shows the corresponding frequency. * * * Richard Hammerl 17.08.1998 */ real f, WL, WLtotal ; real WireLength(real x1,real x2,real y1,real y2) { WL = sqrt(pow(x2-x1,2) + pow(y2-y1,2)); //Berechnung der Wirelaenge WL return WL; } real c = 299800; // Lichtgechwindigkeit Vakuum in [km/s] real Frequency(real c, real l) { real f; f = c/l ; // Berechnung der Frequenz return f; } int index[]; real Length[], Freq[] ; string Signal[]; int n = 0; if (board) board(B) { output ("length.txt") { printf("%s\n\n", EAGLE_SIGNATURE); printf("List of signal length and its frequency\n"); printf("exported from %s\n at %s\n\n", B.name, t2string(time())); B.signals(S) { WLtotal = 0; S.wires(W) { WL = WireLength(u2mm(W.x2),u2mm(W.x1),u2mm(W.y2),u2mm(W.y1)); WLtotal += WL; } if (WLtotal != 0) { f = Frequency(c, WLtotal); Signal[n] = S.name; Length[n] = WLtotal; Freq[n] = (c/WLtotal); ++n; } } printf("Signal f [MHz] l [mm]\n\n"); sort(n, index, Freq); for (int i = 0; i < n; ++i) printf("%-8s %9.3f %8.4f\n", Signal[index[i]], Freq[index[i]], Length[index[i]]); } }