--- /dev/null
+
+from __future__ import print_function
+import sys
+import traceback
+import CRL
+import helpers
+from helpers.io import ErrorMessage
+from helpers.io import WarningMessage
+from helpers import trace, l
+import plugins
+from Hurricane import DbU
+from Hurricane import Pin
+from Hurricane import Transformation
+from plugins.alpha.block.block import Block
+from plugins.alpha.block.configuration import IoPin
+
+
+af = CRL.AllianceFramework.get()
+
+
+def scriptMain ( **kw ):
+ """The mandatory function that Coriolis CGT/Unicorn will look for."""
+ global af
+
+ rvalue = True
+ try:
+ helpers.setTraceLevel( 550 )
+ cell, editor = plugins.kwParseMain( **kw )
+
+ alu0 = af.getCell( 'alu0', CRL.Catalog.State.Views )
+ blockAlu0 = Block.create \
+ ( alu0
+ , ioPins=[ (IoPin.WEST |IoPin.A_BEGIN, 'clk' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_issue_i' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_imm_data_imm_ok' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_invert_a' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_invert_out' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_is_32bit' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_is_signed' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_oe_oe' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_oe_oe_ok' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_output_carry' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_rc_rc' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_rc_rc_ok' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_write_cr0' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_zero_a' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'rst' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src3_i' , 0 )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_input_carry({})' , 0, l( 10.0), 2)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src4_i({})' , 0, l( 10.0), 2)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_data_len({})' , 0, l( 10.0), 4)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rd_go_i({})' , 0, l( 10.0), 4)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rdmaskn_i({})' , 0, l( 10.0), 4)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_wr_go_i({})' , 0, l( 10.0), 5)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_insn_type({})' , 0, l( 10.0), 7)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_fn_unit({})' , 0, l( 10.0), 11)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_insn({})' , 0, l( 10.0), 32)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_alu0_imm_data_imm({})', 0, l( 15.0), 64)
+ , (IoPin.SOUTH , 'src1_i({})' , l(10), l( 15.0), 64)
+ , (IoPin.SOUTH , 'src2_i({})' , l(15), l( 15.0), 64)
+ , (IoPin.NORTH , 'dest1_o({})' , l(20), l( 15.0), 64)
+ , (IoPin.EAST |IoPin.A_END , 'cu_busy_o' , 0 )
+ , (IoPin.EAST |IoPin.A_END , 'cr_a_ok' , 0 )
+ , (IoPin.EAST |IoPin.A_END , 'dest5_o' , 0 )
+ , (IoPin.EAST |IoPin.A_END , 'o_ok' , 0 )
+ , (IoPin.EAST |IoPin.A_END , 'xer_ca_ok' , 0 )
+ , (IoPin.EAST |IoPin.A_END , 'xer_ov_ok' , 0 )
+ , (IoPin.EAST |IoPin.A_END , 'xer_so_ok' , 0 )
+ , (IoPin.EAST |IoPin.A_END , 'dest3_o({})' , 0, l( 20.0), 2)
+ , (IoPin.EAST |IoPin.A_END , 'dest4_o({})' , 0, l( 20.0), 2)
+ , (IoPin.EAST |IoPin.A_END , 'dest2_o({})' , 0, l( 20.0), 4)
+ , (IoPin.EAST |IoPin.A_END , 'cu_rd_rel_o({})' , 0, l( 20.0), 4)
+ , (IoPin.EAST |IoPin.A_END , 'cu_wr_rel_o({})' , 0, l( 20.0), 5)
+ ]
+ )
+ blockAlu0.state.cfg.etesian.spaceMargin = 0.05
+ blockAlu0.state.fixedHeight = l(5000)
+ blockAlu0.state.useSpares = False
+ #rvalue = blockAlu0.build()
+
+ mul0 = af.getCell( 'mul0', CRL.Catalog.State.Views )
+ blockMul0 = Block.create \
+ ( mul0
+ , ioPins=[ (IoPin.NORTH , 'clk' , l(4500.0) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_issue_i' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_imm_data_imm_ok' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_invert_a' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_invert_out' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_is_32bit' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_is_signed' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_oe_oe' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_oe_oe_ok' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_rc_rc' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_rc_rc_ok' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_write_cr0' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_zero_a' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'rst' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src3_i' , 0, l(20) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rd_go_i({})' , 0, l(10.0), 3)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rdmaskn_i({})' , 0, l(10.0), 3)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_wr_go_i({})' , 0, l(10.0), 4)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_insn_type({})' , 0, l(10.0), 7)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_fn_unit({})' , 0, l(10.0), 11)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_insn({})' , 0, l(10.0), 32)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_mul0_imm_data_imm({})', 0, l(15.0), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'src1_i({})' , l(10.0), l(50.0), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'src2_i({})' , l(20.0), l(50.0), 64)
+ , (IoPin.EAST |IoPin.A_END , 'cu_busy_o' , 0 )
+ , (IoPin.EAST |IoPin.A_END , 'cr_a_ok' , 0 )
+ , (IoPin.EAST |IoPin.A_END , 'dest4_o' , 0 )
+ , (IoPin.EAST |IoPin.A_END , 'o_ok' , 0 )
+ , (IoPin.EAST |IoPin.A_END , 'xer_ov_ok' , 0 )
+ , (IoPin.EAST |IoPin.A_END , 'xer_so_ok' , 0 )
+ , (IoPin.EAST |IoPin.A_END , 'dest3_o({})' , 0, l( 20.0), 2)
+ , (IoPin.EAST |IoPin.A_END , 'dest2_o({})' , 0, l( 20.0), 4)
+ , (IoPin.EAST |IoPin.A_END , 'cu_rd_rel_o({})' , 0, l( 20.0), 3)
+ , (IoPin.EAST |IoPin.A_END , 'cu_wr_rel_o({})' , 0, l( 20.0), 4)
+ , (IoPin.NORTH|IoPin.A_END , 'dest1_o({})' , 0, l( 30.0), 64)
+ ]
+ )
+ blockMul0.state.cfg.etesian.uniformDensity = True
+ blockMul0.state.cfg.etesian.spaceMargin = 0.10
+ blockMul0.state.cfg.katana.searchHalo = 1
+ blockMul0.state.fixedHeight = l(5000)
+ blockMul0.state.useSpares = False
+ #rvalue = blockMul0.build()
+
+ branch0 = af.getCell( 'branch0', CRL.Catalog.State.Views )
+ blockBranch0 = Block.create \
+ ( branch0
+ , ioPins=[ (IoPin.NORTH, 'clk' , l( 805.0) )
+ , (IoPin.WEST , 'cu_issue_i' , l( 30.0) )
+ , (IoPin.WEST , 'oper_i_alu_branch0_imm_data_imm_ok' , l( 40.0) )
+ , (IoPin.WEST , 'oper_i_alu_branch0_is_32bit' , l( 70.0) )
+ , (IoPin.WEST , 'oper_i_alu_branch0_lk' , l( 150.0) )
+ , (IoPin.WEST , 'rst' , l( 160.0) )
+ , (IoPin.WEST , 'src3_i({})' , l( 180.0), l( 10.0), 4)
+ , (IoPin.WEST , 'cu_rd_go_i({})' , l( 270.0), l( 10.0), 3)
+ , (IoPin.WEST , 'cu_rdmaskn_i({})' , l( 310.0), l( 10.0), 3)
+ , (IoPin.WEST , 'cu_wr_go_i({})' , l( 350.0), l( 10.0), 3)
+ , (IoPin.WEST , 'oper_i_alu_branch0_insn_type({})' , l( 400.0), l( 10.0), 7)
+ , (IoPin.WEST , 'oper_i_alu_branch0_fn_unit({})' , l( 470.0), l( 10.0), 11)
+ , (IoPin.WEST , 'oper_i_alu_branch0_insn({})' , l( 580.0), l( 10.0), 32)
+ , (IoPin.WEST , 'oper_i_alu_branch0_imm_data_imm({})', l( 900.0), l( 10.0), 64)
+ , (IoPin.WEST , 'oper_i_alu_branch0_cia({})' , l(1540.0), l( 10.0), 64)
+ , (IoPin.SOUTH, 'src1_i({})' , l( 10.0), l( 20.0), 64)
+ , (IoPin.SOUTH, 'src2_i({})' , l( 15.0), l( 20.0), 64)
+ , (IoPin.EAST , 'cu_busy_o' , l(3500.0) )
+ , (IoPin.EAST , 'fast1_ok' , l(3520.0) )
+ , (IoPin.EAST , 'fast2_ok' , l(3540.0) )
+ , (IoPin.EAST , 'nia_ok' , l(3560.0) )
+ , (IoPin.EAST , 'dest2_o({})' , l(3580.0), l( 10.0), 64)
+ , (IoPin.EAST , 'dest3_o({})' , l(4220.0), l( 10.0), 64)
+ , (IoPin.EAST , 'cu_rd_rel_o({})' , l(4860.0), l( 20.0), 3)
+ , (IoPin.EAST , 'cu_wr_rel_o({})' , l(4920.0), l( 20.0), 3)
+ , (IoPin.NORTH, 'dest1_o({})' , l( 500.0), l( 10.0), 64)
+ ]
+ )
+ blockBranch0.state.cfg.etesian.spaceMargin = 0.07
+ blockBranch0.state.fixedHeight = l(5000)
+ blockBranch0.state.useSpares = False
+ #rvalue = blockBranch0.build()
+
+ cr0 = af.getCell( 'cr0', CRL.Catalog.State.Views )
+ blockCr0 = Block.create \
+ ( cr0
+ , ioPins=[ (IoPin.NORTH, 'clk' , l( 805.0) )
+ , (IoPin.WEST , 'cu_issue_i' , l( 30.0) )
+ , (IoPin.WEST , 'oper_i_alu_cr0_read_cr_whole' , l( 40.0) )
+ , (IoPin.WEST , 'oper_i_alu_cr0_write_cr_whole' , l( 70.0) )
+ , (IoPin.WEST , 'rst' , l( 160.0) )
+ , (IoPin.WEST , 'src4_i({})' , l( 180.0), l( 10.0), 4)
+ , (IoPin.WEST , 'src5_i({})' , l( 220.0), l( 10.0), 4)
+ , (IoPin.WEST , 'src6_i({})' , l( 260.0), l( 10.0), 4)
+ , (IoPin.WEST , 'cu_rd_go_i({})' , l( 300.0), l( 10.0), 6)
+ , (IoPin.WEST , 'cu_rdmaskn_i({})' , l( 360.0), l( 10.0), 6)
+ , (IoPin.WEST , 'cu_wr_go_i({})' , l( 420.0), l( 10.0), 3)
+ , (IoPin.WEST , 'oper_i_alu_cr0_insn_type({})' , l( 450.0), l( 10.0), 7)
+ , (IoPin.WEST , 'oper_i_alu_cr0_fn_unit({})' , l( 520.0), l( 10.0), 11)
+ , (IoPin.WEST , 'oper_i_alu_cr0_insn({})' , l( 630.0), l( 10.0), 32)
+ , (IoPin.SOUTH, 'src1_i({})' , l( 10.0), l( 10.0), 64)
+ , (IoPin.SOUTH, 'src2_i({})' , l( 15.0), l( 10.0), 64)
+ , (IoPin.EAST , 'src3_i({})' , l( 10.0), l( 20.0), 32)
+ , (IoPin.EAST , 'cu_busy_o' , l(4320.0) )
+ , (IoPin.EAST , 'cr_a_ok' , l(4340.0) )
+ , (IoPin.EAST , 'full_cr_ok' , l(4360.0) )
+ , (IoPin.EAST , 'o_ok' , l(4380.0) )
+ , (IoPin.EAST , 'dest2_o({})' , l(4400.0), l( 10.0), 32)
+ , (IoPin.EAST , 'dest3_o({})' , l(4720.0), l( 10.0), 4)
+ , (IoPin.EAST , 'cu_rd_rel_o({})' , l(4800.0), l( 20.0), 6)
+ , (IoPin.EAST , 'cu_wr_rel_o({})' , l(4920.0), l( 20.0), 3)
+ , (IoPin.NORTH, 'dest1_o({})' , l( 100.0), l( 10.0), 64)
+ ]
+ )
+ blockCr0.state.cfg.etesian.spaceMargin = 0.10
+ blockCr0.state.fixedHeight = l(5000)
+ blockCr0.state.useSpares = False
+ #rvalue = blockCr0.build()
+
+ ldst0 = af.getCell( 'ldst0', CRL.Catalog.State.Views )
+ blockLdst0 = Block.create \
+ ( ldst0
+ , ioPins=[ (IoPin.NORTH , 'clk' , l(805.0) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_ad_go_i' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_issue_i' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'ldst_port0_addr_exc_o' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'ldst_port0_addr_ok_o' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'ldst_port0_ld_data_o_ok' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_byte_reverse' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_imm_data_imm_ok' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_is_32bit' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_is_signed' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_oe_oe' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_oe_oe_ok' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_rc_rc' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_rc_rc_ok' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_sign_extend' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_zero_a' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'rst' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_st_go_i' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_ldst_mode({})' , 0, l(20), 2)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rd_go_i({})' , 0, l(20), 3)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rdmaskn_i({})' , 0, l(20), 3)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_wr_go_i({})' , 0, l(20), 2)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_data_len({})' , 0, l(20), 4)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_insn_type({})' , 0, l(20), 7)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'ldst_port0_ld_data_o({})' , 0, l(20), 64)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_ldst_ldst0_imm_data_imm({})' , 0, l(20), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'src1_i({})' , 0, l(10), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'src2_i({})' , 0, l(5), 64)
+ , (IoPin.EAST |IoPin.A_END , 'src3_i({})' , 0, 0, 64)
+ , (IoPin.EAST |IoPin.A_END , 'cu_busy_o' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'cu_ad_rel_o' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'ldst_port0_addr_i_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'ldst_port0_is_ld_i' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'ldst_port0_is_st_i' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'load_mem_o' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'cu_st_rel_o' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'stwd_mem_o' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'ea({})' , 0, l(20), 64)
+ , (IoPin.EAST |IoPin.A_END , 'ldst_port0_st_data_i({})' , 0, l(20), 64)
+ , (IoPin.EAST |IoPin.A_END , 'cu_rd_rel_o({})' , 0, 0, 3)
+ , (IoPin.EAST |IoPin.A_END , 'cu_wr_rel_o({})' , 0, 0, 2)
+ , (IoPin.EAST |IoPin.A_END , 'ldst_port0_addr_i_95' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'ldst_port0_addr_i_{}' , 0, l(20), 64)
+ , (IoPin.NORTH|IoPin.A_END , 'o({})' , 0, 0, 64)
+ ]
+ )
+ blockLdst0.state.cfg.etesian.uniformDensity = True
+ blockLdst0.state.cfg.etesian.spaceMargin = 0.20
+ blockLdst0.state.cfg.katana.searchHalo = 1
+ blockLdst0.state.cfg.katana.hTracksReservedLocal = 10
+ blockLdst0.state.cfg.katana.vTracksReservedLocal = 10
+ blockLdst0.state.fixedHeight = l(5000)
+ blockLdst0.state.useSpares = False
+ #rvalue = blockLdst0.build()
+
+ logical0 = af.getCell( 'logical0', CRL.Catalog.State.Views )
+ blockLogical0 = Block.create \
+ ( logical0
+ , ioPins=[ (IoPin.NORTH , 'clk' , l(805.0) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_issue_i' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_imm_data_imm_ok' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_invert_a' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_invert_out' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_is_32bit' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_is_signed' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_oe_oe' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_oe_oe_ok' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_output_carry' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_rc_rc' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_rc_rc_ok' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_write_cr0' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_zero_a' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'rst' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_input_carry({})' , 0, l(20), 2)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rd_go_i({})' , 0, l(20), 2)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rdmaskn_i({})' , 0, l(20), 2)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_wr_go_i({})' , 0, l(20), 3)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_data_len({})' , 0, l(20), 4)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_insn_type({})' , 0, l(20), 7)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_fn_unit({})' , 0, l(20), 11)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_insn({})' , 0, l(20), 32)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_logical0_imm_data_imm({})', 0, l(20), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'src1_i({})' , 0, l(10), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'src2_i({})' , 0, l(5), 64)
+ , (IoPin.EAST |IoPin.A_END , 'cu_busy_o' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'cr_a_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'o_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'xer_ca_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'cu_rd_rel_o({})' , 0, 0, 2)
+ , (IoPin.EAST |IoPin.A_END , 'cu_wr_rel_o({})' , 0, 0, 3)
+ , (IoPin.NORTH|IoPin.A_END , 'dest3_o({})' , 0, 0, 2)
+ , (IoPin.NORTH|IoPin.A_END , 'dest2_o({})' , 0, 0, 4)
+ , (IoPin.NORTH|IoPin.A_END , 'dest1_o({})' , 0, 0, 64)
+ ]
+ )
+ blockLogical0.state.cfg.etesian.uniformDensity = True
+ blockLogical0.state.cfg.etesian.spaceMargin = 0.07
+ blockLogical0.state.cfg.katana.searchHalo = 1
+ blockLogical0.state.fixedHeight = l(5000)
+ blockLogical0.state.useSpares = False
+ #rvalue = blockLogical0.build()
+
+ shiftrot0 = af.getCell( 'shiftrot0', CRL.Catalog.State.Views )
+ blockShiftrot0 = Block.create \
+ ( shiftrot0
+ , ioPins=[ (IoPin.NORTH , 'clk' , l(805.0) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_issue_i' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_imm_data_imm_ok' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_input_cr' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_is_32bit' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_is_signed' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_oe_oe' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_oe_oe_ok' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_output_carry' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_output_cr' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_rc_rc' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_rc_rc_ok' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'rst' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_input_carry({})' , 0, l(20), 2)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src4_i({})' , 0, l(10), 2)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rd_go_i({})' , 0, l(20), 4)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rdmaskn_i({})' , 0, l(20), 4)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_wr_go_i({})' , 0, l(20), 3)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_insn_type({})' , 0, l(20), 7)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_fn_unit({})' , 0, l(20), 11)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_insn({})' , 0, l(20), 32)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_shift_rot0_imm_data_imm({})', 0, l(20), 64)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src3_i({})' , 0, l(10), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'src1_i({})' , 0, l(10), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'src2_i({})' , 0, l(5), 64)
+ , (IoPin.EAST |IoPin.A_END , 'cu_busy_o' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'cr_a_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'o_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'xer_ca_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'cu_rd_rel_o({})' , 0, 0, 4)
+ , (IoPin.EAST |IoPin.A_END , 'cu_wr_rel_o({})' , 0, 0, 3)
+ , (IoPin.NORTH|IoPin.A_END , 'dest3_o({})' , 0, 0, 2)
+ , (IoPin.NORTH|IoPin.A_END , 'dest2_o({})' , 0, 0, 4)
+ , (IoPin.NORTH|IoPin.A_END , 'dest1_o({})' , 0, 0, 64)
+ ]
+ )
+ blockShiftrot0.state.cfg.etesian.uniformDensity = True
+ blockShiftrot0.state.cfg.etesian.spaceMargin = 0.7
+ blockShiftrot0.state.cfg.katana.searchHalo = 1
+ blockShiftrot0.state.fixedHeight = l(5000)
+ blockShiftrot0.state.useSpares = False
+ #rvalue = blockShiftrot0.build()
+
+ spr0 = af.getCell( 'spr0', CRL.Catalog.State.Views )
+ blockSpr0 = Block.create \
+ ( spr0
+ , ioPins=[ (IoPin.NORTH , 'clk' , l(805.0) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_issue_i' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_spr0_is_32bit' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'rst' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src4_i' , 0, l(10), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src5_i({})' , 0, l(10), 2)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src6_i({})' , 0, l(10), 2)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rd_go_i({})' , 0, l(20), 6)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rdmaskn_i({})' , 0, l(20), 6)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_wr_go_i({})' , 0, l(20), 6)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_spr0_insn_type({})', 0, l(20), 7)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_spr0_fn_unit({})' , 0, l(20), 11)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_spr0_insn({})' , 0, l(20), 32)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src3_i({})' , 0, l(10), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'src1_i({})' , 0, l(10), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'src2_i({})' , 0, l(5), 64)
+ , (IoPin.EAST |IoPin.A_END , 'cu_busy_o' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'dest4_o' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'fast1_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'o_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'spr1_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'xer_ca_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'xer_ov_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'xer_so_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'cu_rd_rel_o({})' , 0, 0, 6)
+ , (IoPin.EAST |IoPin.A_END , 'cu_wr_rel_o({})' , 0, 0, 6)
+ , (IoPin.NORTH|IoPin.A_END , 'dest5_o({})' , 0, 0, 2)
+ , (IoPin.NORTH|IoPin.A_END , 'dest6_o({})' , 0, 0, 2)
+ , (IoPin.EAST |IoPin.A_END , 'dest3_o({})' , 0, l(20), 64)
+ , (IoPin.EAST |IoPin.A_END , 'dest2_o({})' , 0, l(20), 64)
+ , (IoPin.EAST |IoPin.A_END , 'dest1_o({})' , 0, l(20), 64)
+ ]
+ )
+ blockSpr0.state.cfg.etesian.uniformDensity = True
+ blockSpr0.state.cfg.etesian.spaceMargin = 0.5
+ blockSpr0.state.cfg.katana.searchHalo = 1
+ blockSpr0.state.fixedHeight = l(5000)
+ blockSpr0.state.useSpares = False
+ #rvalue = blockSpr0.build()
+
+ trap0 = af.getCell( 'trap0', CRL.Catalog.State.Views )
+ blockTrap0 = Block.create \
+ ( trap0
+ , ioPins=[ (IoPin.NORTH , 'clk' , l(805.0) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_issue_i' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_trap0_is_32bit' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'rst' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rd_go_i({})' , 0, l(20), 4)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_rdmaskn_i({})' , 0, l(20), 4)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cu_wr_go_i({})' , 0, l(20), 5)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_trap0_traptype({})' , 0, l(20), 5)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_trap0_insn_type({})', 0, l(20), 7)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_trap0_fn_unit({})' , 0, l(20), 11)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_trap0_trapaddr({})' , 0, l(20), 13)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_trap0_insn({})' , 0, l(20), 32)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_trap0_cia({})' , 0, l(20), 64)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'oper_i_alu_trap0_msr({})' , 0, l(20), 64)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src3_i({})' , 0, l(10), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'src4_i({})' , 0, l(10), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'src1_i({})' , 0, l(10), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'src2_i({})' , 0, l(5), 64)
+ , (IoPin.EAST |IoPin.A_END , 'cu_busy_o' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'fast1_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'fast2_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'msr_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'nia_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'o_ok' , 0, l(20), 1)
+ , (IoPin.EAST |IoPin.A_END , 'cu_rd_rel_o({})' , 0, 0, 4)
+ , (IoPin.EAST |IoPin.A_END , 'cu_wr_rel_o({})' , 0, 0, 5)
+ , (IoPin.NORTH|IoPin.A_END , 'dest5_o({})' , 0, l(10), 64)
+ , (IoPin.NORTH|IoPin.A_END , 'dest4_o({})' , 0, l(10), 64)
+ , (IoPin.EAST |IoPin.A_END , 'dest3_o({})' , 0, l(10), 64)
+ , (IoPin.EAST |IoPin.A_END , 'dest2_o({})' , 0, l(10), 64)
+ , (IoPin.EAST |IoPin.A_END , 'dest1_o({})' , 0, l(10), 64)
+ ]
+ )
+ blockTrap0.state.cfg.etesian.uniformDensity = True
+ blockTrap0.state.cfg.etesian.spaceMargin = 0.5
+ blockTrap0.state.cfg.katana.searchHalo = 1
+ blockTrap0.state.fixedHeight = l(5000)
+ blockTrap0.state.useSpares = False
+ #rvalue = blockTrap0.build()
+
+ fast = af.getCell( 'fast', CRL.Catalog.State.Views )
+ blockFast = Block.create \
+ ( fast
+ , ioPins=[ (IoPin.NORTH , 'clk' , l(805.0) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'rst' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'cia_ren({})' , 0, l(20), 8)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'fast_nia_wen({})', 0, l(20), 8)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'msr_ren({})' , 0, l(20), 8)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src1_ren({})' , 0, l(20), 8)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src2_ren({})' , 0, l(20), 8)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'wen({})' , 0, l(20), 8)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'wen_1({})' , 0, l(20), 8)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'wen_3({})' , 0, l(20), 8)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'wen_6({})' , 0, l(20), 8)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'data_i({})' , 0, l(20), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'data_i_2({})' , 0, l(20), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'data_i_4({})' , 0, l(10), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'data_i_5({})' , 0, l(10), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'data_i_7({})' , 0, l(10), 64)
+ , (IoPin.NORTH|IoPin.A_END , 'cia_data_o({})' , 0, l(20), 64)
+ , (IoPin.NORTH|IoPin.A_END , 'msr_data_o({})' , 0, l(10), 64)
+ , (IoPin.NORTH|IoPin.A_END , 'src1_data_o({})' , 0, l(10), 64)
+ , (IoPin.NORTH|IoPin.A_END , 'src2_data_o({})' , 0, l(10), 64)
+ ]
+ )
+ blockFast.state.cfg.etesian.uniformDensity = True
+ blockFast.state.cfg.etesian.aspectRatio = 1.0
+ blockFast.state.cfg.etesian.spaceMargin = 0.6
+ blockFast.state.cfg.katana.searchHalo = 1
+ blockFast.state.useSpares = False
+ #rvalue = blockFast.build()
+
+ cellInt = af.getCell( 'int', CRL.Catalog.State.Views )
+ blockInt = Block.create \
+ ( cellInt
+ , ioPins=[ (IoPin.NORTH , 'clk' , l(805.0) )
+ , (IoPin.WEST |IoPin.A_BEGIN, 'rst' , 0, l(20), 1)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'wen({})' , 0, l(20), 32)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'wen_1({})' , 0, l(20), 32)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src1_ren({})' , 0, l(20), 32)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src2_ren({})' , 0, l(20), 32)
+ , (IoPin.WEST |IoPin.A_BEGIN, 'src3_ren({})' , 0, l(20), 32)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'data_i({})' , 0, l(20), 64)
+ , (IoPin.SOUTH|IoPin.A_BEGIN, 'data_i_2({})' , 0, l(20), 64)
+ , (IoPin.NORTH|IoPin.A_END , 'src1_data_o({})' , 0, l(10), 64)
+ , (IoPin.NORTH|IoPin.A_END , 'src2_data_o({})' , 0, l(10), 64)
+ , (IoPin.NORTH|IoPin.A_END , 'src3_data_o({})' , 0, l(10), 64)
+ ]
+ )
+ blockInt.state.cfg.etesian.uniformDensity = True
+ blockInt.state.cfg.etesian.aspectRatio = 1.0
+ blockInt.state.cfg.etesian.spaceMargin = 0.07
+ blockInt.state.cfg.katana.searchHalo = 1
+ blockInt.state.useSpares = False
+ #rvalue = blockInt.build()
+
+ issuer = af.getCell( 'test_issuer' , CRL.Catalog.State.Logical )
+ blockIssuer = Block.create \
+ ( issuer
+ , ioPins=[]
+ )
+
+ # Cell width:
+ #
+ # ================ =================
+ # alu0 1200
+ # branch0 1750
+ # cr0 950
+ # ldst0 1100
+ # logical0 1800
+ # mul0 9600
+ # shiftrot0 2350
+ # spr0 1550
+ # trap0 3250
+ # fast ?
+ # int ?
+ # pdecode ?
+ # ================ =================
+
+ blockIssuer.useBlockInstance( 'subckt_1008_core.subckt_2031_fus.subckt_0_alu0'
+ , Transformation( l(1000), l(4000), Transformation.Orientation.ID ))
+ blockIssuer.useBlockInstance( 'subckt_1008_core.subckt_2031_fus.subckt_1_branch0'
+ , Transformation( l(2700), l(4000), Transformation.Orientation.ID ))
+ blockIssuer.useBlockInstance( 'subckt_1008_core.subckt_2031_fus.subckt_2_cr0'
+ , Transformation( l(4950), l(4000), Transformation.Orientation.ID ))
+ blockIssuer.useBlockInstance( 'subckt_1008_core.subckt_2031_fus.subckt_3_ldst0'
+ , Transformation( l(6400), l(4000), Transformation.Orientation.ID ))
+ blockIssuer.useBlockInstance( 'subckt_1008_core.subckt_2031_fus.subckt_4_logical0'
+ , Transformation( l(8000), l(4000), Transformation.Orientation.ID ))
+ blockIssuer.useBlockInstance( 'subckt_1008_core.subckt_2031_fus.subckt_5_mul0'
+ , Transformation( l(10300), l(4000), Transformation.Orientation.ID ))
+ blockIssuer.useBlockInstance( 'subckt_1008_core.subckt_2031_fus.subckt_6_shiftrot0'
+ , Transformation( l(20400), l(4000), Transformation.Orientation.ID ))
+ blockIssuer.useBlockInstance( 'subckt_1008_core.subckt_2031_fus.subckt_7_spr0'
+ , Transformation( l(23250), l(4000), Transformation.Orientation.ID ))
+ blockIssuer.useBlockInstance( 'subckt_1008_core.subckt_2031_fus.subckt_8_trap0'
+ , Transformation( l(25300), l(4000), Transformation.Orientation.ID ))
+ blockIssuer.useBlockInstance( 'subckt_1008_core.subckt_2030_fast'
+ , Transformation( l(1000), l(4000), Transformation.Orientation.ID ))
+ blockIssuer.useBlockInstance( 'subckt_1008_core.subckt_2032_int'
+ , Transformation( l(1000), l(4000), Transformation.Orientation.ID ))
+ blockIssuer.useBlockInstance( 'subckt_1008_core.subckt_2034_pdecode2'
+ , Transformation( l(1000), l(4000), Transformation.Orientation.ID ))
+ blockIssuer.state.cfg.etesian.uniformDensity = True
+ blockIssuer.state.cfg.etesian.aspectRatio = 1.0
+ blockIssuer.state.cfg.etesian.spaceMargin = 0.07
+ blockIssuer.state.cfg.katana.searchHalo = 10000
+ blockIssuer.state.fixedHeight = l(15000)
+ blockIssuer.state.fixedWidth = l(29550)
+ blockIssuer.state.useSpares = False
+ blockIssuer.state.editor = editor
+ rvalue = blockIssuer.build()
+ except Exception, e:
+ helpers.io.catch( e )
+ rvalue = False
+
+ sys.stdout.flush()
+ sys.stderr.flush()
+
+ return rvalue