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