Skip to content

Instantly share code, notes, and snippets.

@Ravenslofty
Created May 1, 2019 17:03
Show Gist options
  • Select an option

  • Save Ravenslofty/3ca7c4d57077b44916bc3458f3fa2eda to your computer and use it in GitHub Desktop.

Select an option

Save Ravenslofty/3ca7c4d57077b44916bc3458f3fa2eda to your computer and use it in GitHub Desktop.
from nmigen import Const, Elaboratable, Module, Repl, Signal
from nmigen.cli import main
class PositiveAttacks(Elaboratable):
def __init__(self, shift, mask):
self.gen = Signal(64)
self.prop = Signal(64)
self.output = Signal(64)
self.shift = shift
self.mask = mask
def elaborate(self, platform):
m = Module()
prop0 = Signal(64)
gen0 = Signal(64)
prop1 = Signal(64)
gen1 = Signal(64)
m.d.comb += [
prop0.eq(self.prop & self.mask),
gen0.eq(self.gen | prop0 & (self.gen << self.shift)),
prop1.eq(prop0 & (prop0 << self.shift)),
gen1.eq(gen0 | prop1 & (gen0 << self.shift)),
self.output.eq(gen1)
]
return m
if __name__ == "__main__":
pa = PositiveAttacks(8, Repl(Const(1), 64))
main(pa, ports=[pa.gen, pa.prop, pa.output])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment