@@ -519,21 +519,21 @@ def __init__(self, row, col, idx, attrs, flags, connections):
519
519
'LVCMOS33' : '3.3' , 'LVDS25' : '2.5' , 'LVCMOS33D' : '3.3' , 'LVCMOS_D' : '3.3' }
520
520
_init_io_attrs = {
521
521
'IBUF' : {'PADDI' : 'PADDI' , 'HYSTERESIS' : 'NONE' , 'PULLMODE' : 'UP' , 'SLEWRATE' : 'SLOW' ,
522
- 'DRIVE' : '0' , 'OPENDRAIN' : 'OFF' , ' CLAMP' : 'OFF' , 'DIFFRESISTOR' : 'OFF' ,
522
+ 'DRIVE' : '0' , 'CLAMP' : 'OFF' , 'DIFFRESISTOR' : 'OFF' ,
523
523
'VREF' : 'OFF' , 'LVDS_OUT' : 'OFF' },
524
- 'OBUF' : {'ODMUX_1' : '1' , 'OPENDRAIN' : 'OFF' , ' PULLMODE' : 'UP' , 'SLEWRATE' : 'FAST' ,
524
+ 'OBUF' : {'ODMUX_1' : '1' , 'PULLMODE' : 'UP' , 'SLEWRATE' : 'FAST' ,
525
525
'DRIVE' : '8' , 'HYSTERESIS' : 'NONE' , 'CLAMP' : 'OFF' , 'DIFFRESISTOR' : 'OFF' ,
526
526
'SINGLERESISTOR' : 'OFF' , 'VCCIO' : '1.8' , 'LVDS_OUT' : 'OFF' , 'DDR_DYNTERM' : 'NA' , 'TO' : 'INV' },
527
- 'TBUF' : {'ODMUX_1' : 'UNKNOWN' , 'OPENDRAIN' : 'OFF' , ' PULLMODE' : 'UP' , 'SLEWRATE' : 'FAST' ,
527
+ 'TBUF' : {'ODMUX_1' : 'UNKNOWN' , 'PULLMODE' : 'UP' , 'SLEWRATE' : 'FAST' ,
528
528
'DRIVE' : '8' , 'HYSTERESIS' : 'NONE' , 'CLAMP' : 'OFF' , 'DIFFRESISTOR' : 'OFF' ,
529
529
'SINGLERESISTOR' : 'OFF' , 'VCCIO' : '1.8' , 'LVDS_OUT' : 'OFF' , 'DDR_DYNTERM' : 'NA' ,
530
530
'TO' : 'INV' , 'PERSISTENT' : 'OFF' , 'ODMUX' : 'TRIMUX' },
531
- 'IOBUF' : {'ODMUX_1' : 'UNKNOWN' , 'OPENDRAIN' : 'OFF' , ' PULLMODE' : 'UP' , 'SLEWRATE' : 'FAST' ,
531
+ 'IOBUF' : {'ODMUX_1' : 'UNKNOWN' , 'PULLMODE' : 'UP' , 'SLEWRATE' : 'FAST' ,
532
532
'DRIVE' : '8' , 'HYSTERESIS' : 'NONE' , 'CLAMP' : 'OFF' , 'DIFFRESISTOR' : 'OFF' ,
533
533
'SINGLERESISTOR' : 'OFF' , 'VCCIO' : '1.8' , 'LVDS_OUT' : 'OFF' , 'DDR_DYNTERM' : 'NA' ,
534
534
'TO' : 'INV' , 'PERSISTENT' : 'OFF' , 'ODMUX' : 'TRIMUX' , 'PADDI' : 'PADDI' },
535
535
}
536
- _refine_attrs = {'SLEW_RATE' : 'SLEWRATE' , 'PULL_MODE' : 'PULLMODE' }
536
+ _refine_attrs = {'SLEW_RATE' : 'SLEWRATE' , 'PULL_MODE' : 'PULLMODE' , 'OPEN_DRAIN' : 'OPENDRAIN' }
537
537
def refine_io_attrs (attr ):
538
538
return _refine_attrs .get (attr , attr )
539
539
@@ -696,6 +696,8 @@ def place(db, tilemap, bels, cst, args):
696
696
continue
697
697
if flag_name_val [0 ] == chipdb .mode_attr_sep + "IO_TYPE" :
698
698
iostd = _iostd_alias .get (flag_name_val [1 ], flag_name_val [1 ])
699
+ else :
700
+ io_desc .attrs [flag_name_val [0 ][1 :]] = flag_name_val [1 ]
699
701
io_desc .attrs ['IO_TYPE' ] = iostd
700
702
if pinless_io :
701
703
return
@@ -839,6 +841,8 @@ def place(db, tilemap, bels, cst, args):
839
841
for k , val in atr .items ():
840
842
if k not in attrids .iob_attrids .keys ():
841
843
print (f'XXX IO: add { k } key handle' )
844
+ elif k == 'OPENDRAIN' and val == 'OFF' :
845
+ continue
842
846
else :
843
847
add_attr_val (db , 'IOB' , iob_attrs , attrids .iob_attrids [k ], attrids .iob_attrvals [val ])
844
848
if k in {'VCCIO' }:
@@ -982,11 +986,11 @@ def main():
982
986
mods = m .group (1 ) or ""
983
987
luts = m .group (3 )
984
988
device = f"GW1N{ mods } -{ luts } "
985
-
989
+
986
990
with importlib .resources .path ('apycula' , f'{ args .device } .pickle' ) as path :
987
991
with closing (gzip .open (path , 'rb' )) as f :
988
992
db = pickle .load (f )
989
-
993
+
990
994
with open (args .netlist ) as f :
991
995
pnr = json .load (f )
992
996
0 commit comments