hdl.mem: add synthesis attribute support.

Fixes #291.
This commit is contained in:
whitequark 2020-02-06 14:48:48 +00:00
parent f7abe368a9
commit 31cd72c0b6
3 changed files with 13 additions and 2 deletions

View file

@ -826,7 +826,7 @@ def _convert_fragment(builder, fragment, name_map, hierarchy):
memory = param_value
if memory not in memories:
memories[memory] = module.memory(width=memory.width, size=memory.depth,
name=memory.name)
name=memory.name, attrs=memory.attrs)
addr_bits = bits_for(memory.depth)
data_parts = []
data_mask = (1 << memory.width) - 1

View file

@ -1,4 +1,5 @@
import operator
from collections import OrderedDict
from .. import tracer
from .ast import *
@ -24,14 +25,17 @@ class Memory:
name : str
Name hint for this memory. If ``None`` (default) the name is inferred from the variable
name this ``Signal`` is assigned to.
attrs : dict
Dictionary of synthesis attributes.
Attributes
----------
width : int
depth : int
init : list of int
attrs : dict
"""
def __init__(self, *, width, depth, init=None, name=None, simulate=True):
def __init__(self, *, width, depth, init=None, name=None, attrs=None, simulate=True):
if not isinstance(width, int) or width < 0:
raise TypeError("Memory width must be a non-negative integer, not {!r}"
.format(width))
@ -44,6 +48,7 @@ class Memory:
self.width = width
self.depth = depth
self.attrs = OrderedDict(() if attrs is None else attrs)
# Array of signals for simulation.
self._array = Array()

View file

@ -42,6 +42,12 @@ class MemoryTestCase(FHDLTestCase):
"'str' object cannot be interpreted as an integer"):
m = Memory(width=8, depth=4, init=[1, "0"])
def test_attrs(self):
m1 = Memory(width=8, depth=4)
self.assertEqual(m1.attrs, {})
m2 = Memory(width=8, depth=4, attrs={"ram_block": True})
self.assertEqual(m2.attrs, {"ram_block": True})
def test_read_port_transparent(self):
mem = Memory(width=8, depth=4)
rdport = mem.read_port()