123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- #!/usr/bin/env python3
- """
- # TOP2049 Open Source programming suite
- #
- # ZIF socket layout generator
- #
- # Copyright (c) 2010 Michael Buesch <m@bues.ch>
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License along
- # with this program; if not, write to the Free Software Foundation, Inc.,
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- """
- from libtoprammer.layout_generator import *
- from libtoprammer.main import *
- from libtoprammer.chip import *
- import getopt
- import sys
- class FakeTOP(object):
- def __init__(self, topType):
- self.topType = topType
- def getProgrammerType(self):
- return self.topType
- def usage():
- print("Toprammer ZIF socket layout generator v%s" % VERSION)
- print("")
- print("Usage: %s [OPTIONS]" % sys.argv[0])
- print("")
- print("Mandatory options:")
- print(" -d|--device TOPxxxx The TOPxxxx device that is used.")
- print(" Possible choices are: TOP2049")
- print(" -p|--package DIPxx The package type of the DUT.")
- print(" Package may also be the name of a supported chip.")
- print(" In this case, --vcc, --vpp and --gnd are ignored.")
- print(" -v|--vcc PIN Set VCC pin number, relative to the package.")
- print(" -P|--vpp PIN(s) Set VPP pin number(s), relative to the package.")
- print(" May be one pin number or a comma separated list of pin numbers.")
- print(" May be omitted or NONE, if no VPP pin is required.")
- print(" -g|--gnd PIN Set GND pin number, relative to the package.")
- print("")
- print("Optional:")
- print(" -h|--help Print this help text")
- print(" -I|--only-insert Only show insert-layout")
- print(" -S|--only-supply Only show supply-layout")
- def main(argv):
- package = None
- programmer = None
- vccPin = None
- vppPins = None
- gndPin = None
- showInsert = True
- showSupply = True
- try:
- (opts, args) = getopt.getopt(argv[1:],
- "d:p:hv:P:g:IS",
- [ "help", "device=", "package=", "vcc=", "vcc=", "vpp=", "gnd=",
- "only-insert", "only-supply", ])
- for (o, v) in opts:
- if o in ("-h", "--help"):
- usage()
- return 0
- if o in ("-d", "--device"):
- programmer = v
- if o in ("-p", "--package"):
- package = v
- if o in ("-v", "--vcc", "--vcc"):
- vccPin = int(v)
- if o in ("-P", "--vpp"):
- if v.upper() == "NONE":
- vppPins = None
- else:
- vppPins = []
- for v in v.split(","):
- vppPins.append(int(v))
- if o in ("-g", "--gnd"):
- gndPin = int(v)
- if o in ("-I", "--only-insert"):
- showInsert = True
- showSupply = False
- if o in ("-S", "--only-supply"):
- showInsert = False
- showSupply = True
- if not programmer:
- print("-d|--device is mandatory!\n")
- raise ValueError()
- if not package:
- print("-p|--package is mandatory!\n")
- raise ValueError()
- generator = None
- try:
- chipDesc = ChipDescription.findOne(
- package, allowBroken=True)
- chip = chipDesc.chipImplClass.createInstance(
- FakeTOP(programmer), chipDesc)
- except (TOPException) as e:
- chip = None
- if vccPin is None or gndPin is None:
- print("-v|--vcc and -g|--gnd " +\
- "are mandatory, if a package type is specified.\n")
- raise ValueError()
- except (getopt.GetoptError, ValueError, KeyError) as e:
- usage()
- return 1
- except (TOPException) as e:
- print(e)
- return 1
- try:
- if chip:
- try:
- generator = chip.generator
- except (AttributeError) as e:
- print("The chip %s does not have a layout autogenerator. "\
- "You must specify the package type, -v, -P and -g manually." %\
- package)
- return 1
- else:
- generator = createLayoutGenerator(package)
- generator.setProgrammerType(programmer.upper())
- generator.setPins(vccPin, vppPins, gndPin)
- generator.recalculate()
- if showInsert:
- print("Chip insert layout:\n")
- print(generator.zifLayoutAsciiArt())
- if showSupply:
- print("\nSupply voltage pins on the ZIF:\n")
- print(generator.zifPinAssignments())
- except (TOPException) as e:
- print(e)
- return 1
- return 0
- if __name__ == "__main__":
- sys.exit(main(sys.argv))
|