mirror of
https://github.com/Silicon1602/srdl2sv.git
synced 2024-12-22 06:58:41 +00:00
Fix generate/endgenerate and end of generate loops in regfiles
Previously, the beginning of a new loop always caused a new generate keyword, which is wrong.
This commit is contained in:
parent
4f6010eed2
commit
5d76830931
@ -31,6 +31,9 @@ class AddrMap(Component):
|
|||||||
(glbl_settings['field_reset'], glbl_settings['cpuif_reset']) = \
|
(glbl_settings['field_reset'], glbl_settings['cpuif_reset']) = \
|
||||||
self.__process_global_resets()
|
self.__process_global_resets()
|
||||||
|
|
||||||
|
# Use global settings to define whether a component is already in a generate block
|
||||||
|
glbl_settings['generate_active'] = False
|
||||||
|
|
||||||
# Empty dictionary of register objects
|
# Empty dictionary of register objects
|
||||||
# We need a dictionary since it might be required to access the objects later
|
# We need a dictionary since it might be required to access the objects later
|
||||||
# by name (for example, in case of aliases)
|
# by name (for example, in case of aliases)
|
||||||
|
@ -42,8 +42,17 @@ class RegFile(Component):
|
|||||||
]
|
]
|
||||||
|
|
||||||
# Create generate block for register and add comment
|
# Create generate block for register and add comment
|
||||||
if self.dimensions:
|
for i in range(self.dimensions-1, -1, -1):
|
||||||
|
self.rtl_footer.append(
|
||||||
|
RegFile.templ_dict['generate_for_end']['rtl'].format(
|
||||||
|
dimension = chr(97+i)))
|
||||||
|
|
||||||
|
if self.dimensions and not glbl_settings['generate_active']:
|
||||||
self.rtl_header.append("generate")
|
self.rtl_header.append("generate")
|
||||||
|
self.generate_initiated = True
|
||||||
|
glbl_settings['generate_active'] = True
|
||||||
|
else:
|
||||||
|
self.generate_initiated = False
|
||||||
|
|
||||||
for i in range(self.dimensions):
|
for i in range(self.dimensions):
|
||||||
self.rtl_header.append(
|
self.rtl_header.append(
|
||||||
@ -102,6 +111,11 @@ class RegFile(Component):
|
|||||||
|
|
||||||
self.logger.info("Done generating all child-regfiles/registers")
|
self.logger.info("Done generating all child-regfiles/registers")
|
||||||
|
|
||||||
|
# End generate loop
|
||||||
|
if self.generate_initiated:
|
||||||
|
glbl_settings['generate_active'] = False
|
||||||
|
self.rtl_footer.append("endgenerate")
|
||||||
|
|
||||||
def __process_variables(self,
|
def __process_variables(self,
|
||||||
obj: node.RegfileNode,
|
obj: node.RegfileNode,
|
||||||
parents_dimensions: list,
|
parents_dimensions: list,
|
||||||
|
@ -38,8 +38,12 @@ class Register(Component):
|
|||||||
self.children.append(field_obj)
|
self.children.append(field_obj)
|
||||||
|
|
||||||
# Create generate block for register and add comment
|
# Create generate block for register and add comment
|
||||||
if self.dimensions:
|
if self.dimensions and not glbl_settings['generate_active']:
|
||||||
self.rtl_header.append("generate")
|
self.rtl_header.append("generate")
|
||||||
|
glbl_settings['generate_active'] = True
|
||||||
|
self.generate_initiated = True
|
||||||
|
else:
|
||||||
|
self.generate_initiated = False
|
||||||
|
|
||||||
for i in range(self.dimensions):
|
for i in range(self.dimensions):
|
||||||
self.rtl_header.append(
|
self.rtl_header.append(
|
||||||
@ -54,7 +58,8 @@ class Register(Component):
|
|||||||
Register.templ_dict['generate_for_end'].format(
|
Register.templ_dict['generate_for_end'].format(
|
||||||
dimension = chr(97+i)))
|
dimension = chr(97+i)))
|
||||||
|
|
||||||
if self.dimensions:
|
if self.generate_initiated:
|
||||||
|
glbl_settings['generate_active'] = False
|
||||||
self.rtl_footer.append("endgenerate")
|
self.rtl_footer.append("endgenerate")
|
||||||
|
|
||||||
# Assign variables from bus
|
# Assign variables from bus
|
||||||
|
Loading…
Reference in New Issue
Block a user