chiark / gitweb /
support +/-<n>cy adjustments; allow trailing #- or ;-comments to have preceding white...
authorian <ian>
Thu, 29 Dec 2005 17:03:26 +0000 (17:03 +0000)
committerian <ian>
Thu, 29 Dec 2005 17:03:26 +0000 (17:03 +0000)
detpic/make-clocks

index 2977216cbc29a5336fa8c6f8f0e6b56af6838dde..bb6beb3ba477733380240ad8a81398614fa1243a 100755 (executable)
@@ -97,6 +97,7 @@ sub do_T0ov ($) {
                32-0100 64-0101 128-0110 256-0111)], 1, 1);
 }
 
+sub do_T0ov8  { do_T0ov(8);  }
 sub do_T0ov16 { do_T0ov(16); }
 sub do_T1ov { do_T13ov(1); }
 sub do_T3ov { do_T13ov(3); }
@@ -112,29 +113,34 @@ sub provide_interval ($$$$) {
 }
 
 sub doline () {
-    my ($orgname,$mswant,$specd,$unit,$how);
+    my ($orgname,$mswant,$specd,$unit,$cy,$how,$baseinterval);
     chomp;
-    s/[;\#].*//;
+    s/\s*[;\#].*//;
     return unless m/^\S/;
     die "$_ ?" unless
-       m/^(\w+)\s+(M|S|MS)\s+(\w+)\s+([0-9.]+)(s|ms|us|ns|Hz|kHz|MHz)$/;
-    ($orgname,$mswant,$how,$interval,$unit) = ($1,$2,$3,$4,$5);
-    $specd= $interval.$unit;
-    if ($unit =~ m/M/) { $interval *= 1.e6; }
-    if ($unit =~ m/k/) { $interval *= 1.e3; }
-    if ($unit =~ m/m/) { $interval *= 1.e-3; }
-    if ($unit =~ m/u/) { $interval *= 1.e-6; }
-    if ($unit =~ m/n/) { $interval *= 1.e-9; }
-    if ($unit =~ s/Hz//) { $interval = 1.0 / $interval; }
-    p(";========== $orgname ($specd, $interval) ==========\n");
-    provide_interval($orgname, $interval, 'us', 1.e-6);
-    provide_interval($orgname, $interval, 'ms', 1.e-3);
-    provide_interval($orgname, $interval, 's', 1.0);
+       m/^(\w+)\s+(M|S|MS)\s+(\w+)\s+([0-9.]+)(s|ms|us|ns|Hz|kHz|MHz)((?:[-+][0-9.]+cy)?)$/;
+    ($orgname,$mswant,$how,$baseinterval,$unit,$cy) = ($1,$2,$3,$4,$5,$6,$7);
+    $specd= $baseinterval.$unit.$cy;
+    if ($unit =~ m/M/) { $baseinterval *= 1.e6; }
+    if ($unit =~ m/k/) { $baseinterval *= 1.e3; }
+    if ($unit =~ m/m/) { $baseinterval *= 1.e-3; }
+    if ($unit =~ m/u/) { $baseinterval *= 1.e-6; }
+    if ($unit =~ m/n/) { $baseinterval *= 1.e-9; }
+    if ($unit =~ s/Hz//) { $baseinterval = 1.0 / $baseinterval; }
+    if ($cy =~ s/cy$//) { $cy *= 4.0; }
+    elsif ($cy = m//) { $cy = 0.0; }
+    else { die "$cy ?"; }
+    p(";========== $orgname ($specd: ${baseinterval}s, ${cy}cy) ==========\n");
+    provide_interval($orgname, $baseinterval, 'us', 1.e-6);
+    provide_interval($orgname, $baseinterval, 'ms', 1.e-3);
+    provide_interval($orgname, $baseinterval, 's', 1.0);
     foreach $ms (qw(m s)) {
        next unless $mswant =~ m/$ms/i;
        $msclock= "${ms}clock";
        die $msclock unless exists $defs{$msclock};
        $msclock= $defs{$msclock};
+       $interval= $baseinterval + $cy / ($msclock * 1000.0);
+       p(";---------- $orgname, ${interval}s, ${msclock}kHz ----------\n");
        $name = $orgname.'_'.($ms eq 'm' ? 'master' : 'slave');
        &{ "do_$how" };
     }