Skip to content

Commit c06bf3c

Browse files
authored
Merge pull request #4277 from VLSIDA/bspdn-gt2n-pr
gt2n: add 2nm BSPDN platform with gcd and aes designs
2 parents fcf00b7 + 11a10d7 commit c06bf3c

54 files changed

Lines changed: 277880 additions & 1 deletion

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ flow/platforms/*
6363
!flow/platforms/sky130io
6464
!flow/platforms/sky130ram
6565
!flow/platforms/gf180
66+
!flow/platforms/gt2n
6667
flow/private
6768

6869
# network

flow/designs/gt2n/aes/config.mk

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
export DESIGN_NICKNAME = aes
2+
export DESIGN_NAME = aes_cipher_top
3+
export PLATFORM = gt2n
4+
5+
export VERILOG_FILES = $(sort $(wildcard $(DESIGN_HOME)/src/$(DESIGN_NICKNAME)/*.v))
6+
export SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint.sdc
7+
8+
# AES is bigger than gcd; give the floorplan more room.
9+
export CORE_UTILIZATION = 30
10+
export CORE_ASPECT_RATIO = 1
11+
export CORE_MARGIN = 2
12+
export PLACE_DENSITY_LB_ADDON = 0.20
13+
14+
export TNS_END_PERCENT = 100
15+
# workaround for high congestion in post-grt repair (matches nangate45/aes)
16+
export SKIP_INCREMENTAL_REPAIR = 1
17+
18+
export SWAP_ARITH_OPERATORS = 1
19+
export OPENROAD_HIERARCHICAL = 1
20+
21+
# Highest layer aes actually routes on (M11-M13 carry no wire). Capping here
22+
# instead of the platform M13 top shrinks the detailed-route grid, vias, and
23+
# DRC. See platforms/gt2n/config.mk.
24+
export MAX_ROUTING_LAYER = M10
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
current_design aes_cipher_top
2+
3+
set clk_name clk
4+
set clk_port_name clk
5+
# GT2N lib uses time_unit = 1 ps. 500 ps -> 2 GHz target; first-pass
6+
# loose, can tighten once routing is clean.
7+
set clk_period 500
8+
set clk_io_pct 0.2
9+
10+
set clk_port [get_ports $clk_port_name]
11+
12+
create_clock -name $clk_name -period $clk_period $clk_port
13+
14+
set non_clock_inputs [all_inputs -no_clocks]
15+
16+
set_input_delay [expr $clk_period * $clk_io_pct] -clock $clk_name $non_clock_inputs
17+
set_output_delay [expr $clk_period * $clk_io_pct] -clock $clk_name [all_outputs]
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
{
2+
"synth__canonical_netlist__hash": {
3+
"value": "e9426c391e35d86c9f9023e814fd4826714b89b5",
4+
"compare": "==",
5+
"level": "warning"
6+
},
7+
"synth__netlist__hash": {
8+
"value": "93f9e9316090c4b4b44bf35599036a9c5cdfe109",
9+
"compare": "==",
10+
"level": "warning"
11+
},
12+
"synth__design__instance__area__stdcell": {
13+
"value": 492.0,
14+
"compare": "<="
15+
},
16+
"constraints__clocks__count": {
17+
"value": 1,
18+
"compare": "=="
19+
},
20+
"placeopt__design__instance__area": {
21+
"value": 564,
22+
"compare": "<="
23+
},
24+
"placeopt__design__instance__count__stdcell": {
25+
"value": 20700,
26+
"compare": "<="
27+
},
28+
"detailedplace__design__violations": {
29+
"value": 0,
30+
"compare": "=="
31+
},
32+
"cts__design__instance__count__setup_buffer": {
33+
"value": 1800,
34+
"compare": "<="
35+
},
36+
"cts__design__instance__count__hold_buffer": {
37+
"value": 1800,
38+
"compare": "<="
39+
},
40+
"cts__timing__setup__ws": {
41+
"value": -25.0,
42+
"compare": ">="
43+
},
44+
"cts__timing__setup__tns": {
45+
"value": -100.0,
46+
"compare": ">="
47+
},
48+
"cts__timing__hold__ws": {
49+
"value": -25.0,
50+
"compare": ">="
51+
},
52+
"cts__timing__hold__tns": {
53+
"value": -100.0,
54+
"compare": ">="
55+
},
56+
"globalroute__antenna_diodes_count": {
57+
"value": 100,
58+
"compare": "<="
59+
},
60+
"globalroute__timing__setup__ws": {
61+
"value": -75.2,
62+
"compare": ">="
63+
},
64+
"globalroute__timing__setup__tns": {
65+
"value": -585.0,
66+
"compare": ">="
67+
},
68+
"globalroute__timing__hold__ws": {
69+
"value": -41.2,
70+
"compare": ">="
71+
},
72+
"globalroute__timing__hold__tns": {
73+
"value": -1220.0,
74+
"compare": ">="
75+
},
76+
"detailedroute__route__wirelength": {
77+
"value": 42394,
78+
"compare": "<="
79+
},
80+
"detailedroute__route__drc_errors": {
81+
"value": 0,
82+
"compare": "<="
83+
},
84+
"detailedroute__antenna__violating__nets": {
85+
"value": 0,
86+
"compare": "<="
87+
},
88+
"detailedroute__antenna_diodes_count": {
89+
"value": 100,
90+
"compare": "<="
91+
},
92+
"finish__timing__setup__ws": {
93+
"value": -75.2,
94+
"compare": ">="
95+
},
96+
"finish__timing__setup__tns": {
97+
"value": -585.0,
98+
"compare": ">="
99+
},
100+
"finish__timing__hold__ws": {
101+
"value": -41.2,
102+
"compare": ">="
103+
},
104+
"finish__timing__hold__tns": {
105+
"value": -1220.0,
106+
"compare": ">="
107+
},
108+
"finish__design__instance__area": {
109+
"value": 1636,
110+
"compare": "<="
111+
}
112+
}

flow/designs/gt2n/gcd/config.mk

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
export DESIGN_NICKNAME = gcd
2+
export DESIGN_NAME = gcd
3+
export PLATFORM = gt2n
4+
5+
export VERILOG_FILES = $(DESIGN_HOME)/src/$(DESIGN_NAME)/gcd.v
6+
export SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NAME)/constraint.sdc
7+
8+
export CORE_UTILIZATION = 25
9+
export CORE_MARGIN = 0.5
10+
export PLACE_DENSITY = 0.35
11+
export TNS_END_PERCENT = 100
12+
13+
# Highest layer gcd actually routes on (M6-M13 carry no wire). Capping here
14+
# instead of the platform M13 top shrinks the detailed-route grid, vias, and
15+
# DRC. See platforms/gt2n/config.mk.
16+
export MAX_ROUTING_LAYER = M5
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
current_design gcd
2+
3+
set clk_name core_clock
4+
set clk_port_name clk
5+
# 500 ps clock (2 GHz) — modest target; lib path delays grow once realistic
6+
# wire RC kicks in. Tighten once a clean run lands.
7+
set clk_period 500
8+
set clk_io_pct 0.2
9+
10+
set clk_port [get_ports $clk_port_name]
11+
12+
create_clock -name $clk_name -period $clk_period $clk_port
13+
14+
set non_clock_inputs [all_inputs -no_clocks]
15+
16+
set_input_delay [expr $clk_period * $clk_io_pct] -clock $clk_name $non_clock_inputs
17+
set_output_delay [expr $clk_period * $clk_io_pct] -clock $clk_name [all_outputs]
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
{
2+
"synth__canonical_netlist__hash": {
3+
"value": "94435b2c79066c9133b4aed43b6f5abf1ec21003",
4+
"compare": "==",
5+
"level": "warning"
6+
},
7+
"synth__netlist__hash": {
8+
"value": "102bf37d6da7bc1aa234e916ebbf91984197836d",
9+
"compare": "==",
10+
"level": "warning"
11+
},
12+
"synth__design__instance__area__stdcell": {
13+
"value": 18.8,
14+
"compare": "<="
15+
},
16+
"constraints__clocks__count": {
17+
"value": 1,
18+
"compare": "=="
19+
},
20+
"placeopt__design__instance__area": {
21+
"value": 22,
22+
"compare": "<="
23+
},
24+
"placeopt__design__instance__count__stdcell": {
25+
"value": 877,
26+
"compare": "<="
27+
},
28+
"detailedplace__design__violations": {
29+
"value": 0,
30+
"compare": "=="
31+
},
32+
"cts__design__instance__count__setup_buffer": {
33+
"value": 76,
34+
"compare": "<="
35+
},
36+
"cts__design__instance__count__hold_buffer": {
37+
"value": 76,
38+
"compare": "<="
39+
},
40+
"cts__timing__setup__ws": {
41+
"value": -25.0,
42+
"compare": ">="
43+
},
44+
"cts__timing__setup__tns": {
45+
"value": -100.0,
46+
"compare": ">="
47+
},
48+
"cts__timing__hold__ws": {
49+
"value": -25.0,
50+
"compare": ">="
51+
},
52+
"cts__timing__hold__tns": {
53+
"value": -100.0,
54+
"compare": ">="
55+
},
56+
"globalroute__antenna_diodes_count": {
57+
"value": 100,
58+
"compare": "<="
59+
},
60+
"globalroute__timing__setup__ws": {
61+
"value": -25.0,
62+
"compare": ">="
63+
},
64+
"globalroute__timing__setup__tns": {
65+
"value": -100.0,
66+
"compare": ">="
67+
},
68+
"globalroute__timing__hold__ws": {
69+
"value": -25.0,
70+
"compare": ">="
71+
},
72+
"globalroute__timing__hold__tns": {
73+
"value": -100.0,
74+
"compare": ">="
75+
},
76+
"detailedroute__route__wirelength": {
77+
"value": 848,
78+
"compare": "<="
79+
},
80+
"detailedroute__route__drc_errors": {
81+
"value": 0,
82+
"compare": "<="
83+
},
84+
"detailedroute__antenna__violating__nets": {
85+
"value": 0,
86+
"compare": "<="
87+
},
88+
"detailedroute__antenna_diodes_count": {
89+
"value": 100,
90+
"compare": "<="
91+
},
92+
"finish__timing__setup__ws": {
93+
"value": -25.0,
94+
"compare": ">="
95+
},
96+
"finish__timing__setup__tns": {
97+
"value": -100.0,
98+
"compare": ">="
99+
},
100+
"finish__timing__hold__ws": {
101+
"value": -25.0,
102+
"compare": ">="
103+
},
104+
"finish__timing__hold__tns": {
105+
"value": -100.0,
106+
"compare": ">="
107+
},
108+
"finish__design__instance__area": {
109+
"value": 73,
110+
"compare": "<="
111+
}
112+
}

flow/designs/gt2n/jpeg/config.mk

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
export DESIGN_NICKNAME = jpeg
2+
export DESIGN_NAME = jpeg_encoder
3+
export PLATFORM = gt2n
4+
5+
export VERILOG_FILES = $(sort $(wildcard $(DESIGN_HOME)/src/$(DESIGN_NICKNAME)/*.v))
6+
export VERILOG_INCLUDE_DIRS = $(DESIGN_HOME)/src/$(DESIGN_NICKNAME)/include
7+
export SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint.sdc
8+
9+
export ABC_AREA = 1
10+
11+
# Floorplan: jpeg_encoder is larger than aes; start conservative.
12+
export CORE_UTILIZATION = 40
13+
export CORE_ASPECT_RATIO = 1
14+
export CORE_MARGIN = 2
15+
export PLACE_DENSITY_LB_ADDON = 0.20
16+
export TNS_END_PERCENT = 100
17+
18+
# Highest layer jpeg actually routes on (M10-M13 carry no wire). Capping here
19+
# instead of the platform M13 top shrinks the detailed-route grid, vias, and
20+
# DRC. See platforms/gt2n/config.mk.
21+
export MAX_ROUTING_LAYER = M9
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
current_design jpeg_encoder
2+
3+
set clk_name clk
4+
set clk_port_name clk
5+
# GT2N lib uses time_unit = 1 ps. 1500 ps -> 667 MHz. Loose first-pass
6+
# target with the analytical-RC stand-in -- tighten once the optimize-ppa
7+
# loop has the baseline period_min.
8+
set clk_period 1000
9+
set clk_io_pct 0.2
10+
11+
set clk_port [get_ports $clk_port_name]
12+
create_clock -name $clk_name -period $clk_period $clk_port
13+
14+
set non_clock_inputs [all_inputs -no_clocks]
15+
set_input_delay [expr $clk_period * $clk_io_pct] -clock $clk_name $non_clock_inputs
16+
set_output_delay [expr $clk_period * $clk_io_pct] -clock $clk_name [all_outputs]

0 commit comments

Comments
 (0)