BEGIN { fname = ARGV[1] if (fname == "/fd/0") fname = ARGV[2] split(fname,x,".") name = x[1] ipf = name".ipf" pins = name".pins" print "DEF "name"." > ipf}/Pin/ { tran[$2] = $3}/^NET/ { split($2,x,";") split(x[1],y,"_") port = y[1] clk = substr(port,1,3) == "clk" if (clk) next print $0 > ipf}/ PIN:/ { split($1,x,":") i = substr(x[2],1,length(x[2])-1) # goddam actel# print $0 > ipf# print "USE ; "port"; FIX." > ipf if (!clk) printf " PIN:%s,\n FIX:''.\n",i > ipf if (pga == 1) i = tran[i] pin[port] = i if (type[port] != "") tt = substr(tt,1,i-1)""type[port]""substr(tt,i+1,length(tt)-i)}/^use/ { cell = $2 port = $3 if (cell == "INBUF" || cell == "CLKBUF") type[port] = "i" else if (cell == "OUTBUF") type[port] = "2" else if (cell == "BIBUF") type[port] = "3" else if (cell == "TRIBUFF") type[port] = "4"}/FAM.*a1200/ {family = 1200}/FAM.*a1000/ {family = 1000}/VAR.*PACK/ { n = split($4,x,"/") split(x[n],y,".") package = toupper(y[1]) print ".t "name" "package > pins if (family == 1000) { if (package == "LCC68") # wow, only depends on the package! tt = "nnnvnnnnn nnnnggnnnnnvnnnvn nnnnngnnnnnvnnnnn nnnnngnnnngvnnnnn nnnnngnn" else if (package == "LCC84") tt = "nnnvnnnnnnn nnnnnnggnnnnnvvnnnnnn vnnnnnngnnnnnvnnnnnnn nnnnnnggnnnngvvnnnnnn nnnnnnngnn" else if (package == "PGA132") { pga = 1 tt = "gnnnnnnnnnnnn nnnngnnngnnnn nnnngnvngnnnn nnn nvn nnn nngggn nnngnnnn nvvvvvvv nnnnnnng ngggnn nnn nvn ngn nnnngnvngnnnn nnnnnnnngnnnn nnnnnnnnnnnnn" } } else if (family == 1200) { if (package == "LCC84") tt = "nnnnngnnnnn gnnnnnnnnnvvnnnngnnnn nnnnnnnnnnvnnnnngnnnn nnnnnnnnngvvnnnngnnnn nnnnnnnnnv" else if (package == "PGA132") { pga = 1 tt = "?nnnnnnnnnnnn nnnngnnngnnnn nnnngnvngnnnn nnn nvn nnn nngggn nnngnnnn nvvvvvvv nnnnnnng ngggnn nnn nvn ngn nnnngnvngnnnn nnnnnnnngnnnn nnnnnnnnnnnnn" } } else print "family non-member" split(tt,x," ") tt = x[1] for (i = 2; x[i] != ""; i++) tt = tt""x[i]# tt = x[1]x[2]x[3]x[4]x[5] # plcc-specific n = length(tt) for (i = 1; i <= n; i++) if (substr(tt,i,1) == "v") vcc[nv++] = i else if (substr(tt,i,1) == "g") gnd[ng++] = i}END { print "END." > ipf print ".tt "tt > pins printf ".tp VCC[0-%d] ",nv-1 > pins for (i in vcc) printf "%d ",vcc[i] > pins printf "\n" > pins printf ".tp GND[0-%d] ",ng-1 > pins for (i in gnd) printf "%d ",gnd[i] > pins printf "\n" > pins for (i in pin) print ".tp "i" "pin[i] > pins}
BEGIN {
fname = ARGV[1]
if (fname == "/fd/0")
fname = ARGV[2]
split(fname,x,".")
name = x[1]
ipf = name".ipf"
pins = name".pins"
print "DEF "name"." > ipf
}
/Pin/ {
tran[$2] = $3
}
/^NET/ {
split($2,x,";")
split(x[1],y,"_")
port = y[1]
clk = substr(port,1,3) == "clk"
if (clk)
next
print $0 > ipf
}
/ PIN:/ {
split($1,x,":")
i = substr(x[2],1,length(x[2])-1) # goddam actel
# print $0 > ipf
# print "USE ; "port"; FIX." > ipf
if (!clk)
printf " PIN:%s,\n FIX:''.\n",i > ipf
if (pga == 1)
i = tran[i]
pin[port] = i
if (type[port] != "")
tt = substr(tt,1,i-1)""type[port]""substr(tt,i+1,length(tt)-i)
}
/^use/ {
cell = $2
port = $3
if (cell == "INBUF" || cell == "CLKBUF")
type[port] = "i"
else if (cell == "OUTBUF")
type[port] = "2"
else if (cell == "BIBUF")
type[port] = "3"
else if (cell == "TRIBUFF")
type[port] = "4"
}
/FAM.*a1200/ {family = 1200}
/FAM.*a1000/ {family = 1000}
/VAR.*PACK/ {
n = split($4,x,"/")
split(x[n],y,".")
package = toupper(y[1])
print ".t "name" "package > pins
if (family == 1000) {
if (package == "LCC68") # wow, only depends on the package!
tt = "nnnvnnnnn nnnnggnnnnnvnnnvn nnnnngnnnnnvnnnnn nnnnngnnnngvnnnnn nnnnngnn"
else if (package == "LCC84")
tt = "nnnvnnnnnnn nnnnnnggnnnnnvvnnnnnn vnnnnnngnnnnnvnnnnnnn nnnnnnggnnnngvvnnnnnn nnnnnnngnn"
else if (package == "PGA132") {
pga = 1
tt = "gnnnnnnnnnnnn nnnngnnngnnnn nnnngnvngnnnn nnn nvn nnn nngggn nnngnnnn nvvvvvvv nnnnnnng ngggnn nnn nvn ngn nnnngnvngnnnn nnnnnnnngnnnn nnnnnnnnnnnnn"
}
}
else if (family == 1200) {
if (package == "LCC84")
tt = "nnnnngnnnnn gnnnnnnnnnvvnnnngnnnn nnnnnnnnnnvnnnnngnnnn nnnnnnnnngvvnnnngnnnn nnnnnnnnnv"
else if (package == "PGA132") {
pga = 1
tt = "?nnnnnnnnnnnn nnnngnnngnnnn nnnngnvngnnnn nnn nvn nnn nngggn nnngnnnn nvvvvvvv nnnnnnng ngggnn nnn nvn ngn nnnngnvngnnnn nnnnnnnngnnnn nnnnnnnnnnnnn"
}
}
else
print "family non-member"
split(tt,x," ")
tt = x[1]
for (i = 2; x[i] != ""; i++)
tt = tt""x[i]
# tt = x[1]x[2]x[3]x[4]x[5] # plcc-specific
n = length(tt)
for (i = 1; i <= n; i++)
if (substr(tt,i,1) == "v")
vcc[nv++] = i
else if (substr(tt,i,1) == "g")
gnd[ng++] = i
}
END {
print "END." > ipf
print ".tt "tt > pins
printf ".tp VCC[0-%d] ",nv-1 > pins
for (i in vcc)
printf "%d ",vcc[i] > pins
printf "\n" > pins
printf ".tp GND[0-%d] ",ng-1 > pins
for (i in gnd)
printf "%d ",gnd[i] > pins
printf "\n" > pins
for (i in pin)
print ".tp "i" "pin[i] > pins
}