AP(5)
AP(5) β FILE FORMATS β AP(5) π
ok bestie, welcome to the ap manual page, part 1 of 2, and it's literally the blueprint of the Alliance physical format. No cap. It's giving structured, it's giving CAD realness, and we're about to read the whole grammar together. Periodt.
πΈ NAME πΈ
ap β Alliance physical format. That's the name. Iconic. π
β¨ ORIGIN β¨
This software belongs to the ALLIANCE CAD SYSTEM, developed by the ASIM team at the LIP6 laboratory of UniversitΓ© Pierre and Marie CURIE, in Paris, France. Fr fr. π«Ά
- Web:
http://asim.lip6.fr/recherche/alliance/ - E-mail:
alliance-users@asim.lip6.fr
π BNF DESCRIPTION π
ok so the entire file format is defined in BNF, and it's giving βgrammar homework but make it CAD.β The top-level file is literally this sequence, in this exact order:
file ::=
version
header
connectors
segments
instances
transistors
patterns
end_of_file
and then every single production, comment, and value is right here. Don't skip, bestie, it's all important. π
version ::= 'V ALLIANCE 2.2 SETUP : ' version_number
header ::= 'H ' name ',' file_type ',' abindex ',' nb_desc
',' date ',' index_beg ',' link_mode ','
bounding_box ',' [ abutment_box ]
/* name : name of the figure */
/* file_type : type of the file */
/* abindex : index of the abutment box */
/* nb_desc : number of descriptors */
/* date : saving file date */
/* index_beg : index of the beginning of the linkage */
/* link_mode : indication on the linkage */
/* (update or not) */
/* bounding_box : coordinates and size of the */
/* bounding box */
/* abutment_box : coordinates and size, if defined, */
/* of the abutment box */
connectors ::= { connector }
connector ::= 'C ' index ',' x ',' y ',' w ',' orientation
',' layer ',' name ',' connector_type ','
nextindex ',' endnet
/* x, y, w : coordinates and size of the connector */
/* orientation : north, south, east, or west */
/* layer : layer of the connector */
/* name : name of the connector */
/* connector_type : input or output or ... */
/* nextindex : next index in the linkage */
/* endnet : end in the linkage of the net */
segments ::= { segment }
segment ::= 'S ' index ',' x ',' y ',' d ',' w ',' direction
',' layer ',' name ',' nextindex ',' endnet
/* x, y, d, w : coordinates and size of the segment */
/* direction : horizontaly or verticaly */
/* layer : layer of the segment */
/* name : name of the segment */
/* nextindex : next index in the linkage */
/* endnet : end in the linkage of the net */
instances ::= { instance [ connectors ] }
/* In case of updated linkage, an instance is followed */
/* by his connectors */
instance ::= 'I ' index ',' x ',' y ',' instance_name ','
model_name ',' geoop ',' nextindex ',' endnet
/* x, y : coordinates of the instance */
/* instance_name : local name of the instance */
/* model_name : name of the model */
/* geoop : geometric operation */
/* nextindex : next index in the linkage */
/* endnet : end in the linkage of the net */
transistors ::= { transistor }
transistor ::= 'T ' index ',' x ',' y ',' instance_name ','
trans_name ',' geoop ',' nextindex ',' endnet
/* x, y : coordinates of the transistor */
/* instance_name : name of the instance */
/* trans_name : generic name of the transistor */
/* geoop : geometric operation */
/* nextindex : next index in the linkage */
/* endnet : end in the linkage of the net */
patterns ::= { pattern }
pattern ::= 'M ' index ',' x ',' y ',' instance_name ','
pattern_name ',' int_index ',' nextindex ','
endnet
/* x, y : coordinates of the pattern */
/* instance_name : name of the instance of the pattern */
/* pattern_name : name of the pattern */
/* int_index : internal index of the pattern */
/* nextindex : next index in the linkage */
/* endnet : end in the linkage of the net */
end_of_file ::= 'EOF'
version_number ::= number
file_type ::= 'P'
abindex ::= index
nb_desc ::= number
date ::= day '/' month '/' year
index_beg ::= index
index ::= number
link_mode ::= 'A JOUR' | 'PAS A JOUR'
/* updated, not updated */
bounding_box ::= x ',' y ',' dx ',' dy
abutment_box ::= x ',' y ',' dx ',' dy
x ::= number
y ::= number
d ::= number
/* length */
w ::= number
/* width */
dx ::= number
dy ::= number
direction ::= 'H' | 'V'
/* horizontaly or verticaly */
orientation ::= 'NORD' | 'SUD' | 'EST' | 'OUEST'
/* North, south, east, west */
layer ::= 'POLY' | 'ALU1' | 'ALU2' | 'DIFN' | 'DIFP' |
'T_ALU1' | 'T_ALU2' | 'CAISSON_N' | 'CAISSON_P'
/* poly : polysilicium */
/* alu1 : first metal */
/* alu2 : second metal */
/* difn : N diffusion */
/* difp : P diffusion */
/* t_alu1 : first metal through route */
/* t_alu2 : second metal through route */
/* caisson_n : N bulk */
/* caisson_p : P bulk */
connector_type ::= 'IN' | 'OUT' | 'INOUT'
nextindex ::= index
endnet ::= 'NON' | 'FIN'
/* non : not the end of the net */
/* fin : end of the net */
model_name ::= name
instance_name ::= name
geoop ::= 'NOSYM' | 'ROT_P' | 'ROT_M' | 'SYM_X' | 'SYM_Y' |
'SYMXY' | 'SY_RP' | 'SY_RM'
/* nosym : no operation */
/* rot_p : rotates 90 degrees counter clockwise */
/* rot_m : rotates 90 degrees clockwise */
/* sym_y : y becomes -y */
/* sym_x : x becomes -x */
/* symxy : x becomes -x and y becomes -y */
/* sy_rp : y becomes -y then rotates 90 degrees */
/* counter clockwise */
/* sy_rm : y becomes -y then rotates 90 degrees */
/* clockwise */
trans_name ::= 'T' transistor_type '_' d '_' w
pattern_name ::= 'CONT_POLY' | 'CONT_DIF_N' | 'CONT_DIF_P' |
'CONT_VIA' | 'C_X_N' | 'C_X_P' | 'REF_CON'
| 'REF_REF'
/* cont_poly : poly alu1 contact */
/* cont_dif_n : alu1 difn contact */
/* cont_dif_p : alu1 difp contact */
/* cont_via : alu2 alu1 contact */
/* c_x_n : L shaped N transistor corner filling */
/* c_x_p : L shaped P transistor corner filling */
/* ref_con : kind of reference, for multi-acces */
/* connectors */
/* ref_ref : kind of reference, for all other uses */
int_index ::= index
transistor_type ::= 'P' | 'N'
number ::= { '0' | '1'| '2' | '3' | '4' | '5' |
'6' | '7'| '8' | '9' }
name ::= word
π heads up:link_modeis literally'A JOUR'or'PAS A JOUR'β updated or not updated, no in-between. Andendnetis'NON'or'FIN'β not the end of the net, or end of the net. Keep that in mind, bestie.
part 2 is coming, don't go anywhere π
β¨ EXAMPLES β¨
okay bestie, these examples are giving vintage EDA realness. no cap, they're long, but every single line matters. π
πΈ Example 1 πΈ
This example is the physical design of a nand with two input. See example 1 in the description of the alc logical format for more details.
V ALLIANCE 2.2 SETUP : 2
H na2_y,P,10,66,25/10/91,-1,PAS A JOUR,0,0,28,53,5,3,18,42
C 0,20,45,2,NORD,ALU2,i0,INOUT,-1,FIN
C 1,14,45,2,NORD,ALU2,f,INOUT,-1,FIN
C 2,8,45,2,NORD,ALU2,i1,INOUT,-1,FIN
C 3,20,3,2,SUD,ALU2,i0,INOUT,-1,FIN
C 4,14,3,2,SUD,ALU2,f,INOUT,-1,FIN
C 5,8,3,2,SUD,ALU2,i1,INOUT,-1,FIN
C 6,23,43,8,EST,ALU1,vdd,INOUT,-1,FIN
C 7,5,43,8,OUEST,ALU1,vdd,INOUT,-1,FIN
C 8,5,5,8,OUEST,ALU1,vss,INOUT,-1,FIN
C 9,23,5,8,EST,ALU1,vss,INOUT,-1,FIN
S 11,5,5,18,8,H,ALU1,vss,-1,FIN
S 12,8,2,12,2,H,DIFP,*,-1,FIN
S 13,8,27,11,3,V,DIFP,*,-1,FIN
S 14,20,27,11,3,V,DIFP,*,-1,FIN
S 15,20,22,6,2,V,ALU1,*,-1,FIN
S 16,19,22,1,2,H,ALU1,*,-1,FIN
S 17,5,43,18,8,H,ALU1,vdd,-1,FIN
S 18,8,33,10,2,V,ALU1,vdd,-1,FIN
S 19,8,22,6,2,V,ALU1,*,-1,FIN
S 20,8,22,1,2,H,ALU1,*,-1,FIN
S 21,14,30,5,2,V,ALU1,*,-1,FIN
S 22,14,13,17,1,V,ALU1,*,-1,FIN
S 23,14,13,6,1,H,ALU1,*,-1,FIN
S 24,17,22,2,2,H,POLY,*,-1,FIN
S 25,17,20,5,1,V,POLY,*,-1,FIN
S 26,9,22,2,2,H,POLY,*,-1,FIN
S 27,11,20,5,1,V,POLY,*,-1,FIN
S 28,8,45,12,2,H,DIFN,*,-1,FIN
S 29,5,39,18,26,H,CAISSON_N,*,-1,FIN
S 30,8,7,11,3,V,DIFN,*,-1,FIN
S 31,8,3,42,2,V,ALU2,i1,-1,FIN
S 32,14,3,42,2,V,ALU2,f,-1,FIN
S 33,14,27,11,3,V,DIFP,*,-1,FIN
S 34,20,7,11,3,V,DIFN,*,-1,FIN
S 35,14,7,11,3,V,DIFN,*,-1,FIN
S 36,20,3,42,2,V,ALU2,i0,-1,FIN
T 37,17,5,*,TN_15_1,NOSYM,-1,FIN
T 38,11,5,*,TN_15_1,NOSYM,-1,FIN
T 39,17,25,*,TP_15_1,NOSYM,-1,FIN
T 40,11,25,*,TP_15_1,NOSYM,-1,FIN
S 41,20,43,2,1,V,ALU1,vdd,-1,FIN
S 42,8,45,12,1,H,ALU1,vdd,-1,FIN
S 43,20,33,10,2,V,ALU1,vdd,-1,FIN
S 44,8,2,11,2,V,ALU1,vss,-1,FIN
S 45,8,2,12,2,H,ALU1,vss,-1,FIN
M 46,20,37,*,CONT_DIF_P,2,-1,FIN
M 47,8,37,*,CONT_DIF_P,2,-1,FIN
M 48,14,45,*,CONT_DIF_N,1,-1,FIN
M 49,14,2,*,CONT_DIF_P,2,-1,FIN
M 50,8,13,*,CONT_DIF_N,1,-1,FIN
M 51,20,13,*,CONT_DIF_N,1,-1,FIN
M 52,8,33,*,CONT_DIF_P,2,-1,FIN
M 53,20,33,*,CONT_DIF_P,2,-1,FIN
M 54,9,22,*,CONT_POLY,0,-1,FIN
M 55,19,22,*,CONT_POLY,0,-1,FIN
M 56,8,28,*,CONT_VIA,3,-1,FIN
M 57,20,28,*,CONT_VIA,3,-1,FIN
M 58,14,22,*,CONT_VIA,3,-1,FIN
M 59,8,8,*,CONT_DIF_N,1,-1,FIN
M 60,20,2,*,CONT_DIF_P,2,-1,FIN
M 61,8,2,*,CONT_DIF_P,2,-1,FIN
M 62,20,45,*,CONT_DIF_N,1,-1,FIN
M 63,8,45,*,CONT_DIF_N,1,-1,FIN
M 64,14,29,*,CONT_DIF_P,2,-1,FIN
M 65,14,35,*,CONT_DIF_P,2,-1,FIN
EOF
π¦ Example 2 π¦
This example is the physical design of a small circuit including three nand.
V ALLIANCE 2.2 SETUP : 2
H test_nand,P,-1,57,12/ 4/92,10,A JOUR,3,1,61,60,
C 0,12,2,2,SUD,ALU2,a,IN,8,FIN
C 1,24,2,2,SUD,ALU2,b,IN,21,FIN
C 2,30,2,2,SUD,ALU2,c,IN,19,FIN
C 3,42,2,2,SUD,ALU2,d,IN,31,FIN
C 4,54,2,2,SUD,ALU2,s,OUT,36,FIN
C 5,4,47,1,EST,ALU1,vdd,IN,39,FIN
C 6,4,8,1,EST,ALU1,vss,IN,7,FIN
I 7,9,7,I1,na2_y,NOSYM,33,FIN
C 8,24,49,2,NORD,ALU2,i0,INOUT,11,NON
C 9,18,49,2,NORD,ALU2,f,INOUT,18,FIN
C 10,12,49,2,NORD,ALU2,i1,INOUT,13,NON
C 11,24,7,2,SUD,ALU2,i0,INOUT,41,NON
C 12,18,7,2,SUD,ALU2,f,INOUT,9,NON
C 13,12,7,2,SUD,ALU2,i1,INOUT,40,NON
C 14,27,47,8,EST,ALU1,vdd,INOUT,15,NON
C 15,9,47,8,OUEST,ALU1,vdd,INOUT,46,NON
C 16,9,9,8,OUEST,ALU1,vss,INOUT,45,NON
C 17,27,9,8,EST,ALU1,vss,INOUT,16,NON
I 18,27,7,I2,na2_y,NOSYM,35,FIN
C 19,42,49,2,NORD,ALU2,i0,INOUT,22,NON
C 20,36,49,2,NORD,ALU2,f,INOUT,29,FIN
C 21,30,49,2,NORD,ALU2,i1,INOUT,24,NON
C 22,42,7,2,SUD,ALU2,i0,INOUT,43,NON
C 23,36,7,2,SUD,ALU2,f,INOUT,20,NON
C 24,30,7,2,SUD,ALU2,i1,INOUT,42,NON
C 25,45,47,8,EST,ALU1,vdd,INOUT,26,NON
C 26,27,47,8,OUEST,ALU1,vdd,INOUT,14,NON
C 27,27,9,8,OUEST,ALU1,vss,INOUT,17,NON
C 28,45,9,8,EST,ALU1,vss,INOUT,27,NON
I 29,45,7,I3,na2_y,NOSYM,-1,FIN
C 30,60,49,2,NORD,ALU2,i0,INOUT,52,NON
C 31,54,49,2,NORD,ALU2,f,INOUT,34,NON
C 32,48,49,2,NORD,ALU2,i1,INOUT,51,NON
C 33,60,7,2,SUD,ALU2,i0,INOUT,30,NON
C 34,54,7,2,SUD,ALU2,f,INOUT,44,NON
C 35,48,7,2,SUD,ALU2,i1,INOUT,32,NON
C 36,63,47,8,EST,ALU1,vdd,INOUT,37,NON
C 37,45,47,8,OUEST,ALU1,vdd,INOUT,25,NON
C 38,45,9,8,OUEST,ALU1,vss,INOUT,28,NON
C 39,63,9,8,EST,ALU1,vss,INOUT,38,NON
S 40,12,2,5,2,V,ALU2,*,0,NON
S 41,24,2,5,2,V,ALU2,*,1,NON
S 42,30,2,5,2,V,ALU2,*,2,NON
S 43,42,2,5,2,V,ALU2,*,3,NON
S 44,54,2,5,2,V,ALU2,*,4,NON
S 45,4,8,5,1,H,ALU1,*,6,NON
S 46,4,47,5,1,H,ALU1,*,5,NON
S 47,18,55,42,1,H,ALU1,x,53,NON
S 48,36,60,12,1,H,ALU1,y,54,NON
S 49,18,49,6,2,V,ALU2,*,12,NON
S 50,36,49,11,2,V,ALU2,*,23,NON
S 51,48,49,11,2,V,ALU2,*,55,NON
S 52,60,49,6,2,V,ALU2,*,56,NON
M 53,18,55,*,CONT_VIA,3,49,NON
M 54,36,60,*,CONT_VIA,3,50,NON
M 55,48,60,*,CONT_VIA,3,48,NON
M 56,60,55,*,CONT_VIA,3,47,NON
EOF
π BUG REPORT π
okay so real talk, bestie: this tool is under development at the ASIM department of the LIP6 laboratory.
and they're literally saying: "We need your feedback to improve documentation and tools." so if you've got thoughts, send them. it's giving community glow-up. π
π brought to you by ASIM/LIP6, dated October 1, 1997 β this was AP(5), and honestly? iconic. π
π¦ where this page comes from
- fedora 43: alliance-libs 5.1.1-35.20160506gitd8c05cd.fc42 Β· GPL-2.0-only
- fedora 43: alliance-libs 5.1.1-35.20160506gitd8c05cd.fc42 Β· GPL-2.0-only
- fedora 44: alliance-libs 5.1.1-35.20160506gitd8c05cd.fc42 Β· GPL-2.0-only
- fedora 44: alliance-libs 5.1.1-35.20160506gitd8c05cd.fc42 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms