11import json
22import os
3-
3+ import subprocess
44
55class VitisAcceleratorConfig :
66 def __init__ (self , config ):
@@ -15,18 +15,33 @@ def __init__(self, config):
1515 board_info = self .supported_boards [self .board ]
1616 self .board_type = board_info ["board_type" ]
1717 self .part = board_info ["part" ]
18+
19+ # Get available platforms for the board
20+ platforms = self .get_available_platforms ()
21+ platforms = self .filter_platforms (platforms , self .board )
22+ if not platforms :
23+ raise Exception ("No platforms available for the board " + self .board )
24+ else :
25+ print ("Available platforms for the board " + self .board + ": " )
26+ self .print_platforms (platforms )
27+
28+ # Set platform based on the config or default to the first available platform
1829 if accel_config .get ("Platform" ) is not None :
19- if accel_config .get ("Platform" ) in board_info [ "platform" ] :
30+ if accel_config .get ("Platform" ) in platforms :
2031 self .platform = accel_config .get ("Platform" )
2132 else :
2233 print (
2334 "WARNING: You set an unrecognized Platform."
24- "Using " + board_info [ "platform" ] [0 ] + " platform instead"
35+ "Using " + platforms [0 ] + " platform instead"
2536 )
26- self .platform = board_info [ "platform" ] [0 ]
37+ self .platform = platforms [0 ]
2738 else :
28- print ("Using " + board_info ["platform" ][0 ] + " platform" )
29- self .platform = board_info ["platform" ][0 ]
39+ print (
40+ "WARNING: You didn't set a Platform."
41+ "Using " + platforms [0 ] + " platform instead"
42+ )
43+ self .platform = platforms [0 ]
44+
3045 self .memory_type = board_info ["memory" ]["type" ]
3146 self .memory_channel_count = board_info ["memory" ]["channels" ]
3247 else :
@@ -47,6 +62,33 @@ def __init__(self, config):
4762
4863 self .vivado_directives = accel_config .get ("Vivado_Directives" , [])
4964
65+ def get_available_platforms (self ):
66+ if "XILINX_VITIS" not in os .environ :
67+ raise Exception ("XILINX_VITIS Variable is not set, please set correctly and rerun" )
68+
69+ output = subprocess .run (["platforminfo" , "-l" ], stdout = subprocess .PIPE )
70+ p_info = json .loads (output .stdout .decode ('utf-8' ))
71+ platforms = []
72+ for p in p_info ['platforms' ]:
73+ platforms .append (p ['baseName' ])
74+ return platforms
75+
76+ def filter_platforms (self , platforms = None , board = "alveo-u55c" ):
77+ b = board .split ('-' )
78+ b_len = len (b )
79+ name = b [b_len - 1 ]
80+
81+ f_platforms = []
82+ for p in platforms :
83+ p_name = p .split ('_' )[1 ]
84+ if p_name == name :
85+ f_platforms .append (p )
86+ return f_platforms
87+
88+ def print_platforms (self , platforms ):
89+ for p in platforms :
90+ print (p )
91+
5092 def get_board_type (self ):
5193 return self .board_type
5294
0 commit comments