From f8e00fc54e46f80cd75d778e941269176fed061c Mon Sep 17 00:00:00 2001 From: Charles-Henri Mousset Date: Tue, 26 Sep 2023 13:24:08 +0200 Subject: [PATCH] [enh] generate SVD CSR enumeratedValue based on fields values --- litex/soc/integration/export.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/litex/soc/integration/export.py b/litex/soc/integration/export.py index 3a00b88f7..79e70eae1 100644 --- a/litex/soc/integration/export.py +++ b/litex/soc/integration/export.py @@ -466,6 +466,28 @@ def get_csr_svd(soc, vendor="litex", name="soc", description=None): svd.append(' {}'.format(field.offset)) svd.append(' '.format( reflow(field.description))) + + if field.values is not None: + svd_v = [] + for value in field.values: + if len(value) == 3: + name, description, value = value[1], value[2], value[0] + else: + name, description, value = value[1].split()[0], value[1], value[0] + name = re.search("[_A-Za-z0-9]+", name).group(0) + matches = re.findall("[+]?(0[xX][0-9a-fA-F]+|(#|0b)[01xX]+|[0-9]+)", value) + if len(matches) != 1 or len(name) == 0: + continue + value = matches[0][0] + svd_v.append(' ') + svd_v.append(' {}'.format(name)) + svd_v.append(' {}'.format(description)) + svd_v.append(' {}'.format(value)) + svd_v.append(' ') + if len(svd_v) != 0: + svd.append(' ') + svd += svd_v + svd.append(' ') svd.append(' ') else: field_size = csr.size