71 lines
1.6 KiB
Python
71 lines
1.6 KiB
Python
import csv
|
|
|
|
PINOUT_CSV = "./ice40lp1k_pinout.csv"
|
|
PACKAGE_NAME = "ICE40LP1K-CB81"
|
|
nbanks = 9
|
|
pinsperbank = 81 // nbanks
|
|
packagename = "CB81"
|
|
|
|
|
|
PROLOGUE = """EESchema-LIBRARY Version 2.3
|
|
#encoding utf-8
|
|
#
|
|
# {}
|
|
#
|
|
DEF {} U 0 40 Y Y {} L N
|
|
F0 "U" 0 0 60 H V C CNN
|
|
F1 "{}" 0 150 60 H V C CNN
|
|
F2 "" 0 0 60 H I C CNN
|
|
F3 "" 0 0 60 H I C CNN
|
|
DRAW
|
|
S 0 -50 600 -1450 0 1 0 N""".format(PACKAGE_NAME, PACKAGE_NAME, nbanks, PACKAGE_NAME)
|
|
|
|
EPILOGUE = """ENDDRAW
|
|
ENDDEF
|
|
#
|
|
#End Library"""
|
|
|
|
with open(PINOUT_CSV, "r") as f:
|
|
data = dict()
|
|
reader = csv.reader(f)
|
|
package_col = None
|
|
for i, row in enumerate(reader):
|
|
if i < 4 or len(row[0]) == 0:
|
|
#print(row)
|
|
if i == 3:
|
|
if package_col is None:
|
|
for j, r in enumerate(row):
|
|
if packagename in r:
|
|
package_col = j
|
|
break
|
|
continue
|
|
name = row[0]
|
|
num = row[package_col]
|
|
#print(row)
|
|
if num == '-':
|
|
continue
|
|
#num = int(num)
|
|
ty = 'B'
|
|
realtype = row[1]
|
|
if realtype == 'GND':
|
|
ty = 'P'
|
|
elif realtype.startswith('VCC'):
|
|
ty = 'W'
|
|
elif realtype == 'LED':
|
|
ty = 'w'
|
|
data[num] = [name, ty]
|
|
|
|
print(PROLOGUE)
|
|
for b in range(nbanks):
|
|
bankname = "ABCDEFGHJKLMNOP"[b] # NOTE: I is skipped
|
|
for p in range(pinsperbank):
|
|
pinname = bankname + str(p + 1)
|
|
name = data[pinname][0]
|
|
x = -200
|
|
y = -150 - 100 * p
|
|
ty = data[pinname][1]
|
|
print("X {} {} {} {} 200 R 50 50 {} 1 {}".format(name, pinname, x, y, b + 1, ty))
|
|
# add ground paddle pin
|
|
print("X {} {} {} {} 200 R 50 50 {} 1 {}".format('GND', 0, -200, -150 - 100*pinsperbank, 1, 'P'))
|
|
print(EPILOGUE)
|