Skip to content

Commit e9d44be

Browse files
committed
vthread.RAM can accept RAW value representation in str.
1 parent 5d90e7e commit e9d44be

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

veriloggen/core/vtypes.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -720,9 +720,20 @@ def bit_length(self):
720720

721721
class Int(_Constant):
722722

723-
def __init__(self, value, width=None, base=None, signed=False):
723+
def __init__(self, value, width=None, base=None, signed=False, is_raw_value=False):
724724
_Constant.__init__(self, value, width, base)
725-
if isinstance(value, int):
725+
if is_raw_value:
726+
if width is None:
727+
raise ValueError(
728+
'width is required when is_raw_value is enabled.')
729+
if base is None:
730+
raise ValueError(
731+
'base is required when is_raw_value is enabled.')
732+
self.value = value
733+
self.width = width
734+
self.base = base
735+
self.signed = signed
736+
elif isinstance(value, int):
726737
self.value = value
727738
self.width = width
728739
self.base = base

veriloggen/types/ram.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,21 @@ def mkRAMDefinition(name, datawidth=32, addrwidth=10, numports=2,
3030
str(type(initvals)))
3131

3232
new_initvals = []
33+
base = 16
3334
for initval in initvals:
3435
if isinstance(initval, int):
3536
new_initvals.append(vtypes.Int(initval, datawidth, base=16))
36-
elif isinstance(initval, vtypes.Int):
37+
elif isinstance(initval, vtypes.Int) and isinstance(initval.value, int):
3738
v = copy.deepcopy(initval)
3839
v.width = datawidth
39-
v.base = 16
40+
v.base = base
41+
new_initvals.append(v)
42+
elif isinstance(initval, vtypes.Int) and isinstance(initval.value, str):
43+
v = copy.deepcopy(initval)
44+
v.width = datawidth
45+
if v.base != 2 and v.base != 16:
46+
raise ValueError('base must be 2 or 16')
47+
base = v.base
4048
new_initvals.append(v)
4149
else:
4250
raise TypeError("values of initvals must be int, not '%s" %
@@ -46,7 +54,7 @@ def mkRAMDefinition(name, datawidth=32, addrwidth=10, numports=2,
4654

4755
if 2 ** addrwidth > len(initvals):
4856
initvals.extend(
49-
[vtypes.Int(0, datawidth, base=16)
57+
[vtypes.Int(0, datawidth, base=base)
5058
for _ in range(2 ** addrwidth - len(initvals))])
5159

5260
m.Initial(

0 commit comments

Comments
 (0)