11import amaranth
2- from amaranth .hdl import ir
2+ from amaranth .hdl import _ast , _ir
33from amaranth .back import verilog
44
55import migen
@@ -45,8 +45,7 @@ def get_instance(self):
4545 connections = {}
4646
4747 for m , n in self .connections :
48- module , name , * _ = self .amaranth_name_map [n ]
49- direction = self .amaranth_dir_map [n ]
48+ name , direction = self .amaranth_name_map [n ]
5049 s = f'{ direction } _{ name } '
5150
5251 assert s not in connections , f'Signal { s } connected multiple times.'
@@ -58,22 +57,18 @@ def get_instance(self):
5857 def generate_verilog (self ):
5958 ports = [n for m , n in self .connections ]
6059
61- fragment = ir .Fragment .get (self .m , None ).prepare (ports = ports )
60+ fragment = _ir .Fragment .get (self .m , None ).prepare (ports = ports , hierarchy = ( self . name ,) )
6261
63- v , m = verilog .convert_fragment (fragment , name = self .name )
62+ v , _name_map = verilog .convert_fragment (fragment , name = self .name )
63+ netlist = _ir .build_netlist (fragment , name = self .name )
6464
65- self .amaranth_dir_map = fragment .ports
66- self .amaranth_name_map = m
65+ self .amaranth_name_map = _ast .SignalDict ((sig , (name , 'o' if name in netlist .top .ports_o else 'i' )) for name , sig , _ in fragment .ports )
6766
68- for name , domain in fragment .domains .items ():
67+ for name , domain in fragment .fragment . domains .items ():
6968 if domain .clk in self .amaranth_name_map :
7069 self .amaranth_name_map [amaranth .ClockSignal (name )] = self .amaranth_name_map [domain .clk ]
71- if domain .clk in self .amaranth_dir_map :
72- self .amaranth_dir_map [amaranth .ClockSignal (name )] = self .amaranth_dir_map [domain .clk ]
7370 if domain .rst in self .amaranth_name_map :
7471 self .amaranth_name_map [amaranth .ResetSignal (name )] = self .amaranth_name_map [domain .rst ]
75- if domain .rst in self .amaranth_dir_map :
76- self .amaranth_dir_map [amaranth .ResetSignal (name )] = self .amaranth_dir_map [domain .rst ]
7772
7873 return v
7974
0 commit comments