
Because Fragment.prepare is not (currently) idempotent, it is useful to be able to avoid calling it when converting. Even if it is made idempotent, it can be slow on large designs, so it is advantageous regardless of that.
32 lines
991 B
Python
32 lines
991 B
Python
import warnings
|
|
|
|
from ...hdl.ir import Fragment
|
|
from ...hdl.cd import ClockDomain
|
|
from ...back import verilog
|
|
from .conv_output import ConvOutput
|
|
|
|
|
|
def convert(fi, ios=None, name="top", special_overrides=dict(),
|
|
attr_translate=None, create_clock_domains=True,
|
|
display_run=False):
|
|
if display_run:
|
|
warnings.warn("`display_run=True` support has been removed",
|
|
DeprecationWarning, stacklevel=1)
|
|
if special_overrides:
|
|
warnings.warn("`special_overrides` support as well as `Special` has been removed",
|
|
DeprecationWarning, stacklevel=1)
|
|
# TODO: attr_translate
|
|
|
|
def missing_domain(name):
|
|
if create_clock_domains:
|
|
return ClockDomain(name)
|
|
v_output = verilog.convert(
|
|
elaboratable=fi.get_fragment(),
|
|
name=name,
|
|
ports=ios or (),
|
|
missing_domain=missing_domain
|
|
)
|
|
output = ConvOutput()
|
|
output.set_main_source(v_output)
|
|
return output
|