r5875 - trunk/eda/boom

werner at docs.openmoko.org werner at docs.openmoko.org
Thu Apr 1 19:09:22 CEST 2010


Author: werner
Date: 2010-04-01 19:09:21 +0200 (Thu, 01 Apr 2010)
New Revision: 5875

Modified:
   trunk/eda/boom/bom2part
Log:
Parameters can now be specified as minimum/maximum values, not just as exact
matches.

- boom/bom2part: if the units match, a numerical comparison is now done for
  parameters beginning with >, >=, <, or <=



Modified: trunk/eda/boom/bom2part
===================================================================
--- trunk/eda/boom/bom2part	2010-04-01 17:07:05 UTC (rev 5874)
+++ trunk/eda/boom/bom2part	2010-04-01 17:09:21 UTC (rev 5875)
@@ -11,6 +11,42 @@
 }
 
 
+sub scale
+{
+    local ($v, $m) = @_;
+
+    return $v*1e-12 if $m eq "p";
+    return $v*1e-9 if $m eq "n";
+    return $v*1e-6 if $m eq "u";
+    return $v*1e-3 if $m eq "m";
+    return $v*1e3 if $m eq "k";
+    return $v*1e6 if $m eq "M";
+    return $v*1e9 if $m eq "G";
+    return $v if $m eq "";
+    die "unknown multiplier \"$m\"";
+}
+
+
+sub compat
+{
+    local ($a, $b) = @_;	# $a = part char., $b = component spec.
+
+    return 1 if $a eq $b;
+    return 0 unless $a =~ /^([0-9.]+)([GMkmunp]?)/;
+    my ($av, $am, $au) = ($1, $2, $');
+    return 0 unless $b =~ /^(>|>=|<|<=)([0-9.]+)([GMkmunp]?)/;
+    my ($rel, $bv, $bm, $bu) = ($1, $2, $3, $');
+    return 0 if $au ne $bu;
+    $av = &scale($av, $am);
+    $bv = &scale($bv, $bm);
+    return $av > $bv if $rel eq ">";
+    return $av >= $bv if $rel eq ">=";
+    return $av < $bv if $rel eq "<";
+    return $av <= $bv if $rel eq "<=";
+    die;
+}
+
+
 if ($ARGV[0] eq "-d") {
     $debug = 1;
     shift @ARGV;
@@ -71,7 +107,7 @@
 		next COMP;
 		next;
 	    }
-	    if ($chr{$c}{$_} eq $field{$_}) {
+	    if (&compat($chr{$c}{$_}, $field{$_})) {
 		print STDERR "== $chr{$c}{$_}\n" if $debug;
 	    } else {
 		print STDERR "!= $chr{$c}{$_}\n" if $debug;




More information about the commitlog mailing list