@@ -401,7 +401,7 @@ def emit_port_wires(self):
401401 port_id = port_id , port_kind = flow .value ,
402402 name = name , attrs = self .value_attrs .get (value , {}))
403403 self .sigport_wires [name ] = (wire , value )
404- if flow == _nir .ModuleNetFlow .OUTPUT :
404+ if flow == _nir .ModuleNetFlow .Output :
405405 continue
406406 # If we just emitted an input or inout port, it is driving the value.
407407 self .driven_sigports .add (name )
@@ -463,7 +463,7 @@ def emit_submodule_wires(self):
463463 for submodule_idx in self .module .submodules :
464464 submodule = self .netlist .modules [submodule_idx ]
465465 for _name , (value , flow ) in submodule .ports .items ():
466- if flow == _nir .ModuleNetFlow .OUTPUT :
466+ if flow == _nir .ModuleNetFlow .Output :
467467 self .emit_driven_wire (value )
468468
469469 def sigspec (self , * parts : '_nir.Net | Iterable[_nir.Net]' ):
@@ -989,10 +989,10 @@ def is_empty(self, module_idx):
989989 return module_idx in self .empty
990990
991991
992- def convert_fragment (fragment , name = "top" , * , emit_src = True ):
992+ def convert_fragment (fragment , ports , name = "top" , * , emit_src = True , ** kwargs ):
993993 assert isinstance (fragment , _ir .Fragment )
994994 name_map = _ast .SignalDict ()
995- netlist = _ir .build_netlist (fragment , name = name )
995+ netlist = _ir .build_netlist (fragment , ports = ports , name = name , ** kwargs )
996996 empty_checker = EmptyModuleChecker (netlist )
997997 builder = _Builder (emit_src = emit_src )
998998 for module_idx , module in enumerate (netlist .modules ):
@@ -1011,14 +1011,18 @@ def convert(elaboratable, name="top", platform=None, *, ports=None, emit_src=Tru
10111011 if (ports is None and
10121012 hasattr (elaboratable , "signature" ) and
10131013 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 ):
10161016 if isinstance (value , _ast .ValueCastable ):
10171017 value = value .as_value ()
10181018 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 )
10201024 elif ports is None :
10211025 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 )
10241028 return il_text
0 commit comments