2 from __future__
import print_function
8 from helpers
.io
import ErrorMessage
9 from helpers
.io
import WarningMessage
10 from helpers
.overlay
import CfgCache
11 from helpers
import trace
, l
13 from Hurricane
import DbU
14 from Hurricane
import Pin
15 from Hurricane
import Transformation
16 from plugins
.alpha
.block
.block
import Block
17 from plugins
.alpha
.block
.configuration
import IoPin
20 af
= CRL
.AllianceFramework
.get()
24 with
CfgCache(priority
=Cfg
.Parameter
.Priority
.UserFile
) as cfg
:
25 cfg
.misc
.catchCore
= False
27 cfg
.misc
.paranoid
= False
29 cfg
.misc
.logMode
= True
30 cfg
.misc
.verboseLevel1
= True
31 cfg
.misc
.verboseLevel2
= True
32 cfg
.etesian
.effort
= 2
33 cfg
.etesian
.spaceMargin
= 0.10 # 10%
34 cfg
.etesian
.aspectRatio
= 1.0 # 100%
35 cfg
.etesian
.uniformDensity
= True
36 cfg
.anabatic
.edgeLenght
= 24
37 cfg
.anabatic
.edgeWidth
= 8
38 cfg
.anabatic
.topRoutingLayer
= 'METAL5'
39 cfg
.katana
.searchHalo
= 30
40 cfg
.katana
.eventsLimit
= 1000000
41 cfg
.katana
.hTracksReservedLocal
= 7
42 cfg
.katana
.vTracksReservedLocal
= 6
44 env
= af
.getEnvironment()
45 env
.setCLOCK('^clk$|m_clock')
50 def scriptMain ( **kw
):
51 """The mandatory function that Coriolis CGT/Unicorn will look for."""
62 (IW | AB
, 'coresync_clk' , 0 ),
63 (IW | AB
, 'cu_issue_i' , 0 ),
64 (IW | AB
, 'oper_i_alu_alu0_imm_data_imm_ok' , 0 ),
65 (IW | AB
, 'oper_i_alu_alu0_invert_a' , 0 ),
66 (IW | AB
, 'oper_i_alu_alu0_invert_out' , 0 ),
67 (IW | AB
, 'oper_i_alu_alu0_is_32bit' , 0 ),
68 (IW | AB
, 'oper_i_alu_alu0_is_signed' , 0 ),
69 (IW | AB
, 'oper_i_alu_alu0_oe_oe' , 0 ),
70 (IW | AB
, 'oper_i_alu_alu0_oe_oe_ok' , 0 ),
71 (IW | AB
, 'oper_i_alu_alu0_output_carry' , 0 ),
72 (IW | AB
, 'oper_i_alu_alu0_rc_rc' , 0 ),
73 (IW | AB
, 'oper_i_alu_alu0_rc_rc_ok' , 0 ),
74 (IW | AB
, 'oper_i_alu_alu0_write_cr0' , 0 ),
75 (IW | AB
, 'oper_i_alu_alu0_zero_a' , 0 ),
76 (IW | AB
, 'coresync_rst' , 0 ),
77 (IW | AB
, 'src3_i' , 0 ),
78 (IW | AB
, 'oper_i_alu_alu0_input_carry({})' , 0, l( 10.0), 2),
79 (IW | AB
, 'src4_i({})' , 0, l( 10.0), 2),
80 (IW | AB
, 'oper_i_alu_alu0_data_len({})' , 0, l( 10.0), 4),
81 (IW | AB
, 'cu_rd_go_i({})' , 0, l( 10.0), 4),
82 (IW | AB
, 'cu_rdmaskn_i({})' , 0, l( 10.0), 4),
83 (IW | AB
, 'cu_wr_go_i({})' , 0, l( 10.0), 5),
84 (IW | AB
, 'oper_i_alu_alu0_insn_type({})' , 0, l( 10.0), 7),
85 (IW | AB
, 'oper_i_alu_alu0_fn_unit({})' , 0, l( 10.0), 11),
86 (IW | AB
, 'oper_i_alu_alu0_insn({})' , 0, l( 10.0), 32),
87 (IW | AB
, 'oper_i_alu_alu0_imm_data_imm({})', 0, l( 15.0), 64),
88 (IS
, 'src1_i({})' , l(10), l( 15.0), 64),
89 (IS
, 'src2_i({})' , l(15), l( 15.0), 64),
90 (IN
, 'dest1_o({})' , l(20), l( 15.0), 64),
91 (IE | AE
, 'cu_busy_o' , 0 ),
92 (IE | AE
, 'cr_a_ok' , 0 ),
93 (IE | AE
, 'dest5_o' , 0 ),
94 (IE | AE
, 'o_ok' , 0 ),
95 (IE | AE
, 'xer_ca_ok' , 0 ),
96 (IE | AE
, 'xer_ov_ok' , 0 ),
97 (IE | AE
, 'xer_so_ok' , 0 ),
98 (IE | AE
, 'dest3_o({})' , 0, l( 20.0), 2),
99 (IE | AE
, 'dest4_o({})' , 0, l( 20.0), 2),
100 (IE | AE
, 'dest2_o({})' , 0, l( 20.0), 4),
101 (IE | AE
, 'cu_rd_rel_o({})' , 0, l( 20.0), 4),
102 (IE | AE
, 'cu_wr_rel_o({})' , 0, l( 20.0), 5),
107 helpers
.setTraceLevel( 550 )
108 cell
, editor
= plugins
.kwParseMain( **kw
)
110 alu0
= af
.getCell( 'alu0', CRL
.Catalog
.State
.Views
)
111 blockAlu0
= Block
.create (alu0
, ioPins
= alup
)
112 blockAlu0
.state
.cfg
.etesian
.spaceMargin
= 0.05
113 blockAlu0
.state
.fixedHeight
= l(5000)
114 blockAlu0
.state
.useSpares
= False
115 #rvalue = blockAlu0.build()
118 (IN
, 'coresync_clk' , l(4500.0) ),
119 (IW | AB
, 'cu_issue_i' , 0, l(20) ),
120 (IW | AB
, 'oper_i_alu_mul0_imm_data_imm_ok' , 0, l(20) ),
121 (IW | AB
, 'oper_i_alu_mul0_invert_a' , 0, l(20) ),
122 (IW | AB
, 'oper_i_alu_mul0_invert_out' , 0, l(20) ),
123 (IW | AB
, 'oper_i_alu_mul0_is_32bit' , 0, l(20) ),
124 (IW | AB
, 'oper_i_alu_mul0_is_signed' , 0, l(20) ),
125 (IW | AB
, 'oper_i_alu_mul0_oe_oe' , 0, l(20) ),
126 (IW | AB
, 'oper_i_alu_mul0_oe_oe_ok' , 0, l(20) ),
127 (IW | AB
, 'oper_i_alu_mul0_rc_rc' , 0, l(20) ),
128 (IW | AB
, 'oper_i_alu_mul0_rc_rc_ok' , 0, l(20) ),
129 (IW | AB
, 'oper_i_alu_mul0_write_cr0' , 0, l(20) ),
130 (IW | AB
, 'oper_i_alu_mul0_zero_a' , 0, l(20) ),
131 (IW | AB
, 'coresync_rst' , 0, l(20) ),
132 (IW | AB
, 'src3_i' , 0, l(20) ),
133 (IW | AB
, 'cu_rd_go_i({})' , 0, l(10.0), 3),
134 (IW | AB
, 'cu_rdmaskn_i({})' , 0, l(10.0), 3),
135 (IW | AB
, 'cu_wr_go_i({})' , 0, l(10.0), 4),
136 (IW | AB
, 'oper_i_alu_mul0_insn_type({})' , 0, l(10.0), 7),
137 (IW | AB
, 'oper_i_alu_mul0_fn_unit({})' , 0, l(10.0), 11),
138 (IW | AB
, 'oper_i_alu_mul0_insn({})' , 0, l(10.0), 32),
139 (IW | AB
, 'oper_i_alu_mul0_imm_data_imm({})', 0, l(15.0), 64),
140 (IS | AB
, 'src1_i({})' , l(10.0), l(50.0), 64),
141 (IS | AB
, 'src2_i({})' , l(20.0), l(50.0), 64),
142 (IE | AE
, 'cu_busy_o' , 0 ),
143 (IE | AE
, 'cr_a_ok' , 0 ),
144 (IE | AE
, 'dest4_o' , 0 ),
145 (IE | AE
, 'o_ok' , 0 ),
146 (IE | AE
, 'xer_ov_ok' , 0 ),
147 (IE | AE
, 'xer_so_ok' , 0 ),
148 (IE | AE
, 'dest3_o({})' , 0, l( 20.0), 2),
149 (IE | AE
, 'dest2_o({})' , 0, l( 20.0), 4),
150 (IE | AE
, 'cu_rd_rel_o({})' , 0, l( 20.0), 3),
151 (IE | AE
, 'cu_wr_rel_o({})' , 0, l( 20.0), 4),
152 (IN | AE
, 'dest1_o({})' , 0, l( 30.0), 64),
154 mul0
= af
.getCell( 'mul0', CRL
.Catalog
.State
.Views
)
155 blockMul0
= Block
.create ( mul0
, ioPins
=mulp
)
156 blockMul0
.state
.cfg
.etesian
.uniformDensity
= True
157 blockMul0
.state
.cfg
.etesian
.spaceMargin
= 0.15
158 blockMul0
.state
.cfg
.katana
.searchHalo
= 1
159 blockMul0
.state
.fixedHeight
= l(5000)
160 blockMul0
.state
.useSpares
= False
161 #rvalue = blockMul0.build()
164 (IN
, 'coresync_clk' , l(4500.0) ),
165 (IW | AB
, 'cu_issue_i' , 0, l(20) ),
166 (IW | AB
, 'oper_i_alu_div0_imm_data_imm_ok' , 0, l(20) ),
167 (IW | AB
, 'oper_i_alu_div0_invert_a' , 0, l(20) ),
168 (IW | AB
, 'oper_i_alu_div0_invert_out' , 0, l(20) ),
169 (IW | AB
, 'oper_i_alu_div0_is_32bit' , 0, l(20) ),
170 (IW | AB
, 'oper_i_alu_div0_is_signed' , 0, l(20) ),
171 (IW | AB
, 'oper_i_alu_div0_oe_oe' , 0, l(20) ),
172 (IW | AB
, 'oper_i_alu_div0_oe_oe_ok' , 0, l(20) ),
173 (IW | AB
, 'oper_i_alu_div0_output_carry' , 0, l(20) ),
174 (IW | AB
, 'oper_i_alu_div0_rc_rc' , 0, l(20) ),
175 (IW | AB
, 'oper_i_alu_div0_rc_rc_ok' , 0, l(20) ),
176 (IW | AB
, 'oper_i_alu_div0_write_cr0' , 0, l(20) ),
177 (IW | AB
, 'oper_i_alu_div0_zero_a' , 0, l(20) ),
178 (IW | AB
, 'coresync_rst' , 0, l(20) ),
179 (IW | AB
, 'src3_i' , 0, l(20) ),
180 (IW | AB
, 'cu_rd_go_i({})' , 0, l(10.0), 3),
181 (IW | AB
, 'cu_rdmaskn_i({})' , 0, l(10.0), 3),
182 (IW | AB
, 'cu_wr_go_i({})' , 0, l(10.0), 4),
183 (IW | AB
, 'oper_i_alu_div0_data_len({})' , 0, l(10.0), 7),
184 (IW | AB
, 'oper_i_alu_div0_insn_type({})' , 0, l(10.0), 7),
185 (IW | AB
, 'oper_i_alu_div0_fn_unit({})' , 0, l(10.0), 11),
186 (IW | AB
, 'oper_i_alu_div0_insn({})' , 0, l(10.0), 32),
187 (IW | AB
, 'oper_i_alu_div0_imm_data_imm({})', 0, l(15.0), 64),
188 (IS | AB
, 'src1_i({})' , l(10.0), l(50.0), 64),
189 (IS | AB
, 'src2_i({})' , l(20.0), l(50.0), 64),
190 (IE | AE
, 'cu_busy_o' , 0 ),
191 (IE | AE
, 'cr_a_ok' , 0 ),
192 (IE | AE
, 'dest4_o' , 0 ),
193 (IE | AE
, 'o_ok' , 0 ),
194 (IE | AE
, 'xer_ov_ok' , 0 ),
195 (IE | AE
, 'xer_so_ok' , 0 ),
196 (IE | AE
, 'dest3_o({})' , 0, l( 20.0), 2),
197 (IE | AE
, 'dest2_o({})' , 0, l( 20.0), 4),
198 (IE | AE
, 'cu_rd_rel_o({})' , 0, l( 20.0), 3),
199 (IE | AE
, 'cu_wr_rel_o({})' , 0, l( 20.0), 4),
200 (IN | AE
, 'dest1_o({})' , 0, l( 30.0), 64),
202 div0
= af
.getCell( 'div0', CRL
.Catalog
.State
.Views
)
203 blockDiv0
= Block
.create ( div0
, ioPins
=divp
)
204 blockDiv0
.state
.cfg
.etesian
.uniformDensity
= True
205 blockDiv0
.state
.cfg
.etesian
.spaceMargin
= 0.10
206 blockDiv0
.state
.cfg
.katana
.searchHalo
= 1
207 blockDiv0
.state
.fixedHeight
= l(2000)
208 blockDiv0
.state
.useSpares
= False
209 #rvalue = blockDiv0.build()
212 (IN
, 'coresync_clk' , l( 805.0) ),
213 (IW
, 'cu_issue_i' , l( 30.0) ),
214 (IW
, 'oper_i_alu_branch0_imm_data_imm_ok' , l( 40.0) ),
215 (IW
, 'oper_i_alu_branch0_is_32bit' , l( 70.0) ),
216 (IW
, 'oper_i_alu_branch0_lk' , l( 150.0) ),
217 (IW
, 'coresync_rst' , l( 160.0) ),
218 (IW
, 'src3_i({})' , l( 180.0), l( 10.0), 4),
219 (IW
, 'cu_rd_go_i({})' , l( 270.0), l( 10.0), 3),
220 (IW
, 'cu_rdmaskn_i({})' , l( 310.0), l( 10.0), 3),
221 (IW
, 'cu_wr_go_i({})' , l( 350.0), l( 10.0), 3),
222 (IW
, 'oper_i_alu_branch0_insn_type({})' , l( 400.0), l( 10.0), 7),
223 (IW
, 'oper_i_alu_branch0_fn_unit({})' , l( 470.0), l( 10.0), 11),
224 (IW
, 'oper_i_alu_branch0_insn({})' , l( 580.0), l( 10.0), 32),
225 (IW
, 'oper_i_alu_branch0_imm_data_imm({})', l( 900.0), l( 10.0), 64),
226 (IW
, 'oper_i_alu_branch0_cia({})' , l(1540.0), l( 10.0), 64),
227 (IS
, 'src1_i({})' , l( 10.0), l( 20.0), 64),
228 (IS
, 'src2_i({})' , l( 15.0), l( 20.0), 64),
229 (IE
, 'cu_busy_o' , l(3500.0) ),
230 (IE
, 'fast1_ok' , l(3520.0) ),
231 (IE
, 'fast2_ok' , l(3540.0) ),
232 (IE
, 'nia_ok' , l(3560.0) ),
233 (IE
, 'dest2_o({})' , l(3580.0), l( 10.0), 64),
234 (IE
, 'dest3_o({})' , l(4220.0), l( 10.0), 64),
235 (IE
, 'cu_rd_rel_o({})' , l(4860.0), l( 20.0), 3),
236 (IE
, 'cu_wr_rel_o({})' , l(4920.0), l( 20.0), 3),
237 (IN
, 'dest1_o({})' , l( 500.0), l( 10.0), 64),
239 branch0
= af
.getCell( 'branch0', CRL
.Catalog
.State
.Views
)
240 blockBranch0
= Block
.create ( branch0
, ioPins
=branchp
)
241 blockBranch0
.state
.cfg
.etesian
.spaceMargin
= 0.07
242 blockBranch0
.state
.fixedHeight
= l(5000)
243 blockBranch0
.state
.useSpares
= False
244 #rvalue = blockBranch0.build()
246 cr0
= af
.getCell( 'cr0', CRL
.Catalog
.State
.Views
)
247 blockCr0
= Block
.create \
250 (IN
, 'coresync_clk' , l( 805.0) ),
251 (IW
, 'cu_issue_i' , l( 30.0) ),
252 (IW
, 'oper_i_alu_cr0_read_cr_whole' , l( 40.0) ),
253 (IW
, 'oper_i_alu_cr0_write_cr_whole' , l( 70.0) ),
254 (IW
, 'coresync_rst' , l( 160.0) ),
255 (IW
, 'src4_i({})' , l( 180.0), l( 10.0), 4),
256 (IW
, 'src5_i({})' , l( 220.0), l( 10.0), 4),
257 (IW
, 'src6_i({})' , l( 260.0), l( 10.0), 4),
258 (IW
, 'cu_rd_go_i({})' , l( 300.0), l( 10.0), 6),
259 (IW
, 'cu_rdmaskn_i({})' , l( 360.0), l( 10.0), 6),
260 (IW
, 'cu_wr_go_i({})' , l( 420.0), l( 10.0), 3),
261 (IW
, 'oper_i_alu_cr0_insn_type({})' , l( 450.0), l( 10.0), 7),
262 (IW
, 'oper_i_alu_cr0_fn_unit({})' , l( 520.0), l( 10.0), 11),
263 (IW
, 'oper_i_alu_cr0_insn({})' , l( 630.0), l( 10.0), 32),
264 (IS
, 'src1_i({})' , l( 10.0), l( 10.0), 64),
265 (IS
, 'src2_i({})' , l( 15.0), l( 10.0), 64),
266 (IE
, 'src3_i({})' , l( 10.0), l( 20.0), 32),
267 (IE
, 'cu_busy_o' , l(4320.0) ),
268 (IE
, 'cr_a_ok' , l(4340.0) ),
269 (IE
, 'full_cr_ok' , l(4360.0) ),
270 (IE
, 'o_ok' , l(4380.0) ),
271 (IE
, 'dest2_o({})' , l(4400.0), l( 10.0), 32),
272 (IE
, 'dest3_o({})' , l(4720.0), l( 10.0), 4),
273 (IE
, 'cu_rd_rel_o({})' , l(4800.0), l( 20.0), 6),
274 (IE
, 'cu_wr_rel_o({})' , l(4920.0), l( 20.0), 3),
275 (IN
, 'dest1_o({})' , l( 100.0), l( 10.0), 64)
278 blockCr0
.state
.cfg
.etesian
.spaceMargin
= 0.10
279 blockCr0
.state
.fixedHeight
= l(5000)
280 blockCr0
.state
.useSpares
= False
281 #rvalue = blockCr0.build()
283 ldst0
= af
.getCell( 'ldst0', CRL
.Catalog
.State
.Views
)
284 blockLdst0
= Block
.create \
287 (IN
, 'coresync_clk' , l(805.0) ),
288 (IW | AB
, 'cu_ad_go_i' , 0, l(20), 1),
289 (IW | AB
, 'cu_issue_i' , 0, l(20), 1),
290 (IW | AB
, 'ldst_port0_addr_exc_o' , 0, l(20), 1),
291 (IW | AB
, 'ldst_port0_addr_ok_o' , 0, l(20), 1),
292 (IW | AB
, 'ldst_port0_ld_data_o_ok' , 0, l(20), 1),
293 (IW | AB
, 'oper_i_ldst_ldst0_byte_reverse' , 0, l(20), 1),
294 (IW | AB
, 'oper_i_ldst_ldst0_imm_data_imm_ok' , 0, l(20), 1),
295 (IW | AB
, 'oper_i_ldst_ldst0_is_32bit' , 0, l(20), 1),
296 (IW | AB
, 'oper_i_ldst_ldst0_is_signed' , 0, l(20), 1),
297 (IW | AB
, 'oper_i_ldst_ldst0_oe_oe' , 0, l(20), 1),
298 (IW | AB
, 'oper_i_ldst_ldst0_oe_oe_ok' , 0, l(20), 1),
299 (IW | AB
, 'oper_i_ldst_ldst0_rc_rc' , 0, l(20), 1),
300 (IW | AB
, 'oper_i_ldst_ldst0_rc_rc_ok' , 0, l(20), 1),
301 (IW | AB
, 'oper_i_ldst_ldst0_sign_extend' , 0, l(20), 1),
302 (IW | AB
, 'oper_i_ldst_ldst0_zero_a' , 0, l(20), 1),
303 (IW | AB
, 'coresync_rst' , 0, l(20), 1),
304 (IW | AB
, 'cu_st_go_i' , 0, l(20), 1),
305 (IW | AB
, 'oper_i_ldst_ldst0_ldst_mode({})' , 0, l(20), 2),
306 (IW | AB
, 'cu_rd_go_i({})' , 0, l(20), 3),
307 (IW | AB
, 'cu_rdmaskn_i({})' , 0, l(20), 3),
308 (IW | AB
, 'cu_wr_go_i({})' , 0, l(20), 2),
309 (IW | AB
, 'oper_i_ldst_ldst0_data_len({})' , 0, l(20), 4),
310 (IW | AB
, 'oper_i_ldst_ldst0_insn_type({})' , 0, l(20), 7),
311 (IW | AB
, 'ldst_port0_ld_data_o({})' , 0, l(20), 64),
312 (IW | AB
, 'oper_i_ldst_ldst0_imm_data_imm({})' , 0, l(20), 64),
313 (IS | AB
, 'src1_i({})' , 0, l(5), 64),
314 (IS | AB
, 'src2_i({})' , 0, l(5), 64),
315 (IE | AE
, 'src3_i({})' , 0, 0, 64),
316 (IE | AE
, 'cu_busy_o' , 0, l(20), 1),
317 (IE | AE
, 'cu_ad_rel_o' , 0, l(20), 1),
318 (IE | AE
, 'ldst_port0_addr_i_ok' , 0, l(20), 1),
319 (IE | AE
, 'ldst_port0_is_ld_i' , 0, l(20), 1),
320 (IE | AE
, 'ldst_port0_is_st_i' , 0, l(20), 1),
321 (IE | AE
, 'load_mem_o' , 0, l(20), 1),
322 (IE | AE
, 'cu_st_rel_o' , 0, l(20), 1),
323 (IE | AE
, 'stwd_mem_o' , 0, l(20), 1),
324 (IE | AE
, 'ea({})' , 0, l(20), 64),
325 (IE | AE
, 'ldst_port0_st_data_i({})' , 0, l(20), 64),
326 (IE | AE
, 'cu_rd_rel_o({})' , 0, 0, 3),
327 (IE | AE
, 'cu_wr_rel_o({})' , 0, 0, 2),
328 (IE | AE
, 'ldst_port0_addr_i_95' , 0, l(20), 1),
329 (IE | AE
, 'ldst_port0_addr_i_{}' , 0, l(20), 64),
330 (IN | AE
, 'o({})' , 0, 0, 64),
333 blockLdst0
.state
.cfg
.etesian
.uniformDensity
= True
334 blockLdst0
.state
.cfg
.etesian
.spaceMargin
= 0.20
335 blockLdst0
.state
.cfg
.katana
.searchHalo
= 1
336 blockLdst0
.state
.cfg
.katana
.hTracksReservedLocal
= 10
337 blockLdst0
.state
.cfg
.katana
.vTracksReservedLocal
= 10
338 blockLdst0
.state
.fixedHeight
= l(5000)
339 blockLdst0
.state
.useSpares
= False
340 #rvalue = blockLdst0.build()
342 logical0
= af
.getCell( 'logical0', CRL
.Catalog
.State
.Views
)
343 blockLogical0
= Block
.create \
346 (IN
, 'coresync_clk' , l(805.0) ),
347 (IW | AB
, 'cu_issue_i' , 0, l(20), 1),
348 (IW | AB
, 'oper_i_alu_logical0_imm_data_imm_ok' , 0, l(20), 1),
349 (IW | AB
, 'oper_i_alu_logical0_invert_a' , 0, l(20), 1),
350 (IW | AB
, 'oper_i_alu_logical0_invert_out' , 0, l(20), 1),
351 (IW | AB
, 'oper_i_alu_logical0_is_32bit' , 0, l(20), 1),
352 (IW | AB
, 'oper_i_alu_logical0_is_signed' , 0, l(20), 1),
353 (IW | AB
, 'oper_i_alu_logical0_oe_oe' , 0, l(20), 1),
354 (IW | AB
, 'oper_i_alu_logical0_oe_oe_ok' , 0, l(20), 1),
355 (IW | AB
, 'oper_i_alu_logical0_output_carry' , 0, l(20), 1),
356 (IW | AB
, 'oper_i_alu_logical0_rc_rc' , 0, l(20), 1),
357 (IW | AB
, 'oper_i_alu_logical0_rc_rc_ok' , 0, l(20), 1),
358 (IW | AB
, 'oper_i_alu_logical0_write_cr0' , 0, l(20), 1),
359 (IW | AB
, 'oper_i_alu_logical0_zero_a' , 0, l(20), 1),
360 (IW | AB
, 'coresync_rst' , 0, l(20), 1),
361 (IW | AB
, 'oper_i_alu_logical0_input_carry({})' , 0, l(20), 2),
362 (IW | AB
, 'cu_rd_go_i({})' , 0, l(20), 2),
363 (IW | AB
, 'cu_rdmaskn_i({})' , 0, l(20), 2),
364 (IW | AB
, 'cu_wr_go_i({})' , 0, l(20), 3),
365 (IW | AB
, 'oper_i_alu_logical0_data_len({})' , 0, l(20), 4),
366 (IW | AB
, 'oper_i_alu_logical0_insn_type({})' , 0, l(20), 7),
367 (IW | AB
, 'oper_i_alu_logical0_fn_unit({})' , 0, l(20), 11),
368 (IW | AB
, 'oper_i_alu_logical0_insn({})' , 0, l(20), 32),
369 (IW | AB
, 'oper_i_alu_logical0_imm_data_imm({})', 0, l(20), 64),
370 (IS | AB
, 'src1_i({})' , 0, l(10), 64),
371 (IS | AB
, 'src2_i({})' , 0, l(5), 64),
372 (IE | AE
, 'cu_busy_o' , 0, l(20), 1),
373 (IE | AE
, 'cr_a_ok' , 0, l(20), 1),
374 (IE | AE
, 'o_ok' , 0, l(20), 1),
375 (IE | AE
, 'xer_ca_ok' , 0, l(20), 1),
376 (IE | AE
, 'cu_rd_rel_o({})' , 0, 0, 2),
377 (IE | AE
, 'cu_wr_rel_o({})' , 0, 0, 3),
378 (IN | AE
, 'dest3_o({})' , 0, 0, 2),
379 (IN | AE
, 'dest2_o({})' , 0, 0, 4),
380 (IN | AE
, 'dest1_o({})' , 0, 0, 64),
383 blockLogical0
.state
.cfg
.etesian
.uniformDensity
= True
384 blockLogical0
.state
.cfg
.etesian
.spaceMargin
= 0.07
385 blockLogical0
.state
.cfg
.katana
.searchHalo
= 1
386 blockLogical0
.state
.fixedHeight
= l(5000)
387 blockLogical0
.state
.useSpares
= False
388 #rvalue = blockLogical0.build()
390 shiftrot0
= af
.getCell( 'shiftrot0', CRL
.Catalog
.State
.Views
)
391 blockShiftrot0
= Block
.create \
394 (IN
, 'coresync_clk' , l(805.0) ),
395 (IW | AB
, 'cu_issue_i' , 0, l(20), 1),
396 (IW | AB
, 'oper_i_alu_shift_rot0_imm_data_imm_ok' , 0, l(20), 1),
397 (IW | AB
, 'oper_i_alu_shift_rot0_input_cr' , 0, l(20), 1),
398 (IW | AB
, 'oper_i_alu_shift_rot0_is_32bit' , 0, l(20), 1),
399 (IW | AB
, 'oper_i_alu_shift_rot0_is_signed' , 0, l(20), 1),
400 (IW | AB
, 'oper_i_alu_shift_rot0_oe_oe' , 0, l(20), 1),
401 (IW | AB
, 'oper_i_alu_shift_rot0_oe_oe_ok' , 0, l(20), 1),
402 (IW | AB
, 'oper_i_alu_shift_rot0_output_carry' , 0, l(20), 1),
403 (IW | AB
, 'oper_i_alu_shift_rot0_output_cr' , 0, l(20), 1),
404 (IW | AB
, 'oper_i_alu_shift_rot0_rc_rc' , 0, l(20), 1),
405 (IW | AB
, 'oper_i_alu_shift_rot0_rc_rc_ok' , 0, l(20), 1),
406 (IW | AB
, 'coresync_rst' , 0, l(20), 1),
407 (IW | AB
, 'oper_i_alu_shift_rot0_input_carry({})' , 0, l(20), 2),
408 (IW | AB
, 'src4_i({})' , 0, l(10), 2),
409 (IW | AB
, 'cu_rd_go_i({})' , 0, l(20), 4),
410 (IW | AB
, 'cu_rdmaskn_i({})' , 0, l(20), 4),
411 (IW | AB
, 'cu_wr_go_i({})' , 0, l(20), 3),
412 (IW | AB
, 'oper_i_alu_shift_rot0_insn_type({})' , 0, l(20), 7),
413 (IW | AB
, 'oper_i_alu_shift_rot0_fn_unit({})' , 0, l(20), 11),
414 (IW | AB
, 'oper_i_alu_shift_rot0_insn({})' , 0, l(20), 32),
415 (IW | AB
, 'oper_i_alu_shift_rot0_imm_data_imm({})', 0, l(20), 64),
416 (IW | AB
, 'src3_i({})' , 0, l(10), 64),
417 (IS | AB
, 'src1_i({})' , 0, l(10), 64),
418 (IS | AB
, 'src2_i({})' , 0, l(5), 64),
419 (IE | AE
, 'cu_busy_o' , 0, l(20), 1),
420 (IE | AE
, 'cr_a_ok' , 0, l(20), 1),
421 (IE | AE
, 'o_ok' , 0, l(20), 1),
422 (IE | AE
, 'xer_ca_ok' , 0, l(20), 1),
423 (IE | AE
, 'cu_rd_rel_o({})' , 0, 0, 4),
424 (IE | AE
, 'cu_wr_rel_o({})' , 0, 0, 3),
425 (IN | AE
, 'dest3_o({})' , 0, 0, 2),
426 (IN | AE
, 'dest2_o({})' , 0, 0, 4),
427 (IN | AE
, 'dest1_o({})' , 0, 0, 64),
430 blockShiftrot0
.state
.cfg
.etesian
.uniformDensity
= True
431 blockShiftrot0
.state
.cfg
.etesian
.spaceMargin
= 0.7
432 blockShiftrot0
.state
.cfg
.katana
.searchHalo
= 1
433 blockShiftrot0
.state
.fixedHeight
= l(5000)
434 blockShiftrot0
.state
.useSpares
= False
435 #rvalue = blockShiftrot0.build()
437 spr0
= af
.getCell( 'spr0', CRL
.Catalog
.State
.Views
)
438 blockSpr0
= Block
.create \
441 (IN
, 'coresync_clk' , l(805.0) ),
442 (IW | AB
, 'cu_issue_i' , 0, l(20), 1),
443 (IW | AB
, 'oper_i_alu_spr0_is_32bit' , 0, l(20), 1),
444 (IW | AB
, 'coresync_rst' , 0, l(20), 1),
445 (IW | AB
, 'src4_i' , 0, l(10), 1),
446 (IW | AB
, 'src5_i({})' , 0, l(10), 2),
447 (IW | AB
, 'src6_i({})' , 0, l(10), 2),
448 (IW | AB
, 'cu_rd_go_i({})' , 0, l(20), 6),
449 (IW | AB
, 'cu_rdmaskn_i({})' , 0, l(20), 6),
450 (IW | AB
, 'cu_wr_go_i({})' , 0, l(20), 6),
451 (IW | AB
, 'oper_i_alu_spr0_insn_type({})', 0, l(20), 7),
452 (IW | AB
, 'oper_i_alu_spr0_fn_unit({})' , 0, l(20), 11),
453 (IW | AB
, 'oper_i_alu_spr0_insn({})' , 0, l(20), 32),
454 (IW | AB
, 'src3_i({})' , 0, l(10), 64),
455 (IS | AB
, 'src1_i({})' , 0, l(10), 64),
456 (IS | AB
, 'src2_i({})' , 0, l(5), 64),
457 (IE | AE
, 'cu_busy_o' , 0, l(20), 1),
458 (IE | AE
, 'dest4_o' , 0, l(20), 1),
459 (IE | AE
, 'fast1_ok' , 0, l(20), 1),
460 (IE | AE
, 'o_ok' , 0, l(20), 1),
461 (IE | AE
, 'spr1_ok' , 0, l(20), 1),
462 (IE | AE
, 'xer_ca_ok' , 0, l(20), 1),
463 (IE | AE
, 'xer_ov_ok' , 0, l(20), 1),
464 (IE | AE
, 'xer_so_ok' , 0, l(20), 1),
465 (IE | AE
, 'cu_rd_rel_o({})' , 0, 0, 6),
466 (IE | AE
, 'cu_wr_rel_o({})' , 0, 0, 6),
467 (IN | AE
, 'dest5_o({})' , 0, 0, 2),
468 (IN | AE
, 'dest6_o({})' , 0, 0, 2),
469 (IE | AE
, 'dest3_o({})' , 0, l(20), 64),
470 (IE | AE
, 'dest2_o({})' , 0, l(20), 64),
471 (IE | AE
, 'dest1_o({})' , 0, l(20), 64),
474 blockSpr0
.state
.cfg
.etesian
.uniformDensity
= True
475 blockSpr0
.state
.cfg
.etesian
.spaceMargin
= 0.5
476 blockSpr0
.state
.cfg
.katana
.searchHalo
= 1
477 blockSpr0
.state
.fixedHeight
= l(4500)
478 blockSpr0
.state
.useSpares
= False
479 #rvalue = blockSpr0.build()
481 trap0
= af
.getCell( 'trap0', CRL
.Catalog
.State
.Views
)
482 blockTrap0
= Block
.create \
485 (IN
, 'coresync_clk' , l(805.0) ),
486 (IW | AB
, 'cu_issue_i' , 0, l(20), 1),
487 (IW | AB
, 'oper_i_alu_trap0_is_32bit' , 0, l(20), 1),
488 (IW | AB
, 'coresync_rst' , 0, l(20), 1),
489 (IW | AB
, 'cu_rd_go_i({})' , 0, l(20), 4),
490 (IW | AB
, 'cu_rdmaskn_i({})' , 0, l(20), 4),
491 (IW | AB
, 'cu_wr_go_i({})' , 0, l(20), 5),
492 (IW | AB
, 'oper_i_alu_trap0_traptype({})' , 0, l(20), 5),
493 (IW | AB
, 'oper_i_alu_trap0_insn_type({})', 0, l(20), 7),
494 (IW | AB
, 'oper_i_alu_trap0_fn_unit({})' , 0, l(20), 11),
495 (IW | AB
, 'oper_i_alu_trap0_trapaddr({})' , 0, l(20), 13),
496 (IW | AB
, 'oper_i_alu_trap0_insn({})' , 0, l(20), 32),
497 (IW | AB
, 'oper_i_alu_trap0_cia({})' , 0, l(20), 64),
498 (IW | AB
, 'oper_i_alu_trap0_msr({})' , 0, l(20), 64),
499 (IW | AB
, 'src3_i({})' , 0, l(10), 64),
500 (IS | AB
, 'src4_i({})' , 0, l(10), 64),
501 (IS | AB
, 'src1_i({})' , 0, l(10), 64),
502 (IS | AB
, 'src2_i({})' , 0, l(5), 64),
503 (IE | AE
, 'cu_busy_o' , 0, l(20), 1),
504 (IE | AE
, 'fast1_ok' , 0, l(20), 1),
505 (IE | AE
, 'fast2_ok' , 0, l(20), 1),
506 (IE | AE
, 'msr_ok' , 0, l(20), 1),
507 (IE | AE
, 'nia_ok' , 0, l(20), 1),
508 (IE | AE
, 'o_ok' , 0, l(20), 1),
509 (IE | AE
, 'cu_rd_rel_o({})' , 0, 0, 4),
510 (IE | AE
, 'cu_wr_rel_o({})' , 0, 0, 5),
511 (IN | AE
, 'dest5_o({})' , 0, l(10), 64),
512 (IN | AE
, 'dest4_o({})' , 0, l(10), 64),
513 (IE | AE
, 'dest3_o({})' , 0, l(10), 64),
514 (IE | AE
, 'dest2_o({})' , 0, l(10), 64),
515 (IE | AE
, 'dest1_o({})' , 0, l(10), 64),
518 blockTrap0
.state
.cfg
.etesian
.uniformDensity
= True
519 blockTrap0
.state
.cfg
.etesian
.spaceMargin
= 0.5
520 blockTrap0
.state
.cfg
.katana
.searchHalo
= 1
521 blockTrap0
.state
.fixedHeight
= l(5000)
522 blockTrap0
.state
.useSpares
= False
523 #rvalue = blockTrap0.build()
525 fast
= af
.getCell( 'fast', CRL
.Catalog
.State
.Views
)
526 blockFast
= Block
.create \
529 (IN
, 'coresync_clk' , l(805.0) ),
530 (IW | AB
, 'coresync_rst' , 0, l(20), 1),
531 (IW | AB
, 'cia_ren({})' , 0, l(20), 8),
532 (IW | AB
, 'fast_nia_wen({})', 0, l(20), 8),
533 (IW | AB
, 'msr_ren({})' , 0, l(20), 8),
534 (IW | AB
, 'src1_ren({})' , 0, l(20), 8),
535 (IW | AB
, 'src2_ren({})' , 0, l(20), 8),
536 (IW | AB
, 'wen({})' , 0, l(20), 8),
537 (IW | AB
, 'wen_1({})' , 0, l(20), 8),
538 (IW | AB
, 'wen_3({})' , 0, l(20), 8),
539 (IW | AB
, 'wen_6({})' , 0, l(20), 8),
540 (IS | AB
, 'data_i({})' , 0, l(20), 64),
541 (IS | AB
, 'data_i_2({})' , 0, l(20), 64),
542 (IS | AB
, 'data_i_4({})' , 0, l(10), 64),
543 (IS | AB
, 'data_i_5({})' , 0, l(10), 64),
544 (IS | AB
, 'data_i_7({})' , 0, l(10), 64),
545 (IN | AE
, 'cia_data_o({})' , 0, l(20), 64),
546 (IN | AE
, 'msr_data_o({})' , 0, l(10), 64),
547 (IN | AE
, 'src1_data_o({})' , 0, l(10), 64),
548 (IN | AE
, 'src2_data_o({})' , 0, l(10), 64),
551 blockFast
.state
.cfg
.etesian
.uniformDensity
= True
552 blockFast
.state
.cfg
.etesian
.aspectRatio
= 1.0
553 blockFast
.state
.cfg
.etesian
.spaceMargin
= 0.6
554 blockFast
.state
.cfg
.katana
.searchHalo
= 1
555 blockFast
.state
.useSpares
= False
556 #rvalue = blockFast.build()
558 cellInt
= af
.getCell( 'int', CRL
.Catalog
.State
.Views
)
559 blockInt
= Block
.create \
562 (IN
, 'coresync_clk' , l(805.0) ),
563 (IW | AB
, 'coresync_rst' , 0, l(20), 1),
564 (IW | AB
, 'wen({})' , 0, l(20), 32),
565 (IW | AB
, 'wen_1({})' , 0, l(20), 32),
566 (IW | AB
, 'src1_ren({})' , 0, l(20), 32),
567 (IW | AB
, 'src2_ren({})' , 0, l(20), 32),
568 (IW | AB
, 'src3_ren({})' , 0, l(20), 32),
569 (IS | AB
, 'data_i({})' , 0, l(20), 64),
570 (IS | AB
, 'data_i_2({})' , 0, l(20), 64),
571 (IN | AE
, 'src1_data_o({})' , 0, l(10), 64),
572 (IN | AE
, 'src2_data_o({})' , 0, l(10), 64),
573 (IN | AE
, 'src3_data_o({})' , 0, l(10), 64),
576 blockInt
.state
.cfg
.etesian
.uniformDensity
= True
577 blockInt
.state
.cfg
.etesian
.aspectRatio
= 1.0
578 blockInt
.state
.cfg
.etesian
.spaceMargin
= 0.07
579 blockInt
.state
.cfg
.katana
.searchHalo
= 1
580 blockInt
.state
.useSpares
= False
581 #rvalue = blockInt.build()
583 issuer
= af
.getCell( 'test_issuer' , CRL
.Catalog
.State
.Logical
)
584 blockIssuer
= Block
.create \
591 # ================ =================
604 # ================ =================
606 blockIssuer
.useBlockInstance(
607 'subckt_1150_core.subckt_2227_fus.subckt_0_alu0',
608 Transformation( l(1000), l(4000),
609 Transformation
.Orientation
.ID
))
610 blockIssuer
.useBlockInstance(
611 'subckt_1150_core.subckt_2227_fus.subckt_1_branch0',
612 Transformation( l(2700), l(4000),
613 Transformation
.Orientation
.ID
))
614 blockIssuer
.useBlockInstance(
615 'subckt_1150_core.subckt_2227_fus.subckt_2_cr0' ,
616 Transformation( l(4950), l(4000),
617 Transformation
.Orientation
.ID
))
618 blockIssuer
.useBlockInstance(
619 'subckt_1150_core.subckt_2227_fus.subckt_3_div0' ,
620 Transformation( l(27000), l(4000),
621 Transformation
.Orientation
.ID
))
622 blockIssuer
.useBlockInstance(
623 'subckt_1150_core.subckt_2227_fus.subckt_4_ldst0' ,
624 Transformation( l(6400), l(4000),
625 Transformation
.Orientation
.ID
))
626 blockIssuer
.useBlockInstance(
627 'subckt_1150_core.subckt_2227_fus.subckt_5_logical0' ,
628 Transformation( l(8000), l(4000),
629 Transformation
.Orientation
.ID
))
630 blockIssuer
.useBlockInstance(
631 'subckt_1150_core.subckt_2227_fus.subckt_6_mul0' ,
632 Transformation( l(10300), l(4000),
633 Transformation
.Orientation
.ID
))
634 blockIssuer
.useBlockInstance(
635 'subckt_1150_core.subckt_2227_fus.subckt_7_shiftrot0' ,
636 Transformation( l(20400), l(4000),
637 Transformation
.Orientation
.ID
))
638 blockIssuer
.useBlockInstance(
639 'subckt_1150_core.subckt_2227_fus.subckt_8_spr0' ,
640 Transformation( l(23250), l(4000),
641 Transformation
.Orientation
.ID
))
642 blockIssuer
.useBlockInstance(
643 'subckt_1150_core.subckt_2227_fus.subckt_9_trap0' ,
644 Transformation( l(25300), l(4000),
645 Transformation
.Orientation
.ID
))
646 blockIssuer
.useBlockInstance(
647 'subckt_1150_core.subckt_2226_fast' ,
648 Transformation( l(1000), l(4000),
649 Transformation
.Orientation
.ID
))
650 blockIssuer
.useBlockInstance(
651 'subckt_1150_core.subckt_2228_int' ,
652 Transformation( l(1000), l(4000),
653 Transformation
.Orientation
.ID
))
654 # TODO, create pdecode2 block
655 #blockIssuer.useBlockInstance(
656 # 'subckt_1150_core.subckt_2230_pdecode2' ,
657 # Transformation( l(1000), l(4000),
658 # Transformation.Orientation.ID ))
660 blockIssuer
.state
.cfg
.etesian
.uniformDensity
= True
661 blockIssuer
.state
.cfg
.etesian
.aspectRatio
= 1.0
662 blockIssuer
.state
.cfg
.etesian
.spaceMargin
= 0.07
663 blockIssuer
.state
.cfg
.katana
.searchHalo
= 10000
664 blockIssuer
.state
.fixedHeight
= l(15000)
665 blockIssuer
.state
.fixedWidth
= l(31550)
666 blockIssuer
.state
.useSpares
= False
667 blockIssuer
.state
.editor
= editor
668 rvalue
= blockIssuer
.build()
670 helpers
.io
.catch( e
)
679 if __name__
== '__main__':
682 success
= scriptMain(**kwargs
)
687 sys
.exit(shellSuccess
)