
Although constructor methods can improve clarity, there are many
contexts in which it is useful to use range() as a shape: notably
Layout, but also Const and AnyConst/AnyValue. Instead of duplicating
these constructor methods everywhere (which is not even easily
possible for Layout), use casting to Shape, introduced in 6aabdc0a
.
Fixes #225.
20 lines
397 B
Python
20 lines
397 B
Python
from nmigen import *
|
|
from nmigen.cli import main
|
|
|
|
|
|
m = Module()
|
|
cd_por = ClockDomain(reset_less=True)
|
|
cd_sync = ClockDomain()
|
|
m.domains += cd_por, cd_sync
|
|
|
|
delay = Signal(range(256), reset=255)
|
|
with m.If(delay != 0):
|
|
m.d.por += delay.eq(delay - 1)
|
|
m.d.comb += [
|
|
ClockSignal().eq(cd_por.clk),
|
|
ResetSignal().eq(delay != 0),
|
|
]
|
|
|
|
if __name__ == "__main__":
|
|
main(m, ports=[cd_por.clk])
|