forked from M-Labs/nix-scripts
41 lines
1.3 KiB
Diff
41 lines
1.3 KiB
Diff
|
diff --git a/mirny.py b/mirny.py
|
||
|
index 6c041de..73991b1 100644
|
||
|
--- a/mirny.py
|
||
|
+++ b/mirny.py
|
||
|
@@ -135,7 +135,7 @@ class SR(Module):
|
||
|
)
|
||
|
]
|
||
|
|
||
|
- def connect_ext(self, ext, adr, mask):
|
||
|
+ def connect_ext(self, ext, adr, mask, sdi_passthrough=False):
|
||
|
adr &= mask
|
||
|
self._check_intersection(adr, mask)
|
||
|
self._slaves.append((ext, adr, mask))
|
||
|
@@ -146,12 +146,16 @@ class SR(Module):
|
||
|
stb.ce.eq(self.bus.re),
|
||
|
# don't glitch with &stb.o
|
||
|
ext.sck.eq(self.ext.sck),
|
||
|
- ext.sdi.eq(self.ext.sdi & stb.o),
|
||
|
ext.cs.eq(stb.o),
|
||
|
If(stb.o,
|
||
|
self.ext.sdo.eq(ext.sdo),
|
||
|
),
|
||
|
]
|
||
|
+ # Almazny shares one SDI with 4 devices, it cannot be masked by stb
|
||
|
+ if sdi_passthrough:
|
||
|
+ self.comb += ext.sdi.eq(self.ext.sdi)
|
||
|
+ else:
|
||
|
+ self.comb += ext.sdi.eq(self.ext.sdi & stb.o),
|
||
|
|
||
|
|
||
|
def intersection(a, b):
|
||
|
@@ -360,7 +364,7 @@ class Mirny(Module):
|
||
|
]
|
||
|
|
||
|
ext = Record(ext_layout)
|
||
|
- self.sr.connect_ext(ext, adr=i + 12, mask=mask)
|
||
|
+ self.sr.connect_ext(ext, adr=i + 12, mask=mask, sdi_passthrough=True)
|
||
|
self.comb += [
|
||
|
mezz[i + 3].oe.eq(1),
|
||
|
mezz[i + 3].o.eq(~ext.cs), # Almazny REG_LATCH
|