import csv import math def dec_to_bin(n): binary = "" x = 0 while n > 0 and x<=255: s1 = str(int(n%2)) binary = binary + s1 n /= 2 x = x + 1 result = binary[::-1] return result def bin_to_hex_print(field_name,bin_string): dec_val = int(bin_string,2) hex_val = hex(dec_val) print(field_name, hex_val) def func_rq_pkt_analysis(filecsv,index,tready,tdata,tvalid,tlast): dict_tmp = {} interface_identifier = "None" reader = csv.reader(filecsv) csv_num_column = next(reader) if (tready == "rq_tready"): interface_identifier = "RQ" if (tready == "rc_tready"): interface_identifier = "RC" if (tready == "cq_tready"): interface_identifier = "CQ" if (tready == "cc_tready"): interface_identifier = "CC" for i in csv_num_column: if (i.find(index) != -1): #print(i) window_col_num_index = csv_num_column.index(i) #print(window_col_num_index) else: pass if (i.find(tready) != -1): #print(i) tready_col_num_index = csv_num_column.index(i) #print(tready_col_num_index) else: pass if (i.find(tdata) != -1): #print(i) tdata_col_num_index = csv_num_column.index(i) #print(tdata_col_num_index) else: pass if (i.find(tvalid) != -1): #print(i) tvalid_col_num_index = csv_num_column.index(i) #print(tvalid_col_num_index) else: pass if (i.find(tlast) != -1): #print(i) tlast_col_num_index = csv_num_column.index(i) #print(tlast_col_num_index) else: pass for row in reader: dict_tmp.setdefault(row[window_col_num_index],[]).append(row[tready_col_num_index]) dict_tmp.setdefault(row[window_col_num_index],[]).append(row[tdata_col_num_index]) dict_tmp.setdefault(row[window_col_num_index],[]).append(row[tvalid_col_num_index]) dict_tmp.setdefault(row[window_col_num_index],[]).append(row[tlast_col_num_index]) tready=0 tdata=1 tvalid=2 tlast=3 scale = 16 for x in dict_tmp.values(): if (x[tready] == 'f') & (x[tvalid] == '1'): if (interface_identifier == "CC"): tdataval_hex=x[tdata] tdataval_bin = bin(int(tdataval_hex, scale))[2:].zfill(256) print("---------------------------------------------------") cc_lower_address_6_0 = tdataval_bin[-7:] cc_address_type_9_8 = tdataval_bin[-10:-8] cc_byte_count_28_16 = tdataval_bin[-29:-16] cc_locked_read_completion_29 = tdataval_bin[-30:-29] cc_dword_count_42_32 = tdataval_bin[-43:-32] cc_completion_status_45_43 = tdataval_bin[-46:-43] cc_completion_status_46 = tdataval_bin[-47:-46] cc_requester_id_63_48 = tdataval_bin[-64:-48] cc_tag_71_64 = tdataval_bin[-72:-64] cc_target_function_device_number_79_72 = tdataval_bin[-80:-72] cc_completer_bus_number_87_80 = tdataval_bin[-87:-80] cc_completer_id_enable_88 = tdataval_bin[-89:-88] cc_transcation_class_91_89 = tdataval_bin[-92:-89] cc_byte_count_94_92 = tdataval_bin[-95:-92] cc_force_error_95 = tdataval_bin[-96:-95] bin_to_hex_print("CC Lower Address (6:0) - ", cc_lower_address_6_0) bin_to_hex_print("CC Address Type (9:8) - ",cc_address_type_9_8) bin_to_hex_print("CC Byte Count (28:16) - ",cc_byte_count_28_16) bin_to_hex_print("CC Locked Read Completion (29) - ",cc_locked_read_completion_29) bin_to_hex_print("CC Dword Count (42:32) - ",cc_dword_count_42_32) bin_to_hex_print("CC Completion Status (45:43) - ",cc_completion_status_45_43) bin_to_hex_print("CC Completion Status (46) - ",cc_completion_status_46) bin_to_hex_print("CC Requester ID (63:48) - ",cc_requester_id_63_48) bin_to_hex_print("CC Tag (71:64) - ",cc_tag_71_64) bin_to_hex_print("CC Target Function Device Number (79:72) - ",cc_target_function_device_number_79_72) bin_to_hex_print("CC Completer Bus Number (87:80) - ",cc_completer_bus_number_87_80) bin_to_hex_print("CC Completer id Enable (88) - ",cc_completer_id_enable_88) bin_to_hex_print("CC Transaction (Class 91:89) - ",cc_transcation_class_91_89) bin_to_hex_print("CC Byte Count (94:92) - ",cc_byte_count_94_92) bin_to_hex_print("CC Force Error (95) - ",cc_force_error_95) if (interface_identifier == "RC"): tdataval_hex=x[tdata] tdataval_bin = bin(int(tdataval_hex, scale))[2:].zfill(256) print("---------------------------------------------------") rc_lower_address_11_0 = tdataval_bin[-12:] rc_error_code_15_12 = tdataval_bin[-16:-12] rc_byte_count_28_16 = tdataval_bin[-29:-16] rc_locked_read_completion_29 = tdataval_bin[-30:-29] rc_request_completed_30 = tdataval_bin[-31:-30] rc_dword_count_42_32 = tdataval_bin[-43:-32] rc_completion_status_45_43 = tdataval_bin[-46:-43] rc_poisoned_completion_46 = tdataval_bin[-47:-46] rc_requester_id_63_48 = tdataval_bin[-64:-48] rc_tag_71_64 = tdataval_bin[-72:-64] rc_completer_id_87_72 = tdataval_bin[-88:-72] rc_transaction_class_91_89 = tdataval_bin[-92:-89] rc_attributes_94_92 = tdataval_bin[-95:-92] bin_to_hex_print("RC Lower Address [11:0] - ", rc_lower_address_11_0) bin_to_hex_print("RC Error Code [15:12] - ", rc_error_code_15_12) bin_to_hex_print("RC Byte Count [28:16] - ", rc_byte_count_28_16) bin_to_hex_print("RC Locked Read Completion [29] - ", rc_locked_read_completion_29) bin_to_hex_print("RC Request Completed [30] - ", rc_request_completed_30) bin_to_hex_print("RC Dword Count [40:32] - ", rc_dword_count_42_32) bin_to_hex_print("RC Completion Status [45:43] - ", rc_completion_status_45_43) bin_to_hex_print("RC Poisoned Completion [46] - ", rc_poisoned_completion_46) bin_to_hex_print("RC Requester ID [63:48] - ", rc_requester_id_63_48) bin_to_hex_print("RC Tag [71:64] - ", rc_tag_71_64) bin_to_hex_print("RC Completer ID [87:72] - ", rc_completer_id_87_72) bin_to_hex_print("RC Transaction Class [91:89] - ", rc_transaction_class_91_89) bin_to_hex_print("RC Attributes [94:92] - ", rc_attributes_94_92) if (interface_identifier == "RQ"): tdataval_hex=x[tdata] tdataval_bin = bin(int(tdataval_hex, scale))[2:].zfill(256) print("---------------------------------------------------") rq_adderss_type_1_0 = tdataval_bin[-2:] rq_adderss_63_2 = tdataval_bin[-64:-2] rq_dword_count_74_64 = tdataval_bin[-75:-64] rq_request_type_78_75 = tdataval_bin[-79:-75] rq_Poisoned_Request_79 = tdataval_bin[-80:-79] rq_requester_function_device_number_87_80 = tdataval_bin[-88:-80] rq_requester_bus_number_95_88 = tdataval_bin[-96:-88] rq_tag_103_96 = tdataval_bin[-104:-96] rq_completer_id_119_104 = tdataval_bin[-120:-104] rq_requester_id_enable_120 = tdataval_bin[-121:-120] rq_transaction_class_123_121 = tdataval_bin[-124:-121] rq_attributes_126_124 = tdataval_bin[-127:-124] rq_force_ecrc_127 = tdataval_bin[-129:-128] bin_to_hex_print("RQ Address Type [1:0] - ", rq_adderss_type_1_0) bin_to_hex_print("RQ Address Type [63:2] - ", rq_adderss_63_2) bin_to_hex_print("RQ Address Type [74:64] - ", rq_dword_count_74_64) bin_to_hex_print("RQ Address Type [78:75] - ", rq_request_type_78_75) bin_to_hex_print("RQ Address Type [79] - ", rq_Poisoned_Request_79) bin_to_hex_print("RQ Address Type [87:80] - ", rq_requester_function_device_number_87_80) bin_to_hex_print("RQ Address Type [95:88] - ", rq_requester_bus_number_95_88) bin_to_hex_print("RQ Address Type [103:96] - ", rq_tag_103_96) bin_to_hex_print("RQ Address Type [119:104] - ", rq_completer_id_119_104) bin_to_hex_print("RQ Address Type [120] - ", rq_requester_id_enable_120) bin_to_hex_print("RQ Address Type [123:121] - ", rq_transaction_class_123_121) bin_to_hex_print("RQ Address Type [126:124] - ", rq_attributes_126_124) bin_to_hex_print("RQ Address Type [127] - ", rq_force_ecrc_127) if (interface_identifier == "CQ"): tdataval_hex=x[tdata] tdataval_bin = bin(int(tdataval_hex, scale))[2:].zfill(256) print("---------------------------------------------------") cq_adderss_type_1_0 = tdataval_bin[-2:] cq_adderss_63_2 = tdataval_bin[-64:-2] cq_dword_count_74_64 = tdataval_bin[-75:-64] cq_request_type_78_75 = tdataval_bin[-79:-75] cq_requester_id_95_80 = tdataval_bin[-96:-80] cq_tag_103_96 = tdataval_bin[-104:-96] cq_bar_id_114_112 = tdataval_bin[-115:-112] cq_bar_aperture_120_115 = tdataval_bin[-121:-115] cq_transaction_class_123_121 = tdataval_bin[-124:-121] cq_attributes_126_124 = tdataval_bin[-127:-124] bin_to_hex_print("CQ Address Type [1:0] -", cq_adderss_type_1_0) bin_to_hex_print("CQ Address [63:2] -",cq_adderss_63_2) bin_to_hex_print("CQ Dwword Count [74:64] -",cq_dword_count_74_64) bin_to_hex_print("CQ Request Type [78:75] -",cq_request_type_78_75) bin_to_hex_print("CQ Requester ID [95:80] -",cq_requester_id_95_80) bin_to_hex_print("CQ Tag [103:96] -",cq_tag_103_96) bin_to_hex_print("CQ BAR ID [114:112] -",cq_bar_id_114_112) bin_to_hex_print("CQ BAR Aperture [120:115] -",cq_bar_aperture_120_115) bin_to_hex_print("CQ Transaction Class [123:121] -",cq_transaction_class_123_121) bin_to_hex_print("CQ Attributes [126:124] -",cq_attributes_126_124) if (interface_identifier == "CC"): tdataval_hex=x[tdata] tdataval_bin = bin(int(tdataval_hex, scale))[2:].zfill(256) print("---------------------------------------------------") cc_lower_address_6_0 = tdataval_bin[-7:] cc_address_type_9_8 = tdataval_bin[-10:-8] cc_byte_count_28_16 = tdataval_bin[-29:-16] cc_locked_read_completion_29 = tdataval_bin[-30:-29] cc_dword_count_42_32 = tdataval_bin[-43:-32] cc_completion_status_45_43 = tdataval_bin[-46:-43] cc_completion_status_46 = tdataval_bin[-47:-46] cc_requester_id_63_48 = tdataval_bin[-64:-48] cc_tag_71_64 = tdataval_bin[-72:-64] cc_target_function_device_number_79_72 = tdataval_bin[-80:-72] cc_completer_bus_number_87_80 = tdataval_bin[-87:-80] cc_completer_id_enable_88 = tdataval_bin[-89:-88] cc_transcation_class_91_89 = tdataval_bin[-92:-89] cc_byte_count_94_92 = tdataval_bin[-95:-92] cc_force_error_95 = tdataval_bin[-96:-95] bin_to_hex_print("CC Lower Address (6:0) - ", cc_lower_address_6_0) bin_to_hex_print("CC Address Type (9:8) - ",cc_address_type_9_8) bin_to_hex_print("CC Byte Count (28:16) - ",cc_byte_count_28_16) bin_to_hex_print("CC Locked Read Completion (29) - ",cc_locked_read_completion_29) bin_to_hex_print("CC Dword Count (42:32) - ",cc_dword_count_42_32) bin_to_hex_print("CC Completion Status (45:43) - ",cc_completion_status_45_43) bin_to_hex_print("CC Completion Status (46) - ",cc_completion_status_46) bin_to_hex_print("CC Requester ID (63:48) - ",cc_requester_id_63_48) bin_to_hex_print("CC Tag (71:64) - ",cc_tag_71_64) bin_to_hex_print("CC Target Function Device Number (79:72) - ",cc_target_function_device_number_79_72) bin_to_hex_print("CC Completer Bus Number (87:80) - ",cc_completer_bus_number_87_80) bin_to_hex_print("CC Completer id Enable (88) - ",cc_completer_id_enable_88) bin_to_hex_print("CC Transaction (Class 91:89) - ",cc_transcation_class_91_89) bin_to_hex_print("CC Byte Count (94:92) - ",cc_byte_count_94_92) bin_to_hex_print("CC Force Error (95) - ",cc_force_error_95) filecsv = open('waveform.csv', "r") func_rq_pkt_analysis(filecsv,"Window","rq_tready","rq_tdata","rq_tvalid","rq_tlast") filecsv.close() filecsv = open('waveform.csv', "r") func_rq_pkt_analysis(filecsv,"Window","rc_tready","rc_tdata","rc_tvalid","rc_tlast") filecsv.close() filecsv = open('waveform.csv', "r") func_rq_pkt_analysis(filecsv,"Window","cq_tready","cq_tdata","cq_tvalid","cq_tlast") filecsv.close() filecsv = open('waveform.csv', "r") func_rq_pkt_analysis(filecsv,"Window","cc_tready","cc_tdata","cc_tvalid","cc_tlast") filecsv.close()