diff --git a/cumulus/src/plugins/alpha/block/iospecs.py b/cumulus/src/plugins/alpha/block/iospecs.py index a934fa6b..c0043cc5 100644 --- a/cumulus/src/plugins/alpha/block/iospecs.py +++ b/cumulus/src/plugins/alpha/block/iospecs.py @@ -67,6 +67,9 @@ class IoPadSpec ( object ): self._id = IoPadSpec.id IoPadSpec.id += 1 + def setAnalog ( self ): + self.side |= IoPin.ANALOG + def addNets ( self, nets ): self.nets += nets @@ -116,11 +119,13 @@ class IoSpecs ( object ): actual_side |= IoPin.A_END self.addIoPadSpec( padName, actual_side) - def loadFromPinmux ( self, fileName ): + def loadFromPinmux ( self, fileName , cheat_dont_do_analog=False): """ Load ioPadsSpec from a LibreSOC generated pinmux file in JSON format. + The cheat_dont_do_analog is there, sigh, because nsxlib doesn't + have analog pads. it's a terrible hack. """ - print( ' o Loading I/O pad specifications from "{}".'.format(fileName) ) + print( ' o Loading I/O pad specifications from "%s".' % fileName ) if not os.path.isfile(fileName): raise ErrorMessage( 2, [ 'IoSpecs.loadFromPinmux(): ' 'JSON pinmux file not found.' @@ -141,7 +146,12 @@ class IoSpecs ( object ): .format(padName) )) continue end = None - if padDatas[-1] in '+-*': end = -1 + # remove the direction info: + output - input * bi-directional + if padDatas[-1][-1] in '+-*': end = -1 + # check if pad is analog or not: last spec item starts with "A" + if padDatas[-1][0] == 'A' and not cheat_dont_do_analog: + self._ioPadsLUT[padName].setAnalog() + # add the nets to the pad self._ioPadsLUT[padName].addNets( padDatas[1:end] ) trace( 560, '-' )