From 908a1d4b0715441c510ab10753a11ef50f112d2c Mon Sep 17 00:00:00 2001 From: Jean THOMAS Date: Mon, 8 Jun 2020 18:41:52 +0200 Subject: [PATCH] Add CSRPrefixProxy to gram.compat --- gram/compat.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/gram/compat.py b/gram/compat.py index aba8ecf..a76227e 100644 --- a/gram/compat.py +++ b/gram/compat.py @@ -1,9 +1,10 @@ # This file is Copyright (c) 2020 LambdaConcept from nmigen import * +from nmigen import tracer from nmigen.compat import Case -__ALL__ = ["delayed_enter", "RoundRobin", "Timeline"] +__ALL__ = ["delayed_enter", "RoundRobin", "Timeline", "CSRPrefixProxy"] def delayed_enter(m, src, dst, delay): assert delay > 0 @@ -96,3 +97,18 @@ class Timeline(Elaboratable): m.d.sync += e[1] return m + +class CSRPrefixProxy: + def __init__(self, bank, prefix): + self._bank = bank + self._prefix = prefix + + def csr(self, width, access, *, addr=None, alignment=None, name=None, + src_loc_at=0): + if name is not None and not isinstance(name, str): + raise TypeError("Name must be a string, not {!r}".format(name)) + name = name or tracer.get_var_name(depth=2 + src_loc_at).lstrip("_") + + prefixed_name = "{}_{}".format(self._prefix, name) + return self._bank.csr(width=width, access=access, addr=addr, + alignment=alignment, name=prefixed_name) -- 2.30.2