123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- """
- # TOP Open Source programming suite
- #
- # TOP853 VPP layout definitions
- #
- # Copyright (c) 2022 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.
- """
- import sys
- if __name__ == "__main__":
- sys.path.insert(0, sys.path[0] + "/../..")
- from libtoprammer.shiftreg_layout import *
- class VPPLayout(ShiftregLayout):
- # "shiftreg_masks" is a dump of the VPP shiftregister states.
- # The array index is the layout ID.
- # The array entries are the inverted shift register VPP control outputs.
- # All non-VPP control outputs are zero.
- # The least significant byte is the first shift register in the chain.
- shiftreg_masks = (
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2000, 0x0000, 0x1000, # 0x00
- 0x0000, 0x0800, 0x0400, 0x0200, 0x0100, 0x0000, 0x0000, 0x0000, # 0x08
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0000, 0x0000, 0x0000, # 0x10
- 0x0000, 0x0000, 0x0001, 0x0000, 0x0002, 0x0008, 0x0010, 0x0080, # 0x18
- 0x0000, 0x0000, 0x0000, 0x4000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x20
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x28
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x30
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x38
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x40
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x48
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x50
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x58
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x60
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x68
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x70
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x78
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x80
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x88
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x90
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0x98
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0xA0
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0xA8
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0xB0
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0xB8
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0xC0
- 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0xC8
- #0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0xD0
- #0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0xD8
- #0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0xE0
- #0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0xE8
- #0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0xF0
- #0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, # 0xF8
- )
- # "shreg2zif_map" is a mapping of the shift register outputs
- # to the ZIF socket pins
- shreg2zif_map = {
- # SHREG.PIN : ZIF_PIN
- "0.0" : 26, # QP9
- "0.1" : 28, # QP10
- "0.2" : 20, # QP11
- "0.3" : 29, # QP12
- "0.4" : 30, # QP13
- "0.7" : 31, # QP40
- "1.0" : 12, # QP1
- "1.1" : 11, # QP2
- "1.2" : 10, # QP3
- "1.3" : 9, # QP4
- "1.4" : 7, # QP5
- "1.5" : 5, # QP6
- "1.6" : 35, # QP7
- "1.7" : 40, # QP8 + D200
- }
- def __init__(self, top=None):
- ShiftregLayout.__init__(self, nrZifPins=40, nrShiftRegs=2)
- self.top = top
- def minVoltage(self):
- #TODO
- "Get the min supported voltage"
- return 5
- def maxVoltage(self):
- #TODO
- "Get the max supported voltage"
- return 21
- def setLayoutID(self, id):
- self.top.cmdLoadVPPLayout(id)
- if __name__ == "__main__":
- print("ZIF socket VPP layouts")
- print(VPPLayout(None))
|