projects
/
pinmux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
23ae1b0
)
separate out bus interface to different class
author
Luke Kenneth Casson Leighton
<lkcl@lkcl.net>
Tue, 24 Jul 2018 11:40:21 +0000
(12:40 +0100)
committer
Luke Kenneth Casson Leighton
<lkcl@lkcl.net>
Tue, 24 Jul 2018 11:40:21 +0000
(12:40 +0100)
src/bsv/interface_decl.py
patch
|
blob
|
history
diff --git
a/src/bsv/interface_decl.py
b/src/bsv/interface_decl.py
index 86487a7c431be24ed4847c51de5ea924110522f0..1b75e21cca0d59a318f461cba8b5166c765fb706 100644
(file)
--- a/
src/bsv/interface_decl.py
+++ b/
src/bsv/interface_decl.py
@@
-424,34
+424,47
@@
class IOInterface(Interface):
return generic_io.format(*args)
return generic_io.format(*args)
-class Interface
LCD(Interface
):
+class Interface
Bus(object
):
- def get_n_iopins(self, pins): # HACK! assume in/out/outen so div by 3
- return len(pins)
+ def __init__(self, namelist, bitspec, filterbus):
+ self.namelist = namelist
+ self.bitspec = bitspec
+ self.fbus = filterbus # filter identifying which are bus pins
+
+ def get_nonbuspins(self):
+ return filter(lambda x: not x.name_.startswith(self.fbus), self.pins)
+
+ def get_buspins(self):
+ return filter(lambda x: x.name_.startswith(self.fbus), self.pins)
def ifacepfmt(self, *args):
def ifacepfmt(self, *args):
- pins =
filter(lambda x: not x.name_.startswith('out'), self.pins
)
+ pins =
self.get_nonbuspins(
)
res = '\n'.join(map(self.ifacepfmtdecpin, pins)).format(*args)
res = res.format(*args)
res = '\n'.join(map(self.ifacepfmtdecpin, pins)).format(*args)
res = res.format(*args)
- pins =
filter(lambda x: x.name_.startswith('out'), self.pins
)
+ pins =
self.get_buspins(
)
plen = self.get_n_iopins(pins)
plen = self.get_n_iopins(pins)
- return "\n" + res + """
- interface Put#(Bit#({0})) data_out;
-""".format(plen)
+ res += '\n'
+ template = " interface {1}#(Bit#({0})) {2};\n"
+ for i, n in enumerate(self.namelist):
+ if not n:
+ continue
+ ftype = 'Get' if i == 2 else "Put"
+ res += template.format(plen, ftype, n)
+
+ return "\n" + res
def ifacedef2(self, *args):
def ifacedef2(self, *args):
- pins =
filter(lambda x: not x.name_.startswith('out'), self.pins
)
+ pins =
self.get_nonbuspins(
)
res = '\n'.join(map(self.ifacedef2pin, pins))
res = res.format(*args)
res = '\n'.join(map(self.ifacedef2pin, pins))
res = res.format(*args)
- pins =
filter(lambda x: x.name_.startswith('out'), self.pins
)
+ pins =
self.get_buspins(
)
plen = self.get_n_iopins(pins)
bitspec = "Bit#({0})".format(plen)
return '\n' + res + self.vectorifacedef2(pins, plen,
plen = self.get_n_iopins(pins)
bitspec = "Bit#({0})".format(plen)
return '\n' + res + self.vectorifacedef2(pins, plen,
- ['data_out', None, None],
- bitspec, *args) + '\n'
+ self.namelist, bitspec, *args) + '\n'
def ifacedef3pin(self, idx, pin):
decfn = self.ifacefmtdecfn2
def ifacedef3pin(self, idx, pin):
decfn = self.ifacefmtdecfn2
@@
-463,52
+476,32
@@
class InterfaceLCD(Interface):
return pin.ifacedef3(idx, outfn, self.ifacefmtinfn,
decfn)
return pin.ifacedef3(idx, outfn, self.ifacefmtinfn,
decfn)
-class InterfaceNSPI(Interface):
- def get_n_iopins(self, pins): # HACK! assume in/out/outen so div by 3
- return len(pins) / 3
+class InterfaceLCD(InterfaceBus, Interface):
- def
ifacepfmt
(self, *args):
- pins = filter(lambda x: not x.name_.startswith('io'), self.pins)
-
res = '\n'.join(map(self.ifacepfmtdecpin, pins)).format(*args
)
-
res = res.format(
*args)
+ def
__init__
(self, *args):
+ InterfaceBus.__init__(self, ['data_out', None, None],
+
"Bit#({0})", "out"
)
+
Interface.__init__(self,
*args)
- pins = filter(lambda x: x.name_.startswith('io'), self.pins)
- plen = self.get_n_iopins(pins)
+ def get_n_iopins(self, pins): # HACK! assume in/out/outen so div by 3
+ return len(pins)
- return "\n" + res + """
- interface Put#(Bit#({0})) io_out;
- interface Put#(Bit#({0})) io_out_en;
- interface Get#(Bit#({0})) io_in;
-""".format(plen)
- def ifacedef2(self, *args):
- pins = filter(lambda x: not x.name_.startswith('io'), self.pins)
- res = '\n'.join(map(self.ifacedef2pin, pins))
- res = res.format(*args)
+class InterfaceNSPI(InterfaceBus, Interface):
- pins = filter(lambda x: x.name_.startswith('io'), self.pins)
- plen = self.get_n_iopins(pins)
- bitspec = "Bit#({0})".format(plen)
- return '\n' + res + self.vectorifacedef2(pins, plen,
- ['io_out', 'io_out_en', 'io_in'],
- bitspec, *args) + '\n'
+ def __init__(self, *args):
+ InterfaceBus.__init__(self, ['io_out', 'io_out_en', 'io_in'],
+ "Bit#({0})", "io")
+ Interface.__init__(self, *args)
- def ifacedef3pin(self, idx, pin):
- decfn = self.ifacefmtdecfn2
- outfn = self.ifacefmtoutfn
- # print pin, pin.outenmode
- if pin.outenmode:
- decfn = self.ifacefmtdecfn3
- outfn = self.ifacefmtoutenfn
- return pin.ifacedef3(idx, outfn, self.ifacefmtinfn,
- decfn)
+ def get_n_iopins(self, pins): # HACK! assume in/out/outen so div by 3
+ return len(pins) / 3
class InterfaceEINT(Interface):
""" uses old-style (non-get/put) for now
"""
class InterfaceEINT(Interface):
""" uses old-style (non-get/put) for now
"""
-
def ifacepfmt(self, *args):
res = '\n'.join(map(self.ifacefmtdecpin, self.pins)).format(*args)
return '\n' + res # pins is a list
def ifacepfmt(self, *args):
res = '\n'.join(map(self.ifacefmtdecpin, self.pins)).format(*args)
return '\n' + res # pins is a list