@@ -401,7 +401,7 @@ def emit_port_wires(self):
401
401
port_id = port_id , port_kind = flow .value ,
402
402
name = name , attrs = self .value_attrs .get (value , {}))
403
403
self .sigport_wires [name ] = (wire , value )
404
- if flow == _nir .ModuleNetFlow .OUTPUT :
404
+ if flow == _nir .ModuleNetFlow .Output :
405
405
continue
406
406
# If we just emitted an input or inout port, it is driving the value.
407
407
self .driven_sigports .add (name )
@@ -463,7 +463,7 @@ def emit_submodule_wires(self):
463
463
for submodule_idx in self .module .submodules :
464
464
submodule = self .netlist .modules [submodule_idx ]
465
465
for _name , (value , flow ) in submodule .ports .items ():
466
- if flow == _nir .ModuleNetFlow .OUTPUT :
466
+ if flow == _nir .ModuleNetFlow .Output :
467
467
self .emit_driven_wire (value )
468
468
469
469
def sigspec (self , * parts : '_nir.Net | Iterable[_nir.Net]' ):
@@ -989,10 +989,10 @@ def is_empty(self, module_idx):
989
989
return module_idx in self .empty
990
990
991
991
992
- def convert_fragment (fragment , name = "top" , * , emit_src = True ):
992
+ def convert_fragment (fragment , ports , name = "top" , * , emit_src = True , ** kwargs ):
993
993
assert isinstance (fragment , _ir .Fragment )
994
994
name_map = _ast .SignalDict ()
995
- netlist = _ir .build_netlist (fragment , name = name )
995
+ netlist = _ir .build_netlist (fragment , ports = ports , name = name , ** kwargs )
996
996
empty_checker = EmptyModuleChecker (netlist )
997
997
builder = _Builder (emit_src = emit_src )
998
998
for module_idx , module in enumerate (netlist .modules ):
@@ -1011,14 +1011,18 @@ def convert(elaboratable, name="top", platform=None, *, ports=None, emit_src=Tru
1011
1011
if (ports is None and
1012
1012
hasattr (elaboratable , "signature" ) and
1013
1013
isinstance (elaboratable .signature , wiring .Signature )):
1014
- ports = []
1015
- for _path , _member , value in elaboratable .signature .flatten (elaboratable ):
1014
+ ports = {}
1015
+ for path , member , value in elaboratable .signature .flatten (elaboratable ):
1016
1016
if isinstance (value , _ast .ValueCastable ):
1017
1017
value = value .as_value ()
1018
1018
if isinstance (value , _ast .Value ):
1019
- ports .append (value )
1019
+ if member .flow == wiring .In :
1020
+ dir = _ir .PortDirection .Input
1021
+ else :
1022
+ dir = _ir .PortDirection .Output
1023
+ ports ["__" .join (path )] = (value , dir )
1020
1024
elif ports is None :
1021
1025
raise TypeError ("The `convert()` function requires a `ports=` argument" )
1022
- fragment = _ir .Fragment .get (elaboratable , platform ). prepare ( ports = ports , ** kwargs )
1023
- il_text , _name_map = convert_fragment (fragment , name , emit_src = emit_src )
1026
+ fragment = _ir .Fragment .get (elaboratable , platform )
1027
+ il_text , _name_map = convert_fragment (fragment , ports , name , emit_src = emit_src , ** kwargs )
1024
1028
return il_text
0 commit comments