hdl.ir: collect source location for Instance
.
This commit is contained in:
parent
7f76914b74
commit
eb1c55859e
|
@ -888,8 +888,13 @@ def _convert_fragment(builder, fragment, name_map, hierarchy):
|
|||
if len(value) > 0 or sub_type == "$mem_v2":
|
||||
sub_ports[port] = rhs_compiler(value)
|
||||
|
||||
if isinstance(subfragment, ir.Instance):
|
||||
src = _src(subfragment.src_loc)
|
||||
else:
|
||||
src = ""
|
||||
|
||||
module.cell(sub_type, name=sub_name, ports=sub_ports, params=sub_params,
|
||||
attrs=subfragment.attrs)
|
||||
attrs=subfragment.attrs, src=src)
|
||||
|
||||
# If we emit all of our combinatorial logic into a single RTLIL process, Verilog
|
||||
# simulators will break horribly, because Yosys write_verilog transforms RTLIL processes
|
||||
|
|
|
@ -3,6 +3,7 @@ from collections import defaultdict, OrderedDict
|
|||
from functools import reduce
|
||||
import warnings
|
||||
|
||||
from .. import tracer
|
||||
from .._utils import *
|
||||
from .._unused import *
|
||||
from .ast import *
|
||||
|
@ -617,12 +618,13 @@ class Fragment:
|
|||
|
||||
|
||||
class Instance(Fragment):
|
||||
def __init__(self, type, *args, **kwargs):
|
||||
def __init__(self, type, *args, src_loc=None, src_loc_at=0, **kwargs):
|
||||
super().__init__()
|
||||
|
||||
self.type = type
|
||||
self.parameters = OrderedDict()
|
||||
self.named_ports = OrderedDict()
|
||||
self.src_loc = src_loc or tracer.get_src_loc(src_loc_at)
|
||||
|
||||
for (kind, name, value) in args:
|
||||
if kind == "a":
|
||||
|
|
|
@ -166,6 +166,7 @@ class Memory(Elaboratable):
|
|||
i_WR_EN=Cat(Cat(en_bit.replicate(port.granularity) for en_bit in port.en) for port in self._write_ports),
|
||||
i_WR_ADDR=Cat(port.addr for port in self._write_ports),
|
||||
i_WR_DATA=Cat(port.data for port in self._write_ports),
|
||||
src_loc=self.src_loc,
|
||||
)
|
||||
for port in self._read_ports:
|
||||
port._MustUse__used = True
|
||||
|
|
|
@ -263,7 +263,7 @@ class FragmentTransformer:
|
|||
|
||||
def on_fragment(self, fragment):
|
||||
if isinstance(fragment, Instance):
|
||||
new_fragment = Instance(fragment.type)
|
||||
new_fragment = Instance(fragment.type, src_loc=fragment.src_loc)
|
||||
new_fragment.parameters = OrderedDict(fragment.parameters)
|
||||
self.map_named_ports(fragment, new_fragment)
|
||||
else:
|
||||
|
|
Loading…
Reference in a new issue