+++ /dev/null
-from migen.fhdl.structure import *
-from migen.fhdl.module import Module
-from migen.bank.description import *
-from migen.genlib.misc import optree
-from migen.genlib.cdc import MultiReg
-
-class CounterADC(Module, AutoCSR):
- def __init__(self, charge, sense, width=24):
- if not isinstance(sense, collections.Iterable):
- sense = [sense]
-
- channels = len(sense)
-
- self._start_busy = CSR()
- self._overflow = CSRStatus(channels)
- self._polarity = CSRStorage()
-
- count = Signal(width)
- busy = Signal(channels)
-
- res = []
- for i in range(channels):
- res.append(CSRStatus(width, name="res"+str(i)))
- setattr(self, "_res"+str(i), res[-1])
-
- any_busy = Signal()
- self.comb += [
- any_busy.eq(optree("|",
- [busy[i] for i in range(channels)])),
- self._start_busy.w.eq(any_busy)
- ]
-
- carry = Signal()
-
- self.sync += [
- If(self._start_busy.re,
- count.eq(0),
- busy.eq((1 << channels)-1),
- self._overflow.status.eq(0),
- charge.eq(~self._polarity.storage)
- ).Elif(any_busy,
- Cat(count, carry).eq(count + 1),
- If(carry,
- self._overflow.status.eq(busy),
- busy.eq(0)
- )
- ).Else(
- charge.eq(self._polarity.storage)
- )
- ]
-
- for i in range(channels):
- sense_synced = Signal()
- self.specials += MultiReg(sense[i], sense_synced)
- self.sync += If(busy[i],
- If(sense_synced != self._polarity.storage,
- res[i].status.eq(count),
- busy[i].eq(0)
- )
- )
--- /dev/null
+from migen.fhdl.structure import *
+from migen.fhdl.module import Module
+from migen.bank.description import *
+from migen.genlib.misc import optree
+from migen.genlib.cdc import MultiReg
+
+class CounterADC(Module, AutoCSR):
+ def __init__(self, charge, sense, width=24):
+ if not isinstance(sense, collections.Iterable):
+ sense = [sense]
+
+ channels = len(sense)
+
+ self._start_busy = CSR()
+ self._overflow = CSRStatus(channels)
+ self._polarity = CSRStorage()
+
+ count = Signal(width)
+ busy = Signal(channels)
+
+ res = []
+ for i in range(channels):
+ res.append(CSRStatus(width, name="res"+str(i)))
+ setattr(self, "_res"+str(i), res[-1])
+
+ any_busy = Signal()
+ self.comb += [
+ any_busy.eq(optree("|",
+ [busy[i] for i in range(channels)])),
+ self._start_busy.w.eq(any_busy)
+ ]
+
+ carry = Signal()
+
+ self.sync += [
+ If(self._start_busy.re,
+ count.eq(0),
+ busy.eq((1 << channels)-1),
+ self._overflow.status.eq(0),
+ charge.eq(~self._polarity.storage)
+ ).Elif(any_busy,
+ Cat(count, carry).eq(count + 1),
+ If(carry,
+ self._overflow.status.eq(busy),
+ busy.eq(0)
+ )
+ ).Else(
+ charge.eq(self._polarity.storage)
+ )
+ ]
+
+ for i in range(channels):
+ sense_synced = Signal()
+ self.specials += MultiReg(sense[i], sense_synced)
+ self.sync += If(busy[i],
+ If(sense_synced != self._polarity.storage,
+ res[i].status.eq(count),
+ busy[i].eq(0)
+ )
+ )
from migen.bank import csrgen
from milkymist import m1crg, lm32, norflash, uart, s6ddrphy, dfii, asmicon, \
- identifier, timer, minimac3, framebuffer, asmiprobe, dvisampler
+ identifier, timer, minimac3, framebuffer, asmiprobe, dvisampler, counteradc
from cif import get_macros
version = get_macros("common/version.h")["VERSION"][1:-1]
"dvisampler0_edid_mem": 9,
"dvisampler1": 10,
"dvisampler1_edid_mem": 11,
+ "pots": 12,
}
interrupt_map = {
self.submodules.asmiprobe = asmiprobe.ASMIprobe(self.asmicon.hub)
self.submodules.dvisampler0 = dvisampler.DVISampler(platform.request("dvi_in", 0), asmiport_dvi0)
self.submodules.dvisampler1 = dvisampler.DVISampler(platform.request("dvi_in", 1), asmiport_dvi1)
+ pots_pads = platform.request("dvi_pots")
+ self.submodules.pots = counteradc.CounterADC(pots_pads.charge,
+ [pots_pads.blackout, pots_pads.crossfade])
self.submodules.csrbankarray = csrgen.BankArray(self,
lambda name, memory: self.csr_map[name if memory is None else name + "_" + memory.name_override])