import argparse
import importlib
-from .hdl import Signal, Elaboratable
+from .hdl import Signal, Record, Elaboratable
from .back import rtlil
try:
elaboratable = modules[module_name](*args, **kwargs)
- def has_port(elaboratable, port_name):
- # By convention, any public attribute that is a Signal is considered a port.
- return (not port_name.startswith("_") and
- isinstance(getattr(elaboratable, port_name), Signal))
- ports = [getattr(elaboratable, port_name)
- for port_name in dir(elaboratable)
- if has_port(elaboratable, port_name)]
+ ports = []
+ # By convention, any public attribute that is a Signal or a Record is
+ # considered a port.
+ for port_name, port in vars(elaboratable).items():
+ if not port_name.startswith("_") and isinstance(port, (Signal, Record)):
+ ports += port._lhs_signals()
rtlil_text = rtlil.convert(elaboratable, name=module_name, ports=ports)
response = {"frontend": "ilang", "source": rtlil_text}
except Exception as error: