|
You can avoid using abstractions and write it directly on the silicon, it's not really difficult, it turns into a bunch of muxes, registers and adders (as shown in the link below) and solves the problem in just 333 clock cycles, using a minimum of power https://gist.github.com/vmunoz82/49de4c63bee1768283162ec5406... class Euler(Elaboratable):
def __init__(self):
self.output = Signal(19)
def elaborate(self, platform):
m = Module()
count5 = Signal(3)
c3, c5 = Signal(17), Signal(18)
cond3, cond5 = (c3 < 1000) & (count5 != 0), (c5 < 1000) & (count5 < 3)
m.d.sync += count5.eq(Mux(count5 == 4, 0, count5+1))
m.d.sync += [
c3.eq(c3+3),
c5.eq(Mux(cond5, c5+5, c5))
]
m.d.sync += self.output.eq(self.output +
Mux(cond3, c3, 0)+Mux(cond5, c5, 0))
return m
|