#!/usr/bin/perl -w
+# usage ../make-clocks [<input-file> ...] -Dmclock=khz -Dsclock=khz
use strict qw(vars);
use POSIX;
+sub p ($) { print $_[0] or die $!; }
+
our (%defs);
+
+p("; autogenerated - do not edit\n");
+p("; $0 @ARGV\n");
while ($ARGV[$#ARGV] =~ m/^\-/) {
- $_ = pop @argv;
+ $_ = pop @ARGV;
last if m/^\-\-$/;
die unless m/^\-D(\w+)\=(\w+)$/;
$defs{$1}= $2;
# ie cycles = interval * foscscale * msclock / prescale
# or msclock = cycles * prescale / (foscscale * interval)
-sub p ($) { print $_[0] or die $!; }
-
sub scaleable ($$$$$) {
my ($width, $foscscale, $scalebitnums, $scales, $deadcycles) = @_;
my ($maxcycles, $scalespec, $scalebits);
sub do_T3ov { do_T13ov(3); }
sub doline () {
- my ($orgname,$mswant,$unit,$how);
+ my ($orgname,$mswant,$specd,$unit,$how);
chomp;
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; }
die $msclock unless exists $defs{$msclock};
$msclock= $defs{$msclock};
$name = $orgname.'_'.($ms eq 'm' ? 'master' : 'slave');
- p(";---------- $name ----------\n");
+ p(";---------- $name ($specd, $interval) ----------\n");
&{ "do_$how" };
}
}