Skip to content

Commit 51aee0c

Browse files
committed
wip: Add checksum before COBS encoding frames.
1 parent f222b2a commit 51aee0c

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

orbtrace/trace/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@ def __init__(self, platform):
312312
#pv := PipeValid([('data', 128)]),
313313
#Converter(128, 8),
314314
tpiu.TPIUDemux(),
315+
cobs.ChecksumAppender(),
315316
cobs.COBSEncoder(),
316317
cobs.DelimiterAppender(),
317318
cobs.SuperFramer(7500000, 65536),

orbtrace/trace/cobs.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,38 @@ def __init__(self, delimiter = 0):
116116
self.group_combiner.source.connect(self.source),
117117
]
118118

119+
class ChecksumAppender(Module):
120+
def __init__(self):
121+
self.sink = stream.Endpoint([('data', 8)])
122+
self.source = stream.Endpoint([('data', 8)])
123+
124+
self.submodules.fsm = fsm = FSM()
125+
126+
checksum = Signal(8)
127+
128+
fsm.act('DATA',
129+
self.sink.connect(self.source, omit = {'last'}),
130+
131+
If(self.sink.valid & self.sink.ready,
132+
NextValue(checksum, checksum - self.sink.data),
133+
),
134+
135+
If(self.sink.valid & self.sink.ready & self.sink.last,
136+
NextState('CHECKSUM'),
137+
),
138+
)
139+
140+
fsm.act('CHECKSUM',
141+
self.source.data.eq(checksum),
142+
self.source.last.eq(1),
143+
self.source.valid.eq(1),
144+
145+
If(self.source.ready,
146+
NextState('DATA'),
147+
NextValue(checksum, 0),
148+
),
149+
)
150+
119151
class DelimiterAppender(Module):
120152
def __init__(self, delimiter = 0):
121153
self.sink = stream.Endpoint([('data', 8)])

0 commit comments

Comments
 (0)