diff --git a/synthesis/ICC2/icc_shell.tcl b/synthesis/ICC2/icc_shell.tcl index fbb2356ed07c8449bed1ec69021d43a0a2f23191..f510717dbe1b4e3464a91cce57ede18c6124d58b 100644 --- a/synthesis/ICC2/icc_shell.tcl +++ b/synthesis/ICC2/icc_shell.tcl @@ -11,24 +11,26 @@ set design_name nanosoc_chip_pads +set PHYS_IP_DIR /home/dwn1c21/SoC-Labs/phys_ip -set_app_var link_library $env(PHYS_IP)/arm/tsmc/cln65lp/sc9_base_rvt/r0p0/db/sc9_cln65lp_base_rvt_ss_typical_max_1p08v_125c.db -create_lib tsmc65lp -technology $env(PHYS_IP)/arm/tsmc/cln65lp/arm_tech/r2p0/milkyway/1p9m_6x2z/sc9_tech.tf -ref_libs {$env(PHYS_IP)/arm/tsmc/cln65lp/sc9_base_rvt/r0p0/lef/sc9_cln65lp_base_rvt.lef /home/dwn1c21/SoC-Labs/accelerator-project/memories/rf/rf_sp_hdf.lef /home/dwn1c21/SoC-Labs/accelerator-project/memories/bootrom/rom_via.lef} -read_parasitic_tech -name {typical} -tlup {$env(PHYS_IP)/arm/tsmc/cln65lp/arm_tech/r2p0/synopsys_tluplus/1p9m_6x2z/typical.tluplus} -layermap {$env(PHYS_IP)/arm/tsmc/cln65lp/arm_tech/r2p0/synopsys_tluplus/1p9m_6x2z/tluplus.map} -read_parasitic_tech -name {rcbest} -tlup {$env(PHYS_IP)/arm/tsmc/cln65lp/arm_tech/r2p0/synopsys_tluplus/1p9m_6x2z/rcbest.tluplus} -layermap {$env(PHYS_IP)/arm/tsmc/cln65lp/arm_tech/r2p0/synopsys_tluplus/1p9m_6x2z/tluplus.map} -read_parasitic_tech -name {rcworst} -tlup {$env(PHYS_IP)/arm/tsmc/cln65lp/arm_tech/r2p0/synopsys_tluplus/1p9m_6x2z/rcworst.tluplus} -layermap {$env(PHYS_IP)/arm/tsmc/cln65lp/arm_tech/r2p0/synopsys_tluplus/1p9m_6x2z/tluplus.map} +set_app_var link_library $PHYS_IP_DIR/arm/tsmc/cln65lp/sc9_base_rvt/r0p0/db/sc9_cln65lp_base_rvt_ss_typical_max_1p08v_125c.db +create_lib tsmc65lp -technology $PHYS_IP_DIR/arm/tsmc/cln65lp/arm_tech/r2p0/milkyway/1p9m_6x2z/sc9_tech.tf -ref_libs [list $PHYS_IP_DIR/arm/tsmc/cln65lp/sc9_base_rvt/r0p0/lef/sc9_cln65lp_base_rvt.lef /home/dwn1c21/SoC-Labs/accelerator-project/memories/rf/rf_sp_hdf.lef /home/dwn1c21/SoC-Labs/accelerator-project/memories/bootrom/rom_via.lef] + +read_parasitic_tech -name typical -tlup $PHYS_IP_DIR/arm/tsmc/cln65lp/arm_tech/r2p0/synopsys_tluplus/1p9m_6x2z/typical.tluplus -layermap $PHYS_IP_DIR/arm/tsmc/cln65lp/arm_tech/r2p0/synopsys_tluplus/1p9m_6x2z/tluplus.map +read_parasitic_tech -name rcbest -tlup $PHYS_IP_DIR/arm/tsmc/cln65lp/arm_tech/r2p0/synopsys_tluplus/1p9m_6x2z/rcbest.tluplus -layermap $PHYS_IP_DIR/arm/tsmc/cln65lp/arm_tech/r2p0/synopsys_tluplus/1p9m_6x2z/tluplus.map +read_parasitic_tech -name rcworst -tlup $PHYS_IP_DIR/arm/tsmc/cln65lp/arm_tech/r2p0/synopsys_tluplus/1p9m_6x2z/rcworst.tluplus -layermap $PHYS_IP_DIR/arm/tsmc/cln65lp/arm_tech/r2p0/synopsys_tluplus/1p9m_6x2z/tluplus.map read_verilog -library tsmc65lp -design nanosoc_chip_pads -top nanosoc_chip_pads $env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist/nanosoc_chip_pads.vm link_block -initialize_floorplan -control_type die -keep_pg_route -utilization 0.6 -side_ratio {1 1} -core_offset {50 50} -keep_placement {all} +initialize_floorplan -control_type die -keep_pg_route -core_utilization 0.55 -side_ratio {1 1} -core_offset {100 100} -keep_placement {all} create_io_ring -name main_io explore_logic_hierarchy -organize -load_upf nanosoc_chip_pads_power.upf +load_upf ../nanosoc_chip_pads_power.upf commit_upf set_parasitic_parameters -early_spec rcbest -early_temperature -40 -late_spec rcworst -late_temperature 125 @@ -42,16 +44,26 @@ current_mode default set_voltage 1.08 -corner [current_corner] -object_list [get_supply_nets VDD] set_voltage 3.00 -corner [current_corner] -object_list [get_supply_nets VDDIO] +set_app_options -list {opt.dft.optimize_scan_chain {false}} +set_app_options -list {opt.dft.do_repartition {false}} +set_app_options -list {place.coarse.continue_on_missing_scandef {true}} + read_sdc $env(SOCLABS_PROJECT_DIR)/nanosoc_tech/synthesis/constraints.sdc update_timing change_selection [explore_logic_hierarchy -create_module_boundary] explore_logic_hierarchy -place -rectangular +# Place IO pins +source place_pins.tcl + +#Place and fix memories with boundary source place_memories.tcl +#Create power ring and straps source power_plan.tcl +#Start Placement create_placement legalize_placement -cells [get_cells -design [current_block]] @@ -59,10 +71,8 @@ save_lib -all report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/1pre_opt_placement_timing.rep -set_app_options -list {opt.dft.optimize_scan_chain {false}} -set_app_options -list {opt.dft.do_repartition {false}} -set_app_options -list {place.coarse.continue_on_missing_scandef {true}} place_opt +save_lib -all update_timing -full report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/2post_opt_placement_timing.rep @@ -70,5 +80,15 @@ report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/2post_opt_p check_clock_trees -clocks clk synthesize_clock_trees -clocks clk clock_opt +update_timing -full report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/3post_clock_opt_placement_timing.rep +save_lib -all +#Start Routing +route_auto +update_timing -full + +report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/final_timing.rep +report_power > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/final_power.rep +save_lib -all +exit \ No newline at end of file diff --git a/synthesis/ICC2/place_memories.tcl b/synthesis/ICC2/place_memories.tcl index eb6ae51f9572e454ea632a9d963a92d3e53d2bd2..3a810032d31a5c4d22944034ad44a06f2d077289 100644 --- a/synthesis/ICC2/place_memories.tcl +++ b/synthesis/ICC2/place_memories.tcl @@ -1,8 +1,9 @@ -set_attribute -objects [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_u_rf_sp_hdf] -name origin -value {115 450} -set_attribute -objects [get_cells u_nanosoc_chip_u_system/u_ss_expansion_u_region_expram_l_u_expram_l_u_sram_u_rf_sp_hdf] -name origin -value {450.0000 150.0000} -set_attribute -objects [get_cells u_nanosoc_chip_u_system/u_ss_expansion_u_region_expram_h_u_expram_h_u_sram_u_rf_sp_hdf] -name origin -value {115.0000 150.0000} -set_attribute -objects [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_imem_0_u_imem_0_u_sram_u_rf_sp_hdf] -name origin -value {450 450} -set_attribute -objects [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_bootrom_0_u_bootrom_cpu_0_u_bootrom_u_sl_rom] -name origin -value {260 50} +set_macro_relative_location -target_object [get_cell {u_nanosoc_chip_u_system/u_ss_cpu_u_region_imem_0_u_imem_0_u_sram_u_rf_sp_hdf}] -target_orientation R0 -target_corner tr -anchor_corner tr -offset -0.2 -offset_type scalable +set_macro_relative_location -target_object [get_cell {u_nanosoc_chip_u_system/u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_u_rf_sp_hdf}] -target_orientation R0 -target_corner tl -anchor_corner tl -offset {0.2 -0.2} -offset_type scalable +set_macro_relative_location -target_object [get_cell {u_nanosoc_chip_u_system/u_ss_expansion_u_region_expram_l_u_expram_l_u_sram_u_rf_sp_hdf}] -target_orientation R0 -target_corner br -anchor_corner br -offset {-0.2 0.3} -offset_type scalable +set_macro_relative_location -target_object [get_cell {u_nanosoc_chip_u_system/u_ss_expansion_u_region_expram_h_u_expram_h_u_sram_u_rf_sp_hdf}] -target_orientation R0 -target_corner bl -anchor_corner bl -offset {0.2 0.3} -offset_type scalable +set_macro_relative_location -target_object [get_cell {u_nanosoc_chip_u_system/u_ss_cpu_u_region_bootrom_0_u_bootrom_cpu_0_u_bootrom_u_sl_rom}] -target_orientation R0 -target_corner bl -anchor_corner bl -offset {0.4 0.15} -offset_type scalable +create_macro_relative_location_placement set_attribute -objects [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_u_rf_sp_hdf] -name physical_status -value fixed set_attribute -objects [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_imem_0_u_imem_0_u_sram_u_rf_sp_hdf] -name physical_status -value fixed @@ -10,4 +11,6 @@ set_attribute -objects [get_cells u_nanosoc_chip_u_system/u_ss_expansion_u_regio set_attribute -objects [get_cells u_nanosoc_chip_u_system/u_ss_expansion_u_region_expram_h_u_expram_h_u_sram_u_rf_sp_hdf] -name physical_status -value fixed set_attribute -objects [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_bootrom_0_u_bootrom_cpu_0_u_bootrom_u_sl_rom] -name physical_status -value fixed -create_keepout_margin -type hard -outer {2 2 2 2} [get_attribute [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_u_rf_sp_hdf] ref_block];create_keepout_margin -type hard_macro -outer {2 2 2 2} [get_attribute [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_u_rf_sp_hdf] ref_block];create_keepout_margin -type soft -outer {4 4 4 4} [get_attribute [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_u_rf_sp_hdf] ref_block]; +create_keepout_margin -type hard -outer {5 5 5 5} [get_attribute [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_u_rf_sp_hdf] ref_block];create_keepout_margin -type hard_macro -outer {5 5 5 5} [get_attribute [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_u_rf_sp_hdf] ref_block];create_keepout_margin -type soft -outer {8 8 8 8} [get_attribute [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_u_rf_sp_hdf] ref_block]; +create_keepout_margin -type hard -outer {5 5 5 5} [get_attribute [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_bootrom_0_u_bootrom_cpu_0_u_bootrom_u_sl_rom] ref_block];create_keepout_margin -type hard_macro -outer {5 5 5 5} [get_attribute [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_bootrom_0_u_bootrom_cpu_0_u_bootrom_u_sl_rom] ref_block];create_keepout_margin -type soft -outer {8 8 8 8} [get_attribute [get_cells u_nanosoc_chip_u_system/u_ss_cpu_u_region_bootrom_0_u_bootrom_cpu_0_u_bootrom_u_sl_rom] ref_block]; + diff --git a/synthesis/ICC2/place_pins.tcl b/synthesis/ICC2/place_pins.tcl new file mode 100644 index 0000000000000000000000000000000000000000..8044dcbe36c0984090cd719e22515a78cdd6b1a1 --- /dev/null +++ b/synthesis/ICC2/place_pins.tcl @@ -0,0 +1,6 @@ +set_individual_pin_constraints -ports {P0[15] P0[14] P0[13] P0[12] P0[11] P0[10] P0[9] P0[8] P0[7] P0[6] P0[5] P0[4] P0[3] P0[2] P0[1] P0[0]} -sides 1 +set_individual_pin_constraints -ports {P1[15] P1[14] P1[13] P1[12] P1[11] P1[10] P1[9] P1[8] P1[7] P1[6] P1[5] P1[4] P1[3] P1[2] P1[1] P1[0]} -sides 3 +set_individual_pin_constraints -ports {XTAL2 XTAL1 VDD VDDIO} -sides 2 +set_individual_pin_constraints -ports {NRST VSS VSSIO SWDIOTMS SWCLKTCK} -sides 4 + +place_pins -self \ No newline at end of file diff --git a/synthesis/ICC2/preferred_port_locations.tcl b/synthesis/ICC2/preferred_port_locations.tcl deleted file mode 100644 index c7cb546a007823ded4832395df0d26263159a238..0000000000000000000000000000000000000000 --- a/synthesis/ICC2/preferred_port_locations.tcl +++ /dev/null @@ -1,40 +0,0 @@ -START PHYSICAL PIN CONSTRAINTS; - {pins XTAL1} {reference nanosoc_chip_pads} {layers M2} {sides 4} {offset 277.0000}; - {pins XTAL2} {reference nanosoc_chip_pads} {layers M2} {sides 4} {offset 83.8000}; - {pins NRST} {reference nanosoc_chip_pads} {layers M2} {sides 4} {offset 139.0000}; - {pins P0[15]} {reference nanosoc_chip_pads} {layers M2} {sides 4} {offset 194.2000}; - {pins P0[14]} {reference nanosoc_chip_pads} {layers M2} {sides 4} {offset 249.4000}; - {pins P0[13]} {reference nanosoc_chip_pads} {layers M2} {sides 4} {offset 304.6000}; - {pins P0[12]} {reference nanosoc_chip_pads} {layers M2} {sides 4} {offset 359.8000}; - {pins P0[11]} {reference nanosoc_chip_pads} {layers M2} {sides 4} {offset 415.0000}; - {pins P0[10]} {reference nanosoc_chip_pads} {layers M2} {sides 4} {offset 470.2000}; - {pins P0[9]} {reference nanosoc_chip_pads} {layers M2} {sides 4} {offset 525.4000}; - {pins P0[8]} {reference nanosoc_chip_pads} {layers M3} {sides 3} {offset 32.6000}; - {pins P0[7]} {reference nanosoc_chip_pads} {layers M3} {sides 3} {offset 94.0000}; - {pins P0[6]} {reference nanosoc_chip_pads} {layers M3} {sides 3} {offset 155.2000}; - {pins P0[5]} {reference nanosoc_chip_pads} {layers M3} {sides 3} {offset 216.6000}; - {pins P0[4]} {reference nanosoc_chip_pads} {layers M3} {sides 3} {offset 277.8000}; - {pins P0[3]} {reference nanosoc_chip_pads} {layers M3} {sides 3} {offset 339.0000}; - {pins P0[2]} {reference nanosoc_chip_pads} {layers M3} {sides 3} {offset 400.4000}; - {pins P0[1]} {reference nanosoc_chip_pads} {layers M3} {sides 3} {offset 461.6000}; - {pins P0[0]} {reference nanosoc_chip_pads} {layers M3} {sides 3} {offset 523.0000}; - {pins P1[15]} {reference nanosoc_chip_pads} {layers M2} {sides 2} {offset 522.6000}; - {pins P1[14]} {reference nanosoc_chip_pads} {layers M2} {sides 2} {offset 461.2000}; - {pins P1[13]} {reference nanosoc_chip_pads} {layers M2} {sides 2} {offset 400.0000}; - {pins P1[12]} {reference nanosoc_chip_pads} {layers M2} {sides 2} {offset 338.6000}; - {pins P1[11]} {reference nanosoc_chip_pads} {layers M2} {sides 2} {offset 277.2000}; - {pins P1[10]} {reference nanosoc_chip_pads} {layers M2} {sides 2} {offset 215.8000}; - {pins P1[9]} {reference nanosoc_chip_pads} {layers M2} {sides 2} {offset 154.4000}; - {pins P1[8]} {reference nanosoc_chip_pads} {layers M2} {sides 2} {offset 93.2000}; - {pins P1[7]} {reference nanosoc_chip_pads} {layers M2} {sides 2} {offset 31.8000}; - {pins P1[6]} {reference nanosoc_chip_pads} {layers M3} {sides 1} {offset 521.0000}; - {pins P1[5]} {reference nanosoc_chip_pads} {layers M3} {sides 1} {offset 459.6000}; - {pins P1[4]} {reference nanosoc_chip_pads} {layers M3} {sides 1} {offset 398.4000}; - {pins P1[3]} {reference nanosoc_chip_pads} {layers M3} {sides 1} {offset 337.0000}; - {pins P1[2]} {reference nanosoc_chip_pads} {layers M3} {sides 1} {offset 275.8000}; - {pins P1[1]} {reference nanosoc_chip_pads} {layers M3} {sides 1} {offset 214.6000}; - {pins P1[0]} {reference nanosoc_chip_pads} {layers M3} {sides 1} {offset 153.2000}; - {pins SWDIOTMS} {reference nanosoc_chip_pads} {layers M3} {sides 1} {offset 92.0000}; - {pins SWCLKTCK} {reference nanosoc_chip_pads} {layers M3} {sides 1} {offset 30.6000}; -END PHYSICAL PIN CONSTRAINTS; -