Skip to content

Commit

Permalink
interconnect/stream: pass valid_token_count in Endpoint layout
Browse files Browse the repository at this point in the history
enjoy-digital committed Mar 14, 2016

Unverified

No user is associated with the committer email.
1 parent b9a3751 commit 5362e80
Showing 1 changed file with 18 additions and 17 deletions.
35 changes: 18 additions & 17 deletions misoc/interconnect/stream.py
Original file line number Diff line number Diff line change
@@ -131,8 +131,8 @@ def __init__(self, layout, n):
class _UpConverter(Module):
def __init__(self, nbits_from, nbits_to, ratio, reverse):
self.sink = sink = Endpoint([("data", nbits_from)])
self.source = source = Endpoint([("data", nbits_to)])
self.valid_token_count = Signal(bits_for(ratio))
self.source = source = Endpoint([("data", nbits_to),
("valid_token_count", bits_for(ratio))])

# # #

@@ -173,14 +173,14 @@ def __init__(self, nbits_from, nbits_to, ratio, reverse):
self.sync += If(load_part, Case(demux, cases))

# valid token count
self.sync += If(load_part, self.valid_token_count.eq(demux + 1))
self.sync += If(load_part, source.valid_token_count.eq(demux + 1))


class _DownConverter(Module):
def __init__(self, nbits_from, nbits_to, ratio, reverse):
self.sink = sink = Endpoint([("data", nbits_from)])
self.source = source = Endpoint([("data", nbits_to)])
self.valid_token_count = Signal()
self.source = source = Endpoint([("data", nbits_to),
("valid_token_count", 1)])

# # #

@@ -210,18 +210,21 @@ def __init__(self, nbits_from, nbits_to, ratio, reverse):
self.comb += Case(mux, cases).makedefault()

# valid token count
self.comb += self.valid_token_count.eq(last)
self.comb += source.valid_token_count.eq(last)


class _IdentityConverter(Module):
def __init__(self, nbits_from, nbits_to, ratio, reverse):
self.sink = sink = Endpoint([("data", nbits_from)])
self.source = source = Endpoint([("data", nbits_to)])
self.valid_token_count = Signal(reset=1)
self.source = source = Endpoint([("data", nbits_to),
("valid_token_count", 1)])

# # #

self.comb += sink.connect(source)
self.comb += [
sink.connect(source),
source.valid_token_count.eq(1)
]


def _get_converter_ratio(nbits_from, nbits_to):
@@ -243,7 +246,8 @@ def _get_converter_ratio(nbits_from, nbits_to):


class Converter(Module):
def __init__(self, nbits_from, nbits_to, reverse=False, report_valid_token_count=False):
def __init__(self, nbits_from, nbits_to, reverse=False,
report_valid_token_count=False):
self.cls, self.ratio = _get_converter_ratio(nbits_from, nbits_to)

# # #
@@ -253,14 +257,11 @@ def __init__(self, nbits_from, nbits_to, reverse=False, report_valid_token_count

self.sink = converter.sink
if report_valid_token_count:
self.source = Endpoint([("data", nbits_to),
("valid_token_count", bits_for(self.ratio))])
self.comb += [
converter.source.connect(self.source),
self.source.valid_token_count.eq(converter.valid_token_count)
]
else:
self.source = converter.source
else:
self.source = Endpoint([("data", nbits_to)])
self.comb += converter.source.connect(self.source,
leave_out=set(["valid_token_count"]))


class StrideConverter(Module):

0 comments on commit 5362e80

Please sign in to comment.