stream: set reset_less to True on datapath signals.
Reset is only required on control signals.
This commit is contained in:
parent
cf1c5d99b3
commit
a35df4f7d1
|
@ -25,6 +25,12 @@ def _make_m2s(layout):
|
||||||
r.append((f[0], _make_m2s(f[1])))
|
r.append((f[0], _make_m2s(f[1])))
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
def set_reset_less(field):
|
||||||
|
if isinstance(field, Signal):
|
||||||
|
field.reset_less = True
|
||||||
|
elif isinstance(field, Record):
|
||||||
|
for s, _ in field.iter_flat():
|
||||||
|
s.reset_less = True
|
||||||
|
|
||||||
class EndpointDescription:
|
class EndpointDescription:
|
||||||
def __init__(self, payload_layout, param_layout=[]):
|
def __init__(self, payload_layout, param_layout=[]):
|
||||||
|
@ -59,6 +65,10 @@ class Endpoint(Record):
|
||||||
else:
|
else:
|
||||||
self.description = EndpointDescription(description_or_layout)
|
self.description = EndpointDescription(description_or_layout)
|
||||||
Record.__init__(self, self.description.get_full_layout(), name, **kwargs)
|
Record.__init__(self, self.description.get_full_layout(), name, **kwargs)
|
||||||
|
set_reset_less(self.first)
|
||||||
|
set_reset_less(self.last)
|
||||||
|
set_reset_less(self.payload)
|
||||||
|
set_reset_less(self.param)
|
||||||
|
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
try:
|
try:
|
||||||
|
@ -136,8 +146,8 @@ class PipelinedActor(BinaryActor):
|
||||||
first = sink.valid & sink.first
|
first = sink.valid & sink.first
|
||||||
last = sink.valid & sink.last
|
last = sink.valid & sink.last
|
||||||
for i in range(latency):
|
for i in range(latency):
|
||||||
first_n = Signal()
|
first_n = Signal(reset_less=True)
|
||||||
last_n = Signal()
|
last_n = Signal(reset_less=True)
|
||||||
self.sync += \
|
self.sync += \
|
||||||
If(self.pipe_ce,
|
If(self.pipe_ce,
|
||||||
first_n.eq(first),
|
first_n.eq(first),
|
||||||
|
@ -482,7 +492,7 @@ def inc_mod(s, m):
|
||||||
|
|
||||||
class Gearbox(Module):
|
class Gearbox(Module):
|
||||||
def __init__(self, i_dw, o_dw, msb_first=True):
|
def __init__(self, i_dw, o_dw, msb_first=True):
|
||||||
self.sink = sink = Endpoint([("data", i_dw)])
|
self.sink = sink = Endpoint([("data", i_dw)])
|
||||||
self.source = source = Endpoint([("data", o_dw)])
|
self.source = source = Endpoint([("data", o_dw)])
|
||||||
|
|
||||||
# # #
|
# # #
|
||||||
|
@ -515,7 +525,7 @@ class Gearbox(Module):
|
||||||
|
|
||||||
# Data path
|
# Data path
|
||||||
|
|
||||||
shift_register = Signal(io_lcm)
|
shift_register = Signal(io_lcm, reset_less=True)
|
||||||
|
|
||||||
i_cases = {}
|
i_cases = {}
|
||||||
i_data = Signal(i_dw)
|
i_data = Signal(i_dw)
|
||||||
|
|
Loading…
Reference in New Issue