#!/usr/bin/perl # Perl script to read the partlist and pinlist from Eagle and # output VHDL to instantiate the parts. open(STDOUT, ">pdp8i.inst") || die "pdp8i.inst: $!"; %partlist = (); open(INPUT, "partlist.txt") || die "partlist.txt: $!"; while () { last if /^Part\s/; } while () { y/A-Z/a-z/; next unless /^(\w+)\s+(\w+)\s+(\w+)/; ($part, $value, $device) = ($1, $2, $3); $device =~ s/x$//; $device =~ s/-array$//; warn "$value ne $device" unless $value eq $device; $partlist{$part} = $device; } print "begin\n"; open(INPUT, "pinlist.txt") || die "pinlist.txt: $!"; while () { last if /^Part/; } $comma = 1; undef $part; while () { chop; s/\r$//; y/A-Z/a-z/; if (/^$/) { print ");\n" if $part; $comma = 1; undef $part; next; } if (/^(\w+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/) { # Some parts are in the board, but not the schematic. # (Ignore them). next unless defined $partlist{$1}; ($part, $pad, $signal) = ($1, $2, $5); print "\t$part: $partlist{$part} port map(\n"; } else { die "$_" unless /^\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/; ($pad, $signal) = ($1, $4); next unless $part; # print ",\n" unless $comma++; } # Ignore undefined parts. next if $signal =~ /^[\*]/; next if $signal =~ /^nc$/; next if ($pad eq "a2") and ($signal eq "vcc"); next if ($pad eq "aa2") and ($signal eq "vcc"); next if ($pad eq "b2") and ($signal eq "-15v"); next if ($pad eq "ab2") and ($signal eq "-15v"); next if ($pad eq "c2") and ($signal eq "gnd"); next if ($pad eq "ac2") and ($signal eq "gnd"); next if ($pad eq "t1") and ($signal eq "gnd"); next if ($pad eq "at1") and ($signal eq "gnd"); $signal = "'1'" if $signal eq "vcc"; $signal = "'0'" if $signal eq "gnd"; $signal =~ s/^[\+]//; $signal =~ s/[\+]/_or_/; $signal =~ s/[\-@\/]/_/g; $signal =~ s/[\$]/__/; $signal =~ s/\\$/_l/; $signal = 'end_h' if $signal eq 'end'; $signal =~ s/^/n/ if $signal =~ /^\d/; print ",\n" unless $comma++; print "\t\t$pad => $signal"; $signals{$signal} = 1; $comma = 0; } print "end;\n"; print "\n"; foreach (sort keys %signals) { next if $_ eq "'1'"; next if $_ eq "'0'"; print "\tsignal $_ : bit;\n"; } exit 0;