1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
import partdb
import csv
def load_csv(path):
table = []
with open(path, 'r') as f:
csv_reader = csv.reader(f)
for row in csv_reader:
table.append(row)
return table
def process_csv(data_path, shared_path, speed_grades, temp_grade):
raw_specs = load_csv(shared_path)
raw_data = load_csv(data_path)
split_row = 0
# find row split between data and pins
for i in range(len(raw_data)):
if raw_data[i][0] == "###":
split_row = i
break
package_table = raw_data[split_row+1:]
prefix_list = raw_data[0][1:]
# infill sparse prefix_lists (eg, for xilinx zynq)
last = None
for i in range(len(prefix_list)):
if not prefix_list[i]:
prefix_list[i] = last
else:
last = prefix_list[i]
suffix_row = [list() for i in range(len(prefix_list))]
bom = []
for row_num in range(len(package_table)):
package = package_table[row_num][0]
for cell_num in range(len(package_table[row_num][1:])):
cell = package_table[row_num][cell_num+1]
if cell:
for speed_grade in speed_grades:
suffix = speed_grade + package + temp_grade
mpn = prefix_list[cell_num] + suffix
bom.append(('Xilinx', mpn))
suffix_row[cell_num].append(dict(mpn=mpn, suffix=suffix))
shared_specs = dict()
for row in raw_specs:
shared_specs[row[0]] = row[1]
data_table = []
span = 1
for raw_row in raw_data[:split_row]:
row = [[1, raw_row[0]], ]
for raw_cell in raw_row[1:]:
if raw_cell:
row.append([1, raw_cell.replace('n/a', '-')])
else:
row[-1][0] += 1
data_table.append(row)
partdb.ensure_bom(bom)
price_row = [None for i in range(len(prefix_list))]
for i in range(len(prefix_list)):
bom = [('Xilinx', suf['mpn']) for suf in suffix_row[i]]
price_row[i] = partdb.best_price_info(bom)
# attach URLs to suffix row entries
for cell_num in range(len(suffix_row)):
cell = suffix_row[cell_num]
for part_num in range(len(cell)):
part = cell[part_num]
p = ('Xilinx', part['mpn'])
part['url'] = partdb.part_url(p)
cell[part_num] = part
suffix_row[cell_num] = cell
return dict(shared_specs=shared_specs,
data_table=data_table,
price_row=price_row,
package_table=package_table,
suffix_row=suffix_row)
today = partdb.today
spartan6_grid = process_csv(
'xilinx_data/spartan6.csv',
'xilinx_data/spartan6_shared.csv',
speed_grades=['-2', '-3'],
temp_grade='C')
spartan6_grid['vendor'] = "Xilinx"
spartan6_grid['familyname'] = "Spartan6"
zynq7000_grid = process_csv(
'xilinx_data/zynq7000.csv',
'xilinx_data/zynq7000_shared.csv',
speed_grades=['-1'],
temp_grade='C')
zynq7000_grid['vendor'] = "Xilinx"
zynq7000_grid['familyname'] = "Zynq7000"
|