soc/interconnect/stream_packet: add check of field's width vs signal's width in Header.get_field

This commit is contained in:
Florent Kermarrec 2015-11-27 19:36:23 +01:00
parent c0539fff3e
commit d85d2b7b9b
1 changed files with 6 additions and 4 deletions

View File

@ -118,13 +118,15 @@ class Header:
field = getattr(obj, name.replace("_msb", ""))[width:2*width]
else:
field = getattr(obj, name)
if len(field) != width:
raise ValueError("Width mismatch on " + name + " field")
return field
def encode(self, obj, signal):
r = []
for k, v in sorted(self.fields.items()):
start = v.byte*8+v.offset
end = start+v.width
start = v.byte*8 + v.offset
end = start + v.width
field = self.get_field(obj, k, v.width)
if self.swap_field_bytes:
field = reverse_bytes(field)
@ -134,8 +136,8 @@ class Header:
def decode(self, signal, obj):
r = []
for k, v in sorted(self.fields.items()):
start = v.byte*8+v.offset
end = start+v.width
start = v.byte*8 + v.offset
end = start + v.width
field = self.get_field(obj, k, v.width)
if self.swap_field_bytes:
r.append(field.eq(reverse_bytes(signal[start:end])))