diff --git a/.gitignore b/.gitignore index b7ac34e947fe04a2aa58380e336bb19537b5da34..a550a88e1e9d4775effefbc25ad646b188662cc6 100644 --- a/.gitignore +++ b/.gitignore @@ -10,24 +10,43 @@ ASIC/*.mr ASIC/*.pvk ASIC/alib-52 ASIC/WORK/* -ASIC/*/Cadence/scripts/fv -ASIC/*/Cadence/scripts/*.rpt -ASIC/*/Cadence/scripts/*.tstamp - -ASIC/*/Cadence/scripts/.cadence -ASIC/*/Cadence/scripts/.* -ASIC/*/Cadence/scripts/*.spec -ASIC/*/Cadence/scripts/*.sdf -ASIC/*/Cadence/scripts/*.gif -ASIC/*/Cadence/scripts/*.lef -ASIC/*/Cadence/scripts/result -ASIC/*/Cadence/scripts/nanosoc_chip_pads -ASIC/*/Cadence/scripts/timingReports -ASIC/*/Cadence/scripts/*.db* -ASIC/*/Cadence/scripts/*.rpt* -ASIC/*/Cadence/scripts/*.checkFPlan -ASIC/*/Cadence/scripts/*.ptiavg -ASIC/*/Cadence/scripts/*.ptifiles +ASIC/*/*/Cadence/scripts/fv +ASIC/*/*/Cadence/scripts/*.rpt +ASIC/*/*/Cadence/scripts/*.tstamp +ASIC/*/*/Cadence/scripts/.cadence +ASIC/*/*/Cadence/scripts/.* +ASIC/*/*/Cadence/scripts/*.spec +ASIC/*/*/Cadence/scripts/*.sdf +ASIC/*/*/Cadence/scripts/*.gif +ASIC/*/*/Cadence/scripts/*.lef +ASIC/*/*/Cadence/scripts/result +ASIC/*/*/Cadence/scripts/nanosoc_chip_pads +ASIC/*/*/Cadence/scripts/timingReports +ASIC/*/*/Cadence/scripts/*.db* +ASIC/*/*/Cadence/scripts/*.rpt* +ASIC/*/*/Cadence/scripts/*.checkFPlan +ASIC/*/*/Cadence/scripts/*.ptiavg +ASIC/*/*/Cadence/scripts/*.ptifiles +ASIC/*/*/Cadence/scripts/*.dofile +ASIC/*/*/Cadence/scripts/*.testproc +ASIC/*/*/Cadence/scripts/scheduling_file.cts.* +ASIC/*/*/Synopsys_FC/HDL_LIBRARIES +ASIC/*/*/Synopsys_FC/nanosoc_chip_pads.dlib +ASIC/*/*/Synopsys_FC/*.txt +ASIC/*/*/Synopsys_FC/fc_output.txt +ASIC/*/*/Synopsys_FC/*.log +ASIC/*/*/Synopsys_FC/check_design.ems +ASIC/*/*/Synopsys_FC/PreFrameCheck +ASIC/*/*/Synopsys_FC/*.svf +ASIC/*/*/Synopsys_FC/rom_via +ASIC/*/*/Synopsys_FC/sram_16k +ASIC/*/*/Synopsys_FC/pad_lib +ASIC/*/*/Synopsys_FC/.*/ +ASIC/*/*/Synopsys_FC/cln28ht +ASIC/*/*/Synopsys_FC/cln28ht_pmk +ASIC/*/*/Synopsys_FC/cln28ht_ret +ASIC/*/*/Synopsys_FC/io_lib +ASIC/*/*/Synopsys_FC/legalizer_debug_plots ASIC/Synopsys/Formality/FM_INFO/* ASIC/Synopsys/ICC2/CLIBs ASIC/Synopsys/ICC2/PreFrameCheck @@ -35,6 +54,15 @@ ASIC/Synopsys/ICC2/tsmc65lp/* ASIC/Synopsys/ICC2/*.svf ASIC/Synopsys/ICC2/*.ems ASIC/Synopsys/ICC2/icc2_output.txt + +ASIC/TSMC28nm/no_pins/Synopsys_FC/cln28ht +ASIC/TSMC28nm/no_pins/Synopsys_FC/rom_via +ASIC/TSMC28nm/no_pins/Synopsys_FC/PreFrameCheck +ASIC/TSMC28nm/no_pins/Synopsys_FC/sram_16k +ASIC/TSMC28nm/no_pins/Synopsys_FC/*.svf +ASIC/TSMC28nm/no_pins/Synopsys_FC/*.txt +ASIC/TSMC28nm/no_pins/Synopsys_FC/*.log +ASIC/TSMC28nm/no_pins/Synopsys_FC/.* *.pvl *.syn *.mr diff --git a/ASIC/TSMC28nm/38pin/Synopsys_FC/FC_flow.tcl b/ASIC/TSMC28nm/38pin/Synopsys_FC/FC_flow.tcl new file mode 100644 index 0000000000000000000000000000000000000000..5f51a5eeec97f7afefe325f42dc99274a572c742 --- /dev/null +++ b/ASIC/TSMC28nm/38pin/Synopsys_FC/FC_flow.tcl @@ -0,0 +1,51 @@ +# Main flow for Synopsys fusion compiler +set REPORT_DIR $env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports +set LOG_DIR $env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/logs + +# Design setup: read libraries and RTL +redirect -tee -file $LOG_DIR/01_design_setup.log {source ./design_setup.tcl} + +# Floorplan setup +redirect -tee -file $LOG_DIR/02_init_floorplan.log {initialize_floorplan -control_type die -use_site_row -side_length {1111.1111111 1111.11111} -core_offset {140}} +redirect -tee -file $LOG_DIR/03_floorplan.log {source ./floorplan/fp.tcl} +place_io +# Read Constraints +redirect -tee -file $LOG_DIR/04_constraints.log {read_sdc ../../constraints.sdc} + +# Power Plan +load_upf nanosoc_chip_pads.upf +create_voltage_area -power_domains ACCEL +create_voltage_area -power_domains PD_DBG +create_voltage_area -power_domains PD_SYS + +create_voltage_area_shape -voltage_area ACCEL \ + -region {{{140.000 140.000} {370.655 311.165}}} \ + -guard_band {2 2} + +create_voltage_area_shape -voltage_area PD_DBG \ + -region {{{703.115 140.000} {971.040 329.520}}} \ + -guard_band {2 2} +create_voltage_area_shape -voltage_area PD_SYS \ + -region {{{234.000 453.940} {548.100 645.665}}} \ + -guard_band {2 2} + +create_pg_region {pg_accel} -voltage_area {ACCEL} +create_pg_region {pg_dbg} -voltage_area {PD_DBG} +create_pg_region {pg_sys} -voltage_area {PD_SYS} + +redirect -tee -file $LOG_DIR/05_power_plan.log {source ./power_plan.tcl} + +# Init coarse placement +redirect -tee -file $LOG_DIR/06_init_placement.log {source ./init_placement.tcl} + +# Physical aware synthesis +redirect -tee -file $LOG_DIR/07_compile.log {compile_fusion} +redirect -tee -file $REPORT_DIR/timing_01_compile.rep {report_timing} +save_lib nanosoc_chip_pads.dlib + +redirect -tee -file $LOG_DIR/08_clock_tree.log {synthesize_clock_trees -clocks {clk swdclk}} +redirect -tee -file $LOG_DIR/09_clock_opt.log {clock_opt} +redirect -tee -file $REPORT_DIR/timing_02_clock_opt.rep {report_timing} + + + diff --git a/ASIC/TSMC28nm/38pin/Synopsys_FC/design_setup.tcl b/ASIC/TSMC28nm/38pin/Synopsys_FC/design_setup.tcl new file mode 100644 index 0000000000000000000000000000000000000000..7e44835bf109166bfcc269618781e38bd1029547 --- /dev/null +++ b/ASIC/TSMC28nm/38pin/Synopsys_FC/design_setup.tcl @@ -0,0 +1,31 @@ +set sc9mcpp240z_base_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc12mcpp140z_base_svt_c35/r2p0 +set cln28ht_tech_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/arm_tech/r1p0 + +set TLU_dir /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/arm_tech/r1p0/synopsys_tluplus/1p8m_5x2z_utalrdl + +set TLU_cbest $TLU_dir/cbest.tluplus +set TLU_cworst $TLU_dir/cworst.tluplus +set TLU_rcbest $TLU_dir/rcbest.tluplus +set TLU_rcworst $TLU_dir/rcworst.tluplus +set TLU_map $TLU_dir/tluplus.map + +create_lib nanosoc_chip_pads.dlib \ + -technology $cln28ht_tech_path/milkyway/1p8m_5x2z_utalrdl/sc12mcpp140z_tech.tf \ + -ref_libs {./cln28ht/ ./cln28ht_pmk/ ./cln28ht_ret/ ./sram_16k/ ./rom_via/ ./io_lib/ ./pad_lib/} + +source $env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/flist/dc_flist.tcl +analyze -format verilog $env(SOCLABS_PROJECT_DIR)/nanosoc_tech/ASIC/nanosoc_chip_pads/tsmc28hpcp/nanosoc_chip_pads_38pin.v + +elaborate nanosoc_chip_pads +set_top_module nanosoc_chip_pads + +redirect -tee -file ./lib_cell_summary.log {report_lib -cell_summary cln28ht} +redirect -tee -file ./lib_cell_pmk_summary.log {report_lib -cell_summary cln28ht_pmk} +redirect -tee -file ./lib_cell_ret_summary.log {report_lib -cell_summary cln28ht_ret} + +read_parasitic_tech -name cbest -tlup $TLU_cbest -layermap $TLU_map -sanity_check advanced +read_parasitic_tech -name cworst -tlup $TLU_cworst -layermap $TLU_map -sanity_check advanced +read_parasitic_tech -name rcbest -tlup $TLU_rcbest -layermap $TLU_map -sanity_check advanced +read_parasitic_tech -name rcworst -tlup $TLU_rcworst -layermap $TLU_map -sanity_check advanced + +save_lib nanosoc_chip_pads.dlib diff --git a/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/floorplan.def b/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/floorplan.def new file mode 100644 index 0000000000000000000000000000000000000000..d6f55e61f0bd705211fe4d0465be905b6bd3be39 --- /dev/null +++ b/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/floorplan.def @@ -0,0 +1,13 @@ +# +# Fusion Compiler write_def +# Release : U-2022.12 +# User Name : dwn1c21 +# Date : Fri Oct 25 13:42:48 2024 +# +VERSION 5.8 ; +DIVIDERCHAR "/" ; +BUSBITCHARS "[]" ; +DESIGN nanosoc_chip_pads ; +UNITS DISTANCE MICRONS 1000 ; +DIEAREA ( 0 0 ) ( 0 1110700 ) ( 1111040 1110700 ) ( 1111040 0 ) ; +END DESIGN diff --git a/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/floorplan.tcl b/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/floorplan.tcl new file mode 100644 index 0000000000000000000000000000000000000000..34eb70e0d6233d6bba3cb024dd500cbbfbcb1e3f --- /dev/null +++ b/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/floorplan.tcl @@ -0,0 +1,51 @@ +################################################################################ +# +# Created by fc write_floorplan on Fri Oct 25 13:42:48 2024 +# +################################################################################ + +set _dirName__0 [file dirname [file normalize [info script]]] + +source ${_dirName__0}/fp.tcl + +if { [get_attribute -name view_name [current_block]] == "design" } { + set __fp_crnt_design_name__ [get_attribute -name design_name [current_block]] + set __fp_crnt_label_name__ [get_attribute -name label_name [current_block]] + set __fp_crnt_lib_name__ [get_attribute -name lib_name [current_block]] + set __fp_crnt_lib_path__ [get_attribute -name source_file_name [current_lib]] + set __fp_crnt_abs_name__ ${__fp_crnt_lib_name__}:${__fp_crnt_design_name__} + set __fp_crnt_abs_path__ ${__fp_crnt_lib_path__}/${__fp_crnt_design_name__} + if { [string length ${__fp_crnt_label_name__} ] != 0 } { + set __fp_crnt_abs_name__ ${__fp_crnt_abs_name__}/${__fp_crnt_label_name__}.abstract + set __fp_crnt_abs_path__ ${__fp_crnt_abs_path__}/design_label.${__fp_crnt_label_name__}/abs + } else { + set __fp_crnt_abs_name__ ${__fp_crnt_abs_name__}.abstract + set __fp_crnt_abs_path__ ${__fp_crnt_abs_path__}/abs + } + if { [sizeof_collection [get_blocks -quiet ${__fp_crnt_abs_name__}]] != 0} { + if { [get_attribute -name has_editable_abstract [current_block]] } { + echo "Design [get_attribute -name full_name [current_block]] has editable abstract view. Re-creating the abstract view after floorplan loading..." + set __fp_crnt_abs_type__ [get_attribute -quiet -name abstract_view_type [current_block]] + if { [string length ${__fp_crnt_abs_type__} ] == 0 } { + if { [file exists "${__fp_crnt_abs_path__}/abs.mc"] } { + echo "re-create timing abstract view for design [get_attribute -name full_name [current_block]]" + create_abstract + save_lib -all + } else { + echo "re-create placement abstract view for design [get_attribute -name full_name [current_block]]" + create_abstract -placement + save_lib -all + } + } elseif { ${__fp_crnt_abs_type__} == "placement" } { + echo "re-create placement abstract view for design [get_attribute -name full_name [current_block]]" + create_abstract -placement + save_lib -all + } else { + echo "re-create timing abstract view for design [get_attribute -name full_name [current_block]]" + create_abstract + save_lib -all + } + } + } +} + diff --git a/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/floorplan_compare_data.txt b/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/floorplan_compare_data.txt new file mode 100644 index 0000000000000000000000000000000000000000..9b75f8bb7e6f0761ac431ebed19494ba9d241086 --- /dev/null +++ b/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/floorplan_compare_data.txt @@ -0,0 +1,44 @@ +################################################################################ +# +# Created by fc compare_floorplans on Fri Oct 25 13:42:48 2024 +# +# DO NOT EDIT - automatically generated file +# +################################################################################ + +START nanosoc_chip_pads + MACROS + u_nanosoc_chip/u_system/u_ss_cpu/u_region_bootrom_0/u_bootrom_cpu_0/u_bootrom/u_sl_rom { {140.0000 919.4450} {304.6650 970.7000} } + u_nanosoc_chip/u_system/u_ss_cpu/u_region_imem_0/u_imem_0/u_sram/genblk1.u_sram { {626.6800 781.1650} {798.8600 970.7000} } + u_nanosoc_chip/u_system/u_ss_cpu/u_region_dmem_0/u_dmem_0/u_sram/genblk1.u_sram { {798.8600 781.1650} {971.0400 970.7000} } + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_l/u_expram_l/u_sram/genblk1.u_sram { {798.8600 563.3200} {971.0400 752.8550} } + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_h/u_expram_h/u_sram/genblk1.u_sram { {626.6800 563.3200} {798.8600 752.8550} } + PINS + VDDIO { {555.5200 555.3500} {555.5201 555.3501} } + VSSIO { {555.5200 555.3500} {555.5201 555.3501} } + VDD { {555.5200 555.3500} {555.5201 555.3501} } + VSS { {555.5200 555.3500} {555.5201 555.3501} } + VDDACC { {555.5200 555.3500} {555.5201 555.3501} } + SE { {555.5200 555.3500} {555.5201 555.3501} } + CLK { {555.5200 555.3500} {555.5201 555.3501} } + TEST { {555.5200 555.3500} {555.5201 555.3501} } + NRST { {555.5200 555.3500} {555.5201 555.3501} } + P0[7] { {555.5200 555.3500} {555.5201 555.3501} } + P0[6] { {555.5200 555.3500} {555.5201 555.3501} } + P0[5] { {555.5200 555.3500} {555.5201 555.3501} } + P0[4] { {555.5200 555.3500} {555.5201 555.3501} } + P0[3] { {555.5200 555.3500} {555.5201 555.3501} } + P0[2] { {555.5200 555.3500} {555.5201 555.3501} } + P0[1] { {555.5200 555.3500} {555.5201 555.3501} } + P0[0] { {555.5200 555.3500} {555.5201 555.3501} } + P1[7] { {555.5200 555.3500} {555.5201 555.3501} } + P1[6] { {555.5200 555.3500} {555.5201 555.3501} } + P1[5] { {555.5200 555.3500} {555.5201 555.3501} } + P1[4] { {555.5200 555.3500} {555.5201 555.3501} } + P1[3] { {555.5200 555.3500} {555.5201 555.3501} } + P1[2] { {555.5200 555.3500} {555.5201 555.3501} } + P1[1] { {555.5200 555.3500} {555.5201 555.3501} } + P1[0] { {555.5200 555.3500} {555.5201 555.3501} } + SWDIO { {555.5200 555.3500} {555.5201 555.3501} } + SWDCK { {555.5200 555.3500} {555.5201 555.3501} } +END nanosoc_chip_pads diff --git a/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/fp.tcl b/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/fp.tcl new file mode 100644 index 0000000000000000000000000000000000000000..059b00a2130c7fac183d69ce138f595af3ad6e48 --- /dev/null +++ b/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/fp.tcl @@ -0,0 +1,200 @@ +################################################################################ +# +# Created by fc write_floorplan on Fri Oct 25 13:42:48 2024 +# +################################################################################ + + +set _dirName__0 [file dirname [file normalize [info script]]] + +################################################################################ +# Read DEF +################################################################################ + +read_def ${_dirName__0}/floorplan.def + +################################################################################ +# Macros +################################################################################ + +set cellInst [get_cells { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_bootrom_0/u_bootrom_cpu_0/u_bootrom/u_sl_rom \ + }] +set_attribute -quiet -objects $cellInst -name orientation -value R0 +set_attribute -quiet -objects $cellInst -name origin -value { 140.0000 919.4450 \ + } +set_attribute -quiet -objects $cellInst -name status -value placed +create_keepout_margin -type hard -outer { 1.0000 1.0000 1.0000 1.0000 } { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_bootrom_0/u_bootrom_cpu_0/u_bootrom/u_sl_rom \ + } +create_keepout_margin -type soft -outer { 2.0000 2.0000 2.0000 2.0000 } { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_bootrom_0/u_bootrom_cpu_0/u_bootrom/u_sl_rom \ + } +create_keepout_margin -type hard_macro -outer { 1.0000 1.0000 1.0000 1.0000 } { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_bootrom_0/u_bootrom_cpu_0/u_bootrom/u_sl_rom \ + } +create_keepout_margin -type routing_blockage -outer { 2.0000 2.0000 2.0000 \ + 2.0000 } -layers { M1 VIA1 M2 VIA2 M3 VIA3 M4 } { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_bootrom_0/u_bootrom_cpu_0/u_bootrom/u_sl_rom \ + } + +set cellInst [get_cells { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_imem_0/u_imem_0/u_sram/genblk1.u_sram \ + }] +set_attribute -quiet -objects $cellInst -name orientation -value R90 +set_attribute -quiet -objects $cellInst -name origin -value { 798.8600 781.1650 \ + } +set_attribute -quiet -objects $cellInst -name status -value placed +create_keepout_margin -type hard -outer { 1.0000 1.0000 1.0000 1.0000 } { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_imem_0/u_imem_0/u_sram/genblk1.u_sram \ + } +create_keepout_margin -type soft -outer { 2.0000 2.0000 2.0000 2.0000 } { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_imem_0/u_imem_0/u_sram/genblk1.u_sram \ + } +create_keepout_margin -type hard_macro -outer { 1.0000 1.0000 1.0000 1.0000 } { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_imem_0/u_imem_0/u_sram/genblk1.u_sram \ + } +create_keepout_margin -type routing_blockage -outer { 2.0000 2.0000 2.0000 \ + 2.0000 } -layers { M1 VIA1 M2 VIA2 M3 VIA3 M4 } { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_imem_0/u_imem_0/u_sram/genblk1.u_sram \ + } + +set cellInst [get_cells { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_dmem_0/u_dmem_0/u_sram/genblk1.u_sram \ + }] +set_attribute -quiet -objects $cellInst -name orientation -value R90 +set_attribute -quiet -objects $cellInst -name origin -value { 971.0400 781.1650 \ + } +set_attribute -quiet -objects $cellInst -name status -value placed +create_keepout_margin -type hard -outer { 1.0000 1.0000 1.0000 1.0000 } { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_dmem_0/u_dmem_0/u_sram/genblk1.u_sram \ + } +create_keepout_margin -type soft -outer { 2.0000 2.0000 2.0000 2.0000 } { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_dmem_0/u_dmem_0/u_sram/genblk1.u_sram \ + } +create_keepout_margin -type hard_macro -outer { 1.0000 1.0000 1.0000 1.0000 } { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_dmem_0/u_dmem_0/u_sram/genblk1.u_sram \ + } +create_keepout_margin -type routing_blockage -outer { 2.0000 2.0000 2.0000 \ + 2.0000 } -layers { M1 VIA1 M2 VIA2 M3 VIA3 M4 } { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_dmem_0/u_dmem_0/u_sram/genblk1.u_sram \ + } + +set cellInst [get_cells { \ + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_l/u_expram_l/u_sram/genblk1.u_sram \ + }] +set_attribute -quiet -objects $cellInst -name orientation -value R90 +set_attribute -quiet -objects $cellInst -name origin -value { 971.0400 563.3200 \ + } +set_attribute -quiet -objects $cellInst -name status -value placed +create_keepout_margin -type hard -outer { 1.0000 1.0000 1.0000 1.0000 } { \ + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_l/u_expram_l/u_sram/genblk1.u_sram \ + } +create_keepout_margin -type soft -outer { 2.0000 2.0000 2.0000 2.0000 } { \ + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_l/u_expram_l/u_sram/genblk1.u_sram \ + } +create_keepout_margin -type hard_macro -outer { 1.0000 1.0000 1.0000 1.0000 } { \ + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_l/u_expram_l/u_sram/genblk1.u_sram \ + } +create_keepout_margin -type routing_blockage -outer { 2.0000 2.0000 2.0000 \ + 2.0000 } -layers { M1 VIA1 M2 VIA2 M3 VIA3 M4 } { \ + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_l/u_expram_l/u_sram/genblk1.u_sram \ + } + +set cellInst [get_cells { \ + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_h/u_expram_h/u_sram/genblk1.u_sram \ + }] +set_attribute -quiet -objects $cellInst -name orientation -value R90 +set_attribute -quiet -objects $cellInst -name origin -value { 798.8600 563.3200 \ + } +set_attribute -quiet -objects $cellInst -name status -value placed +create_keepout_margin -type hard -outer { 1.0000 1.0000 1.0000 1.0000 } { \ + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_h/u_expram_h/u_sram/genblk1.u_sram \ + } +create_keepout_margin -type soft -outer { 2.0000 2.0000 2.0000 2.0000 } { \ + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_h/u_expram_h/u_sram/genblk1.u_sram \ + } +create_keepout_margin -type hard_macro -outer { 1.0000 1.0000 1.0000 1.0000 } { \ + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_h/u_expram_h/u_sram/genblk1.u_sram \ + } +create_keepout_margin -type routing_blockage -outer { 2.0000 2.0000 2.0000 \ + 2.0000 } -layers { M1 VIA1 M2 VIA2 M3 VIA3 M4 } { \ + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_h/u_expram_h/u_sram/genblk1.u_sram \ + } + + +################################################################################ +# User attributes of macros +################################################################################ + + +################################################################################ +# Bounds and user attributes of bound shapes +################################################################################ + +remove_bounds -all + + +################################################################################ +# User attributes of bounds +################################################################################ + + +################################################################################ +# Blockages +################################################################################ + +remove_routing_blockages -all -force + +remove_placement_blockages -all -force + +remove_pin_blockages -all + +remove_shaping_blockages -all + +################################################################################ +# User attributes of blockages +################################################################################ + +################################################################################ +# Module Boundaries +################################################################################ + +set hbCells [get_cells -quiet -filter hierarchy_type==boundary -hierarchical] +if [sizeof_collection $hbCells] { + set_cell_hierarchy_type -type normal $hbCells +} + + +################################################################################ +# I/O guides +################################################################################ + +remove_io_guides -all + +create_io_guide -name main_io_ring.left -side left -line { {0.0000 110.0000} \ + 890.7000 } -offset {0.0000 0.0000} -pad_cells { uPAD_CLK_I uPAD_NRST_I \ + uPAD_P0_00 uPAD_P0_01 uPAD_P0_02 uPAD_P0_03 uPAD_P0_04 uPAD_P0_05 uPAD_P0_06 } +create_io_guide -name main_io_ring.bottom -side bottom -line { {1001.0400 \ + 0.0000} 891.0400 } -offset {0.0000 0.0000} -pad_cells { uPAD_P0_07 \ + uPAD_P1_00 uPAD_P1_01 uPAD_P1_02 uPAD_P1_03 uPAD_P1_04 uPAD_P1_05 \ + uPAD_P1_06 uPAD_P1_07 uPAD_SE_I } +create_io_guide -name main_io_ring.right -side right -line { {1111.0400 \ + 1000.7000} 890.7000 } -offset {0.0000 0.0000} -pad_cells { uPAD_SWDCK_I \ + uPAD_SWDIO_IO uPAD_TEST_I uPAD_VDDACC_0 uPAD_VDDACC_1 uPAD_VDDACC_2 \ + uPAD_VDDIO_0 uPAD_VDDIO_2 uPAD_VDDIO_3 } +create_io_guide -name main_io_ring.top -side top -line { {110.0000 1110.7000} \ + 891.0400 } -offset {0.0000 0.0000} -pad_cells { uPAD_VDD_0 uPAD_VDD_1 \ + uPAD_VDD_2 uPAD_VDD_3 uPAD_VSSIO_0 uPAD_VSSIO_1 uPAD_VSS_0 uPAD_VSS_1 \ + uPAD_VSS_2 uPAD_VSS_3 } + +################################################################################ +# User attributes of I/O guides +################################################################################ + + +################################################################################ +# User attributes of current block +################################################################################ + + diff --git a/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/mapfile b/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/mapfile new file mode 100644 index 0000000000000000000000000000000000000000..1af7533494755299cc3dee06e1613fbfb52d4cb6 --- /dev/null +++ b/ASIC/TSMC28nm/38pin/Synopsys_FC/floorplan/mapfile @@ -0,0 +1 @@ +nanosoc_chip_pads FLOORPLAN fp.tcl diff --git a/ASIC/TSMC28nm/38pin/Synopsys_FC/init_placement.tcl b/ASIC/TSMC28nm/38pin/Synopsys_FC/init_placement.tcl new file mode 100644 index 0000000000000000000000000000000000000000..1fe3a0cc10b4fe2d754395cfd45684879e04b451 --- /dev/null +++ b/ASIC/TSMC28nm/38pin/Synopsys_FC/init_placement.tcl @@ -0,0 +1,16 @@ +set_parasitic_parameters -early_spec cbest -early_temperature -40 -late_spec cworst -late_temperature 125 -library nanosoc_chip_pads.dlib +set_operating_conditions -max_library cln28ht -max ssg_cworstt_max_0p81v_125c -min_library cln28ht -min ffg_cbestt_min_0p99v_m40c +set_temperature -40 -min 125 -corners default +set_voltage 0.81 -min 0.99 -corners default + + +set_voltage -min 0.99 -corners default -object_list [get_supply_nets {VDD}] 0.81 +set_voltage -min 0.99 -corners default -object_list [get_supply_nets {VDD_SYS}] 0.81 +set_voltage -min 0.99 -corners default -object_list [get_supply_nets {VDD_DBG}] 0.81 +set_voltage -min 0.99 -corners default -object_list [get_supply_nets {VDDACC}] 0.81 +set_voltage -min 0.0 -corners default -object_list [get_supply_nets {VSS}] 0.0 +redirect -tee -file ./precompile_checks.log {compile_fusion -check_only} + +explore_logic_hierarchy -create_module_boundary -nested -cell [get_cells -design [current_block] {u_nanosoc_chip u_nanosoc_chip_cfg}] +explore_logic_hierarchy -place -rectangular +save_lib nanosoc_chip_pads.dlib diff --git a/ASIC/TSMC28nm/38pin/Synopsys_FC/nanosoc_chip_pads.upf b/ASIC/TSMC28nm/38pin/Synopsys_FC/nanosoc_chip_pads.upf new file mode 100644 index 0000000000000000000000000000000000000000..63e386c00a7042c76b577de20016ba8100d2af98 --- /dev/null +++ b/ASIC/TSMC28nm/38pin/Synopsys_FC/nanosoc_chip_pads.upf @@ -0,0 +1,138 @@ + +################################################################################ +# Create power domains +################################################################################ +create_power_domain TOP +create_power_domain ACCEL -elements {u_nanosoc_chip/u_system/u_ss_expansion/u_region_exp/u_ss_accelerator} +create_power_domain PD_SYS -elements u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_slcorem0_integration/u_cortexm0/u_top/u_sys +create_power_domain PD_DBG -elements {u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_slcorem0_integration/u_cortexm0/u_top/u_dbg \ + u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_slcorem0_integration/u_dap/u_ap} + +################################################################################ +# Create and logically connect power ports and nets +################################################################################ + +# Always on VDD +create_supply_port VDD +create_supply_net VDD -domain TOP +create_supply_net VDD -domain PD_SYS -reuse +create_supply_net VDD -domain PD_DBG -reuse +connect_supply_net VDD -ports VDD + +# Ground +create_supply_port VSS +create_supply_net VSS -domain TOP +create_supply_net VSS -domain PD_SYS -reuse +create_supply_net VSS -domain PD_DBG -reuse +create_supply_net VSS -domain ACCEL -reuse +connect_supply_net VSS -ports VSS + +# Switched VDD +create_supply_net VDD_SYS -domain PD_SYS -resolve parallel +create_supply_net VDD_DBG -domain PD_DBG -resolve parallel + +# VDDACC +create_supply_port VDDACC +create_supply_net VDDACC -domain ACCEL +connect_supply_net VDDACC -ports VDDACC + +################################################################################ +# Assign power supplies to power domains +################################################################################ + +set_domain_supply_net TOP -primary_power_net VDD -primary_ground_net VSS +set_domain_supply_net ACCEL -primary_power_net VDDACC -primary_ground_net VSS +set_domain_supply_net PD_SYS -primary_power_net VDD_SYS -primary_ground_net VSS +set_domain_supply_net PD_DBG -primary_power_net VDD_DBG -primary_ground_net VSS + +################################################################################ +# Create Power Switches +################################################################################ + +create_power_switch uswitch1 -domain PD_SYS \ + -input_supply_port {VDD VDD} \ + -output_supply_port {VDD_SYS VDD_SYS} \ + -control_port {SYSPWRDOWN u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_core_prmu/u_cortexm0_pmu/SYSPWRDOWN} \ + -ack_port {SYSPWRDOWNACK u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_core_prmu/u_cortexm0_pmu/SYSPWRDOWNACK {SYSPWRDOWN}} \ + -ack_delay {SYSPWRDOWNACK 65000} \ + -on_state {on_state VDD {!SYSPWRDOWN}} \ + -off_state {off_state { SYSPWRDOWN}} + +create_power_switch uswitch2 -domain PD_DBG \ + -input_supply_port {VDD VDD} \ + -output_supply_port {VDD_DBG VDD_DBG} \ + -control_port {DBGPWRDOWN u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_core_prmu/u_cortexm0_pmu/DBGPWRDOWN} \ + -ack_port {DBGPWRDOWNACK u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_core_prmu/u_cortexm0_pmu/DBGPWRDOWNACK {DBGPWRDOWN}} \ + -ack_delay {DBGPWRDOWNACK 65000} \ + -on_state {on_state VDD {!DBGPWRDOWN}} \ + -off_state {off_state { DBGPWRDOWN}} + +################################################################################ +# Set Isolation Controls +# - iso_low1, iso_high1 at PD_SYS outputs +# - iso_low2 at PD_DBG outputs +################################################################################ + +set_isolation iso_low1 -domain PD_SYS \ + -isolation_power_net VDD \ + -isolation_ground_net VSS \ + -clamp_value 0 \ + -applies_to outputs + +# The signals that need to be clamped HIGH +set_isolation iso_high1 -domain PD_SYS \ + -isolation_power_net VDD \ + -isolation_ground_net VSS \ + -clamp_value 1 \ + -elements {u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_slcorem0_integration/u_cortexm0/u_top/u_sys/sleeping_o \ + u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_slcorem0_integration/u_cortexm0/u_top/u_sys/sleep_deep_o} + +set_isolation_control iso_low1 -domain PD_SYS \ + -isolation_signal u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_core_prmu/u_cortexm0_pmu/SYSISOLATEn \ + -isolation_sense low \ + -location parent + +set_isolation_control iso_high1 -domain PD_SYS \ + -isolation_signal u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_core_prmu/u_cortexm0_pmu/SYSISOLATEn \ + -isolation_sense low \ + -location parent + +set_isolation iso_low2 -domain PD_DBG \ + -isolation_power_net VDD \ + -isolation_ground_net VSS \ + -clamp_value 0 \ + -applies_to outputs + +set_isolation_control iso_low2 -domain PD_DBG \ + -isolation_signal u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_core_prmu/u_cortexm0_pmu/DBGISOLATEn \ + -isolation_sense low \ + -location parent + +################################################################################ +# Set Retention +################################################################################ + +set_retention drff -domain PD_SYS -retention_power_net VDD -retention_ground_net VSS +set_retention_control drff -domain PD_SYS -save_signal {u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_core_prmu/u_cortexm0_pmu/SYSRETAINn high} \ + -restore_signal {u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_core_prmu/u_cortexm0_pmu/SYSRETAINn low} + +map_retention_cell drff -domain PD_SYS -lib_cell_type DRFF + +################################################################################ +# Define port states +################################################################################ + +add_port_state VSS -state {on 0.0 0.0 0.0} +add_port_state VDD -state {on 0.81 0.9 0.99} +add_port_state VDDACC -state {on 0.81 0.9 0.99} +add_port_state uswitch1/VDD_SYS -state {on 0.81 0.9 0.99} -state {off 0.0 0.0 0.0} +add_port_state uswitch2/VDD_DBG -state {on 0.81 0.9 0.99} -state {off 0.0 0.0 0.0} + +################################################################################ +# Define power state table +################################################################################ + +create_pst cm0_pst -supplies {VSS VDD VDD_SYS VDD_DBG VDDACC} +add_pst_state run -pst cm0_pst -state {on on on off on } +add_pst_state slp -pst cm0_pst -state {on on off off on } +add_pst_state dbg -pst cm0_pst -state {on on on on on } diff --git a/ASIC/TSMC28nm/38pin/Synopsys_FC/power_plan.tcl b/ASIC/TSMC28nm/38pin/Synopsys_FC/power_plan.tcl new file mode 100644 index 0000000000000000000000000000000000000000..014f1a83598cbc7e4a24a45563740f22984b44d7 --- /dev/null +++ b/ASIC/TSMC28nm/38pin/Synopsys_FC/power_plan.tcl @@ -0,0 +1,28 @@ +connect_pg_net -create_nets_only +connect_pg_net -automatic + +create_pg_ring_pattern ring_pattern -horizontal_layer M7 -horizontal_width {5} -horizontal_spacing {2}\ + -vertical_layer M8 -vertical_width {5} -vertical_spacing {2} +set_pg_strategy core_ring -pattern {{name: ring_pattern} {nets: {VDD VDDACC VSS}} {offset: {3 3}}} -core +compile_pg -strategies core_ring + + +create_pg_mesh_pattern mesh_pattern -layers {{{vertical_layer: M8} {width: 1} {pitch: 30} {offset: 20}} \ + {{horizontal_layer: M5} {width: 1} {pitch: 30} {offset: 20}}} +set_pg_strategy M5M8_mesh -pattern {{name: mesh_pattern} {nets: {VDD VDDACC VSS}}} -core +compile_pg -strategies M5M8_mesh + + +create_pg_std_cell_conn_pattern std_pattern -layers {M1} -check_std_cell_drc false -mark_as_follow_pin false -rail_width {0.13 0.13} +set_pg_strategy std_cell_accel -voltage_areas ACCEL -pattern {{name : std_pattern}{nets : {VDDACC VSS}}} +set_pg_strategy std_cell_dbg -voltage_areas PD_DBG -pattern {{name : std_pattern}{nets : {VDD_DBG VSS}}} +set_pg_strategy std_cell_sys -voltage_areas PD_SYS -pattern {{name : std_pattern}{nets : {VDD_SYS VSS}}} + +set_pg_strategy std_cell_strat -voltage_areas DEFAULT_VA -pattern {{name: std_pattern} {nets: {VDD VSS}}} + +compile_pg -strategies std_cell_accel +compile_pg -strategies std_cell_dbg +compile_pg -strategies std_cell_sys + + +compile_pg -strategies std_cell_strat diff --git a/ASIC/TSMC28nm/38pin/Synopsys_FC/synopsys_lib_conversion.tcl b/ASIC/TSMC28nm/38pin/Synopsys_FC/synopsys_lib_conversion.tcl new file mode 100644 index 0000000000000000000000000000000000000000..0e54a812fa410c71f725f9668874da0e1c8f47b7 --- /dev/null +++ b/ASIC/TSMC28nm/38pin/Synopsys_FC/synopsys_lib_conversion.tcl @@ -0,0 +1,126 @@ +## Paths Please Edit for your system +set cln28ht_tech_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/arm_tech/r1p0 +set standard_cell_base_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc12mcpp140z_base_svt_c35/r2p0 +set pmk_base_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc12mcpp140z_pmk_svt_c35/r1p0 +set ret_base_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc12mcpp140z_rklo_lvt_svt_c30_c35/r1p0 + +# Technology files +set cln28ht_tech_file $cln28ht_tech_path/milkyway/1p8m_5x2z_utalrdl/sc12mcpp140z_tech.tf +set cln28ht_lef_file $cln28ht_tech_path/lef/1p8m_5x2z_utalrdl/sc12mcpp140z_tech.lef + +# Standard Cell libraries +set standard_cell_lef_file $standard_cell_base_path/lef/sc12mcpp140z_cln28ht_base_svt_c35.lef +set standard_cell_gds_file $standard_cell_base_path/gds2/sc12mcpp140z_cln28ht_base_svt_c35.gds2 +set standard_cell_db_file_ss_0p81v_125C $standard_cell_base_path/db/sc12mcpp140z_cln28ht_base_svt_c35_ssg_cworstt_max_0p81v_125c.db +set standard_cell_db_file_tt_0p90v_25C $standard_cell_base_path/db/sc12mcpp140z_cln28ht_base_svt_c35_tt_ctypical_max_0p90v_25c.db +set standard_cell_db_file_ff_0p99v_m40C $standard_cell_base_path/db/sc12mcpp140z_cln28ht_base_svt_c35_ffg_cbestt_min_0p99v_m40c.db +set standard_cell_antenna_file $standard_cell_base_path/milkyway/1p8m_5x2z_utalrdl/sc12mcpp140z_cln28ht_base_svt_c35_antenna.clf + +# Power Management Kit +set pmk_lef_file $pmk_base_path/lef/sc12mcpp140z_cln28ht_pmk_svt_c35.lef +set pmk_gds_file $pmk_base_path/gds2/sc12mcpp140z_cln28ht_pmk_svt_c35.gds2 +set pmk_db_file_ss_0p81v_125C $pmk_base_path/db/sc12mcpp140z_cln28ht_pmk_svt_c35_ssg_cworstt_max_0p81v_125c.db +set pmk_db_file_tt_0p90v_25C $pmk_base_path/db/sc12mcpp140z_cln28ht_pmk_svt_c35_tt_ctypical_max_0p90v_25c.db +set pmk_db_file_ff_0p99v_m40C $pmk_base_path/db/sc12mcpp140z_cln28ht_pmk_svt_c35_ffg_cbestt_min_0p99v_m40c.db +set pmk_antenna_file $pmk_base_path/milkyway/1p8m_5x2z_utalrdl/sc12mcpp140z_cln28ht_pmk_svt_c35_antenna.clf + +# Retention Kit +set ret_lef_file $ret_base_path/lef/sc12mcpp140z_cln28ht_rklo_lvt_svt_c30_c35.lef +set ret_gds_file $ret_base_path/gds2/sc12mcpp140z_cln28ht_rklo_lvt_svt_c30_c35.gds2 +set ret_db_file_ss_0p81v_125C $ret_base_path/db/sc12mcpp140z_cln28ht_rklo_lvt_svt_c30_c35_ssg_cworstt_max_0p81v_125c.db +set ret_db_file_tt_0p90v_25C $ret_base_path/db/sc12mcpp140z_cln28ht_rklo_lvt_svt_c30_c35_tt_ctypical_max_0p90v_25c.db +set ret_db_file_ff_0p99v_m40C $ret_base_path/db/sc12mcpp140z_cln28ht_rklo_lvt_svt_c30_c35_ffg_cbestt_min_0p99v_m40c.db +set ret_antenna_file $ret_base_path/milkyway/1p8m_5x2z_utalrdl/sc12mcpp140z_cln28ht_rklo_lvt_svt_c30_c35_antenna.clf + + +# IO Paths +set TSMC_28NM_PDK_PATH /home/dwn1c21/SoC-Labs/phys_ip/TSMC/28 +set tphn28hpcpgv18_lef_file $TSMC_28NM_PDK_PATH/CMOS/HPC+/IO1.8V/iolib/TSMCHOME/digital/Back_End/lef/tphn28hpcpgv18_110a/mt_2/6lm/lef/tphn28hpcpgv18_6lm.lef +set tphn28hpcpgv18_lib_path $TSMC_28NM_PDK_PATH/CMOS/HPC+/IO1.8V/iolib/TSMCHOME/digital/Front_End/timing_power_noise/NLDM/tphn28hpcpgv18_170a +set IO_TT_0p9v_1p8v_25c_db $tphn28hpcpgv18_lib_path/tphn28hpcpgv18tt0p9v1p8v25c.db +set IO_FF_0p99v_1p98v_m40c_db $tphn28hpcpgv18_lib_path/tphn28hpcpgv18ffg0p99v1p98vm40c.db +set IO_SS_0p81v_1p62v_125c_db $tphn28hpcpgv18_lib_path/tphn28hpcpgv18ssg0p81v1p62v125c.db + +set pad_lef_file /home/dwn1c21/SoC-Labs/phys_ip/TSMC/28/iolib/TSMCHOME/digital/Back_End/lef/tpbn28v_160a/cup/8m/8M_5X2Z/lef/tpbn28v_8lm.lef + +# SRAM files (using Arm compiler) +set sram_16k_path $env(SOCLABS_PROJECT_DIR)/memories/sram_16k +set sram_16k_lef_file $sram_16k_path/sram_16k.lef +set sram_16k_gds_file $sram_16k_path/sram_16k.gds2 +set sram_16k_lib_file_ss_0p81v_125c $sram_16k_path/sram_16k_ssg_cworstt_0p81v_0p81v_125c.lib +set sram_16k_lib_file_tt_0p90v_25c $sram_16k_path/sram_16k_tt_ctypical_0p90v_0p90v_85c.lib +set sram_16k_lib_file_ff_0p99v_m40c $sram_16k_path/sram_16k_ffg_cbestt_0p99v_0p99v_m40c.lib +set sram_16k_db_file_ss_0p81v_125c $sram_16k_path/sram_16k_ssg_cworstt_0p81v_0p81v_125c.db +set sram_16k_db_file_tt_0p90v_25c $sram_16k_path/sram_16k_tt_ctypical_0p90v_0p90v_85c.db +set sram_16k_db_file_ff_0p99v_m40c $sram_16k_path/sram_16k_ffg_cbestt_0p99v_0p99v_m40c.db + +# ROM Files (using arm Compiler) +set rom_path $env(SOCLABS_PROJECT_DIR)/memories/bootrom +set rom_via_lef_file $rom_path/rom_via.lef +set rom_via_gds_file $rom_path/rom_via.gds2 +set rom_via_lib_file_ss_0p81v_125c $rom_path/rom_via_ssg_cworstt_0p81v_0p81v_125c.lib +set rom_via_lib_file_tt_0p90v_25c $rom_path/rom_via_tt_ctypical_0p90v_0p90v_25c.lib +set rom_via_lib_file_ff_0p99v_m40c $rom_path/rom_via_ffg_cbestt_0p99v_0p99v_m40c.lib +set rom_via_db_file_ss_0p81v_125c $rom_path/rom_via_ssg_cworstt_0p81v_0p81v_125c.db +set rom_via_db_file_tt_0p90v_25c $rom_path/rom_via_tt_ctypical_0p90v_0p90v_25c.db +set rom_via_db_file_ff_0p99v_m40c $rom_path/rom_via_ffg_cbestt_0p99v_0p99v_m40c.db + +# Create standard cell fusion library +create_fusion_lib -dbs [list $standard_cell_db_file_ss_0p81v_125C $standard_cell_db_file_tt_0p90v_25C $standard_cell_db_file_ff_0p99v_m40C] -lefs [list $cln28ht_lef_file $standard_cell_lef_file] -technology $cln28ht_tech_file cln28ht +save_fusion_lib cln28ht +close_fusion_lib cln28ht + +# Create Power Management Kit fusion library +create_fusion_lib -dbs [list $pmk_db_file_ss_0p81v_125C $pmk_db_file_tt_0p90v_25C $pmk_db_file_ff_0p99v_m40C] -lefs [list $cln28ht_lef_file $pmk_lef_file] -technology $cln28ht_tech_file cln28ht_pmk +save_fusion_lib cln28ht_pmk +close_fusion_lib cln28ht_pmk + +# Create Retention fusion library +create_fusion_lib -dbs [list $ret_db_file_ss_0p81v_125C $ret_db_file_tt_0p90v_25C $ret_db_file_ff_0p99v_m40C] -lefs [list $cln28ht_lef_file $ret_lef_file] -technology $cln28ht_tech_file cln28ht_ret +save_fusion_lib cln28ht_ret +close_fusion_lib cln28ht_ret + +# 16K SRAM +read_lib $sram_16k_lib_file_ss_0p81v_125c +write_lib -output $sram_16k_db_file_ss_0p81v_125c -format db SRAM_16K_ssg_cworstt_0p81v_0p81v_125c +close_lib -all + +read_lib $sram_16k_lib_file_tt_0p90v_25c +write_lib -output $sram_16k_db_file_tt_0p90v_25c -format db SRAM_16K_tt_ctypical_0p90v_0p90v_85c +close_lib -all + +read_lib $sram_16k_lib_file_ff_0p99v_m40c +write_lib -output $sram_16k_db_file_ff_0p99v_m40c -format db SRAM_16K_ffg_cbestt_0p99v_0p99v_m40c +close_lib -all + +create_fusion_lib -dbs [list $sram_16k_db_file_ss_0p81v_125c $sram_16k_db_file_tt_0p90v_25c $sram_16k_db_file_ff_0p99v_m40c] -lefs $sram_16k_lef_file -technology $cln28ht_tech_file sram_16k +save_fusion_lib sram_16k +close_fusion_lib sram_16k + +# Boot ROM +read_lib $rom_via_lib_file_ss_0p81v_125c +write_lib -output $rom_via_db_file_ss_0p81v_125c -format db rom_via_ssg_cworstt_0p81v_0p81v_125c +close_lib -all + +read_lib $rom_via_lib_file_tt_0p90v_25c +write_lib -output $rom_via_db_file_tt_0p90v_25c -format db rom_via_tt_ctypical_0p90v_0p90v_25c +close_lib -all + +read_lib $rom_via_lib_file_ff_0p99v_m40c +write_lib -output $rom_via_db_file_ff_0p99v_m40c -format db rom_via_ffg_cbestt_0p99v_0p99v_m40c +close_lib -all + +create_fusion_lib -dbs [list $rom_via_db_file_ss_0p81v_125c $rom_via_db_file_tt_0p90v_25c $rom_via_db_file_ff_0p99v_m40c] -lefs $rom_via_lef_file -technology $cln28ht_tech_file rom_via +save_fusion_lib rom_via +close_fusion_lib rom_via + +# IO Lib +create_fusion_lib -dbs [list $IO_SS_0p81v_1p62v_125c_db $IO_TT_0p9v_1p8v_25c_db $IO_FF_0p99v_1p98v_m40c_db] -lefs $tphn28hpcpgv18_lef_file -technology $cln28ht_tech_file io_lib +save_fusion_lib io_lib +close_fusion_lib io_lib + +# Pad Lib +create_fusion_lib -lefs $pad_lef_file -technology $cln28ht_tech_file pad_lib +save_fusion_lib pad_lib +close_fusion_lib pad_lib +exit \ No newline at end of file diff --git a/ASIC/TSMC28nm/constraints.sdc b/ASIC/TSMC28nm/constraints.sdc new file mode 100644 index 0000000000000000000000000000000000000000..024c31d325ac47a1df9732abb51f387806af9eb9 --- /dev/null +++ b/ASIC/TSMC28nm/constraints.sdc @@ -0,0 +1,71 @@ +#----------------------------------------------------------------------------- +# NanoSoC Constraints for Synthesis +# A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +# +# Contributors +# +# Daniel Newbrook (d.newbrook@soton.ac.uk) +# +# Copyright (C) 2021-3, SoC Labs (www.soclabs.org) +#----------------------------------------------------------------------------- + +#### CLOCK DEFINITION + +set EXTCLK "clk"; +set SWDCLK "swdclk"; +set_units -time ns; + +set_units -capacitance pF; +set EXTCLK_PERIOD 4.16667; +set SWDCLK_PERIOD [expr 4*$EXTCLK_PERIOD]; +set CLK_ERROR 0.35; #Error calculated from worst case characteristics of CDCM61001 low-jitter oscillator chip at 250MHz +set INTER_CLOCK_UNCERTAINTY 0.1 + +create_clock -name "$EXTCLK" -period "$EXTCLK_PERIOD" -waveform "0 [expr $EXTCLK_PERIOD/2]" [get_ports CLK] +create_clock -name "$SWDCLK" -period "$SWDCLK_PERIOD" -waveform "0 [expr $SWDCLK_PERIOD/2]" [get_ports SWDCK] + +set_clock_uncertainty $CLK_ERROR [get_clocks $EXTCLK] +set_clock_uncertainty $CLK_ERROR [get_clocks $SWDCLK] + +set_clock_uncertainty -setup $INTER_CLOCK_UNCERTAINTY -rise_from [get_clocks $SWDCLK] -rise_to [get_clocks $EXTCLK] +set_clock_uncertainty -setup $INTER_CLOCK_UNCERTAINTY -rise_from [get_clocks $EXTCLK] -rise_to [get_clocks $SWDCLK] + +### Multicycle path through asynchronous clock domains +set_multicycle_path 2 -setup -end -from SWDCK -to CLK +set_multicycle_path 1 -hold -end -from SWDCK -to CLK +set_multicycle_path 2 -setup -end -from CLK -to SWDCK +set_multicycle_path 1 -hold -end -from CLK -to SWDCK + +set_false_path -hold -from CLK -to SWDCK + +### Multicycle path through pads +set_false_path -through uPAD_SWDIO_IO +set_multicycle_path 2 -through uPAD_SWDIO_IO +#set_false_path -through uPAD_P0_* +#set_false_path -through uPAD_P1_* + +set_multicycle_path 2 -from uPAD_SWDIO_IO/I -to uPAD_SWDIO_IO/C +set_multicycle_path 2 -from uPAD_SWDIO_IO/IE -to uPAD_SWDIO_IO/C +set_multicycle_path 2 -from uPAD_SWDIO_IO/DS -to uPAD_SWDIO_IO/C +set_multicycle_path 2 -from uPAD_SWDIO_IO/OEN -to uPAD_SWDIO_IO/C + +set_multicycle_path 2 -from uPAD_P0_*/I -to uPAD_P0_*/C +set_multicycle_path 2 -from uPAD_P0_*/IE -to uPAD_P0_*/C +set_multicycle_path 2 -from uPAD_P0_*/DS -to uPAD_P0_*/C +set_multicycle_path 2 -from uPAD_P0_*/OEN -to uPAD_P0_*/C + +set_multicycle_path 2 -from uPAD_P1_*/I -to uPAD_P1_*/C +set_multicycle_path 2 -from uPAD_P1_*/IE -to uPAD_P1_*/C +set_multicycle_path 2 -from uPAD_P1_*/DS -to uPAD_P1_*/C +set_multicycle_path 2 -from uPAD_P1_*/OEN -to uPAD_P1_*/C + +#### DELAY DEFINITION + +set_input_delay -clock [get_clocks $EXTCLK] -add_delay 0.1 [get_ports NRST] +set_input_delay -clock [get_clocks $EXTCLK] -add_delay 0.1 [get_ports TEST] +set_input_delay -clock [get_clocks $EXTCLK] -add_delay 0.1 [get_ports P0] +set_input_delay -clock [get_clocks $EXTCLK] -add_delay 0.1 [get_ports P1] +set_input_delay -clock [get_clocks $SWDCLK] -add_delay 0.1 [get_ports SWDIO] + +set_max_capacitance 3 [all_outputs] +set_max_fanout 10 [all_inputs] diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/FC_flow.tcl b/ASIC/TSMC28nm/no_pins/Synopsys_FC/FC_flow.tcl new file mode 100644 index 0000000000000000000000000000000000000000..660b9c5cf7a06c5f196e7053bd3e83c5e6a99b16 --- /dev/null +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/FC_flow.tcl @@ -0,0 +1,24 @@ +# Main flow for Synopsys fusion compiler +set REPORT_DIR $env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports +set LOG_DIR $env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/logs + +# Design setup: read libraries and RTL +redirect -tee -file $LOG_DIR/01_design_setup.log {source ./design_setup.tcl} + +# Floorplan setup +redirect -tee -file $LOG_DIR/02_init_floorplan.log {initialize_floorplan -control_type die -use_site_row -side_length {1111.1111111 1111.11111} -core_offset {140}} +redirect -tee -file $LOG_DIR/03_floorplan.log {source ./floorplan/fp.tcl} + +# Read Constraints +redirect -tee -file $LOG_DIR/04_constraints.log {read_sdc ../../constraints.sdc} + +# Power Plan +redirect -tee -file $LOG_DIR/05_power_plan.log {source ./power_plan.tcl} + +# Init coarse placement +redirect -tee -file $LOG_DIR/06_init_placement.log {source ./init_placement.tcl} + +# Physical aware synthesis +redirect -tee -file $LOG_DIR/07_compile.log {compile_fusion} +save_lib nanosoc_chip_pads.dlib +redirect -tee -file $REPORT_DIR/timing_01_compile.rep {report_timing} diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/design_setup.tcl b/ASIC/TSMC28nm/no_pins/Synopsys_FC/design_setup.tcl index 98a8de3e444b4f4870b95409f0263956d3f8cec3..c0c9dfa67b42f41b4fb1ab2246b1e1b3146ceac9 100644 --- a/ASIC/TSMC28nm/no_pins/Synopsys_FC/design_setup.tcl +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/design_setup.tcl @@ -1,12 +1,30 @@ set sc9mcpp240z_base_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc9mcpp140z_base_svt_c35/r0p0 set cln28ht_tech_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/arm_tech/r1p0 +set TLU_dir /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/arm_tech/r1p0/synopsys_tluplus/1p8m_5x2z_utalrdl + +set TLU_cbest $TLU_dir/cbest.tluplus +set TLU_cworst $TLU_dir/cworst.tluplus +set TLU_rcbest $TLU_dir/rcbest.tluplus +set TLU_rcworst $TLU_dir/rcworst.tluplus +set TLU_map $TLU_dir/tluplus.map + create_lib nanosoc_chip_pads.dlib \ - -technology $cln28ht_tech_path/milkyway/1p9m_5x1y2z_utalrdl/sc9mcpp140z_tech.tf \ - -ref_libs {./cln28ht_sc9mcpp140z/} + -technology $cln28ht_tech_path/milkyway/1p8m_5x2z_utalrdl/sc9mcpp140z_tech.tf \ + -ref_libs {./cln28ht/ ./sram_16k/ ./rom_via/} source $env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/flist/dc_flist.tcl -analyze -format verilog $env(SOCLABS_PROJECT_DIR)/nanosoc_tech/nanosoc/nanosoc_chip/pads/glib/verilog/nanosoc_chip_pads.v +analyze -format verilog $env(SOCLABS_ASIC_LIB_TECH_DIR)/pads/verilog/PAD_INOUT8MA_NOE.v +analyze -format verilog $env(SOCLABS_PROJECT_DIR)/nanosoc_tech/ASIC/nanosoc_chip_pads/tsmc28hpcp/nanosoc_chip_pads_no_pads.v elaborate nanosoc_chip_pads -set_top_module nanosoc_chip_pads \ No newline at end of file +set_top_module nanosoc_chip_pads + +redirect -tee -file ./lib_cell_summary.log {report_lib -cell_summary cln28ht} + +read_parasitic_tech -name cbest -tlup $TLU_cbest -layermap $TLU_map -sanity_check advanced +read_parasitic_tech -name cworst -tlup $TLU_cworst -layermap $TLU_map -sanity_check advanced +read_parasitic_tech -name rcbest -tlup $TLU_rcbest -layermap $TLU_map -sanity_check advanced +read_parasitic_tech -name rcworst -tlup $TLU_rcworst -layermap $TLU_map -sanity_check advanced + +save_lib nanosoc_chip_pads.dlib diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/floorplan.def b/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/floorplan.def new file mode 100644 index 0000000000000000000000000000000000000000..018405835fd51fbec4efe0fd73a585f6f6c44e95 --- /dev/null +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/floorplan.def @@ -0,0 +1,13 @@ +# +# Fusion Compiler write_def +# Release : U-2022.12 +# User Name : dwn1c21 +# Date : Thu Sep 12 11:29:50 2024 +# +VERSION 5.8 ; +DIVIDERCHAR "/" ; +BUSBITCHARS "[]" ; +DESIGN nanosoc_chip_pads ; +UNITS DISTANCE MICRONS 1000 ; +DIEAREA ( 0 0 ) ( 0 1110700 ) ( 1111040 1110700 ) ( 1111040 0 ) ; +END DESIGN diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/floorplan.tcl b/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/floorplan.tcl new file mode 100644 index 0000000000000000000000000000000000000000..8a9a7025a43fc644af0a7ead1392b5af8543d2d1 --- /dev/null +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/floorplan.tcl @@ -0,0 +1,51 @@ +################################################################################ +# +# Created by fc write_floorplan on Thu Sep 12 11:29:50 2024 +# +################################################################################ + +set _dirName__0 [file dirname [file normalize [info script]]] + +source ${_dirName__0}/fp.tcl + +if { [get_attribute -name view_name [current_block]] == "design" } { + set __fp_crnt_design_name__ [get_attribute -name design_name [current_block]] + set __fp_crnt_label_name__ [get_attribute -name label_name [current_block]] + set __fp_crnt_lib_name__ [get_attribute -name lib_name [current_block]] + set __fp_crnt_lib_path__ [get_attribute -name source_file_name [current_lib]] + set __fp_crnt_abs_name__ ${__fp_crnt_lib_name__}:${__fp_crnt_design_name__} + set __fp_crnt_abs_path__ ${__fp_crnt_lib_path__}/${__fp_crnt_design_name__} + if { [string length ${__fp_crnt_label_name__} ] != 0 } { + set __fp_crnt_abs_name__ ${__fp_crnt_abs_name__}/${__fp_crnt_label_name__}.abstract + set __fp_crnt_abs_path__ ${__fp_crnt_abs_path__}/design_label.${__fp_crnt_label_name__}/abs + } else { + set __fp_crnt_abs_name__ ${__fp_crnt_abs_name__}.abstract + set __fp_crnt_abs_path__ ${__fp_crnt_abs_path__}/abs + } + if { [sizeof_collection [get_blocks -quiet ${__fp_crnt_abs_name__}]] != 0} { + if { [get_attribute -name has_editable_abstract [current_block]] } { + echo "Design [get_attribute -name full_name [current_block]] has editable abstract view. Re-creating the abstract view after floorplan loading..." + set __fp_crnt_abs_type__ [get_attribute -quiet -name abstract_view_type [current_block]] + if { [string length ${__fp_crnt_abs_type__} ] == 0 } { + if { [file exists "${__fp_crnt_abs_path__}/abs.mc"] } { + echo "re-create timing abstract view for design [get_attribute -name full_name [current_block]]" + create_abstract + save_lib -all + } else { + echo "re-create placement abstract view for design [get_attribute -name full_name [current_block]]" + create_abstract -placement + save_lib -all + } + } elseif { ${__fp_crnt_abs_type__} == "placement" } { + echo "re-create placement abstract view for design [get_attribute -name full_name [current_block]]" + create_abstract -placement + save_lib -all + } else { + echo "re-create timing abstract view for design [get_attribute -name full_name [current_block]]" + create_abstract + save_lib -all + } + } + } +} + diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/floorplan_compare_data.txt b/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/floorplan_compare_data.txt new file mode 100644 index 0000000000000000000000000000000000000000..0c0d01e014a6da323cd8c069c7981fb9c176728b --- /dev/null +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/floorplan_compare_data.txt @@ -0,0 +1,55 @@ +################################################################################ +# +# Created by fc compare_floorplans on Thu Sep 12 11:29:50 2024 +# +# DO NOT EDIT - automatically generated file +# +################################################################################ + +START nanosoc_chip_pads + MACROS + u_nanosoc_chip/u_system/u_ss_cpu/u_region_bootrom_0/u_bootrom_cpu_0/u_bootrom/u_sl_rom { {140.0000 944.1350} {235.0500 970.7000} } + u_nanosoc_chip/u_system/u_ss_cpu/u_region_imem_0/u_imem_0/u_sram/genblk1.u_sram { {282.3200 781.1650} {454.5000 970.7000} } + u_nanosoc_chip/u_system/u_ss_cpu/u_region_dmem_0/u_dmem_0/u_sram/genblk1.u_sram { {454.5000 781.1650} {626.6800 970.7000} } + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_l/u_expram_l/u_sram/genblk1.u_sram { {798.8600 781.1650} {971.0400 970.7000} } + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_h/u_expram_h/u_sram/genblk1.u_sram { {626.6800 781.1650} {798.8600 970.7000} } + PINS + SE { {555.5200 555.3500} {555.5201 555.3501} } + CLK { {555.5200 555.3500} {555.5201 555.3501} } + TEST { {555.5200 555.3500} {555.5201 555.3501} } + NRST { {555.5200 555.3500} {555.5201 555.3501} } + P0[15] { {555.5200 555.3500} {555.5201 555.3501} } + P0[14] { {555.5200 555.3500} {555.5201 555.3501} } + P0[13] { {555.5200 555.3500} {555.5201 555.3501} } + P0[12] { {555.5200 555.3500} {555.5201 555.3501} } + P0[11] { {555.5200 555.3500} {555.5201 555.3501} } + P0[10] { {555.5200 555.3500} {555.5201 555.3501} } + P0[9] { {555.5200 555.3500} {555.5201 555.3501} } + P0[8] { {555.5200 555.3500} {555.5201 555.3501} } + P0[7] { {555.5200 555.3500} {555.5201 555.3501} } + P0[6] { {555.5200 555.3500} {555.5201 555.3501} } + P0[5] { {555.5200 555.3500} {555.5201 555.3501} } + P0[4] { {555.5200 555.3500} {555.5201 555.3501} } + P0[3] { {555.5200 555.3500} {555.5201 555.3501} } + P0[2] { {555.5200 555.3500} {555.5201 555.3501} } + P0[1] { {555.5200 555.3500} {555.5201 555.3501} } + P0[0] { {555.5200 555.3500} {555.5201 555.3501} } + P1[15] { {555.5200 555.3500} {555.5201 555.3501} } + P1[14] { {555.5200 555.3500} {555.5201 555.3501} } + P1[13] { {555.5200 555.3500} {555.5201 555.3501} } + P1[12] { {555.5200 555.3500} {555.5201 555.3501} } + P1[11] { {555.5200 555.3500} {555.5201 555.3501} } + P1[10] { {555.5200 555.3500} {555.5201 555.3501} } + P1[9] { {555.5200 555.3500} {555.5201 555.3501} } + P1[8] { {555.5200 555.3500} {555.5201 555.3501} } + P1[7] { {555.5200 555.3500} {555.5201 555.3501} } + P1[6] { {555.5200 555.3500} {555.5201 555.3501} } + P1[5] { {555.5200 555.3500} {555.5201 555.3501} } + P1[4] { {555.5200 555.3500} {555.5201 555.3501} } + P1[3] { {555.5200 555.3500} {555.5201 555.3501} } + P1[2] { {555.5200 555.3500} {555.5201 555.3501} } + P1[1] { {555.5200 555.3500} {555.5201 555.3501} } + P1[0] { {555.5200 555.3500} {555.5201 555.3501} } + SWDIO { {555.5200 555.3500} {555.5201 555.3501} } + SWDCK { {555.5200 555.3500} {555.5201 555.3501} } +END nanosoc_chip_pads diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/fp.tcl b/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/fp.tcl new file mode 100644 index 0000000000000000000000000000000000000000..6ee55ac7ec897c676880b08e3eafc573ba5f23bc --- /dev/null +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/fp.tcl @@ -0,0 +1,82 @@ +################################################################################ +# +# Created by fc write_floorplan on Thu Sep 12 11:29:50 2024 +# +################################################################################ + + +set _dirName__0 [file dirname [file normalize [info script]]] + +################################################################################ +# Read DEF +################################################################################ + +read_def ${_dirName__0}/floorplan.def + +################################################################################ +# Macros +################################################################################ + +set cellInst [get_cells { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_bootrom_0/u_bootrom_cpu_0/u_bootrom/u_sl_rom \ + }] +set_attribute -quiet -objects $cellInst -name orientation -value R90 +set_attribute -quiet -objects $cellInst -name origin -value { 235.0500 944.1350 \ + } +set_attribute -quiet -objects $cellInst -name status -value placed + +set cellInst [get_cells { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_imem_0/u_imem_0/u_sram/genblk1.u_sram \ + }] +set_attribute -quiet -objects $cellInst -name orientation -value R90 +set_attribute -quiet -objects $cellInst -name origin -value { 454.5000 781.1650 \ + } +set_attribute -quiet -objects $cellInst -name status -value placed + +set cellInst [get_cells { \ + u_nanosoc_chip/u_system/u_ss_cpu/u_region_dmem_0/u_dmem_0/u_sram/genblk1.u_sram \ + }] +set_attribute -quiet -objects $cellInst -name orientation -value R90 +set_attribute -quiet -objects $cellInst -name origin -value { 626.6800 781.1650 \ + } +set_attribute -quiet -objects $cellInst -name status -value placed + +set cellInst [get_cells { \ + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_l/u_expram_l/u_sram/genblk1.u_sram \ + }] +set_attribute -quiet -objects $cellInst -name orientation -value R90 +set_attribute -quiet -objects $cellInst -name origin -value { 971.0400 781.1650 \ + } +set_attribute -quiet -objects $cellInst -name status -value placed + +set cellInst [get_cells { \ + u_nanosoc_chip/u_system/u_ss_expansion/u_region_expram_h/u_expram_h/u_sram/genblk1.u_sram \ + }] +set_attribute -quiet -objects $cellInst -name orientation -value R90 +set_attribute -quiet -objects $cellInst -name origin -value { 798.8600 781.1650 \ + } +set_attribute -quiet -objects $cellInst -name status -value placed + + +################################################################################ +# User attributes of macros +################################################################################ + + +################################################################################ +# I/O guides +################################################################################ + +remove_io_guides -all + + +################################################################################ +# User attributes of I/O guides +################################################################################ + + +################################################################################ +# User attributes of current block +################################################################################ + + diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/mapfile b/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/mapfile new file mode 100644 index 0000000000000000000000000000000000000000..1af7533494755299cc3dee06e1613fbfb52d4cb6 --- /dev/null +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/floorplan/mapfile @@ -0,0 +1 @@ +nanosoc_chip_pads FLOORPLAN fp.tcl diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/init_placement.tcl b/ASIC/TSMC28nm/no_pins/Synopsys_FC/init_placement.tcl new file mode 100644 index 0000000000000000000000000000000000000000..e3f8a3213be9c8e0f3904ea1c37094b4b18052e9 --- /dev/null +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/init_placement.tcl @@ -0,0 +1,10 @@ +set_parasitic_parameters -early_spec cbest -early_temperature -40 -late_spec cworst -late_temperature 125 -library nanosoc_chip_pads.dlib +set_operating_conditions -max_library cln28ht -max ssg_cworstt_max_0p81v_125c -min_library cln28ht -min ffg_cbestt_min_0p99v_m40c +set_temperature -40 -min 125 -corners default +set_voltage 0.99 -min 0.81 -corners default + +redirect -tee -file ./precompile_checks.log {compile_fusion -check_only} + +explore_logic_hierarchy -create_module_boundary -nested -cell [get_cells -design [current_block] {u_nanosoc_chip u_nanosoc_chip_cfg}] +explore_logic_hierarchy -place -rectangular +save_lib nanosoc_chip_pads.dlib diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/power_plan.tcl b/ASIC/TSMC28nm/no_pins/Synopsys_FC/power_plan.tcl new file mode 100644 index 0000000000000000000000000000000000000000..407e63e1efc3bd7abbec1e5f5b8bab07c6034a2d --- /dev/null +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/power_plan.tcl @@ -0,0 +1,16 @@ +connect_pg_net -automatic + +create_pg_ring_pattern ring_pattern -horizontal_layer M7 -horizontal_width {5} -horizontal_spacing {2}\ + -vertical_layer M8 -vertical_width {5} -vertical_spacing {2} + +create_pg_mesh_pattern mesh_pattern -layers {{{vertical_layer: M8} {width: 1} {pitch: 30} {offset: 20}} \ + {{horizontal_layer: M5} {width: 1} {pitch: 30} {offset: 20}}} +create_pg_std_cell_conn_pattern std_pattern -layers {M1} -check_std_cell_drc false -mark_as_follow_pin false -rail_width {0.13 0.13} + +set_pg_strategy core_ring -pattern {{name: ring_pattern} {nets: {VDD VSS}} {offset: {3 3}}} -core +set_pg_strategy M5M8_mesh -pattern {{name: mesh_pattern} {nets: {VDD VSS}}} -core +set_pg_strategy std_cell_strat -core -pattern {{name: std_pattern} {nets: {VDD VSS}}} + +compile_pg -strategies core_ring +compile_pg -strategies M5M8_mesh +compile_pg -strategies std_cell_strat diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/synopsys_lib_conversion.tcl b/ASIC/TSMC28nm/no_pins/Synopsys_FC/synopsys_lib_conversion.tcl index 464cd56d59fbcd9aee90fcb3943e5791b9a1bd38..3e56c3f835bc2bdc672178fd35b59d7cbd23d199 100644 --- a/ASIC/TSMC28nm/no_pins/Synopsys_FC/synopsys_lib_conversion.tcl +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/synopsys_lib_conversion.tcl @@ -1,27 +1,78 @@ -set sc9mcpp140z_base_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc9mcpp140z_base_svt_c35/r0p0 +# Technology files set cln28ht_tech_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/arm_tech/r1p0 +set cln28ht_tech_file $cln28ht_tech_path/milkyway/1p8m_5x2z_utalrdl/sc9mcpp140z_tech.tf +set cln28ht_lef_file $cln28ht_tech_path/lef/1p8m_5x2z_utalrdl/sc9mcpp140z_tech.lef -set cln28ht_tech_file $cln28ht_tech_path/milkyway/1p9m_5x1y2z_utalrdl/sc9mcpp140z_tech.tf -set cln28ht_lef_file $cln28ht_tech_path/lef/1p9m_5x1y2z_utalrdl/sc9mcpp140z_tech.lef +# Standard Cell libraries +set sc9mcpp140z_base_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc9mcpp140z_base_svt_c35/r0p0 +set sc9mcpp140z_lef_file $sc9mcpp140z_base_path/lef/sc9mcpp140z_cln28ht_base_svt_c35.lef +set sc9mcpp140z_gds_file $sc9mcpp140z_base_path/gds2/sc9mcpp140z_cln28ht_base_svt_c35.gds2 +set sc9mcpp140z_db_file_ss_0p81v_125C $sc9mcpp140z_base_path/db/sc9mcpp140z_cln28ht_base_svt_c35_ssg_cworstt_max_0p81v_125c.db +set sc9mcpp140z_db_file_tt_0p90v_25C $sc9mcpp140z_base_path/db/sc9mcpp140z_cln28ht_base_svt_c35_tt_ctypical_max_0p90v_25c.db +set sc9mcpp140z_db_file_ff_0p99v_m40C $sc9mcpp140z_base_path/db/sc9mcpp140z_cln28ht_base_svt_c35_ffg_cbestt_min_0p99v_m40c.db +set sc9mcpp140z_antenna_file $sc9mcpp140z_base_path/milkyway/1p8m_5x2z_utalrdl/sc9mcpp140z_cln28ht_base_svt_c35_antenna.clf -set sc9mcpp140z_lef_file $sc9mcpp140z_base_path/lef/sc9mcpp140z_cln28ht_base_svt_c35.lef -set sc9mcpp140z_gds_file $sc9mcpp140z_base_path/gds2/sc9mcpp140z_cln28ht_base_svt_c35.gds2 -set sc9mcpp140z_db_file $sc9mcpp140z_base_path/db/sc9mcpp140z_cln28ht_base_svt_c35_ssg_cworstt_max_0p81v_125c.db -set sc9mcpp140z_antenna_file $sc9mcpp140z_base_path/milkyway/1p9m_5x1y2z_utalrdl/sc9mcpp140z_cln28ht_base_svt_c35_antenna.clf +# SRAM files (using Arm compiler) +set sram_16k_path $env(SOCLABS_PROJECT_DIR)/memories/sram_16k +set sram_16k_lef_file $sram_16k_path/sram_16k.lef +set sram_16k_gds_file $sram_16k_path/sram_16k.gds2 +set sram_16k_lib_file_ss_0p81v_125c $sram_16k_path/sram_16k_ssg_cworstt_0p81v_0p81v_125c.lib +set sram_16k_lib_file_tt_0p90v_25c $sram_16k_path/sram_16k_tt_ctypical_0p90v_0p90v_85c.lib +set sram_16k_lib_file_ff_0p99v_m40c $sram_16k_path/sram_16k_ffg_cbestt_0p99v_0p99v_m40c.lib +set sram_16k_db_file_ss_0p81v_125c $sram_16k_path/sram_16k_ssg_cworstt_0p81v_0p81v_125c.db +set sram_16k_db_file_tt_0p90v_25c $sram_16k_path/sram_16k_tt_ctypical_0p90v_0p90v_85c.db +set sram_16k_db_file_ff_0p99v_m40c $sram_16k_path/sram_16k_ffg_cbestt_0p99v_0p99v_m40c.db -create_physical_lib -technology $cln28ht_tech_file cln28ht -read_lef -library cln28ht $sc9mcpp140z_lef_file -read_gds -library cln28ht $sc9mcpp140z_gds_file -set_cell_site -site_def unit -update_physical_properties -library cln28ht -format clf -file $sc9mcpp140z_antenna_file +# ROM Files (using arm Compiler) +set rom_path $env(SOCLABS_PROJECT_DIR)/memories/bootrom +set rom_via_lef_file $rom_path/rom_via.lef +set rom_via_gds_file $rom_path/rom_via.gds2 +set rom_via_lib_file_ss_0p81v_125c $rom_path/rom_via_ssg_cworstt_0p81v_0p81v_125c.lib +set rom_via_lib_file_tt_0p90v_25c $rom_path/rom_via_tt_ctypical_0p90v_0p90v_25c.lib +set rom_via_lib_file_ff_0p99v_m40c $rom_path/rom_via_ffg_cbestt_0p99v_0p99v_m40c.lib +set rom_via_db_file_ss_0p81v_125c $rom_path/rom_via_ssg_cworstt_0p81v_0p81v_125c.db +set rom_via_db_file_tt_0p90v_25c $rom_path/rom_via_tt_ctypical_0p90v_0p90v_25c.db +set rom_via_db_file_ff_0p99v_m40c $rom_path/rom_via_ffg_cbestt_0p99v_0p99v_m40c.db -update_physical_properties -library cln28ht -format db -file $sc9mcpp140z_db_file -create_frame +# Create standard cell fusion library +create_fusion_lib -dbs [list $sc9mcpp140z_db_file_ss_0p81v_125C $sc9mcpp140z_db_file_tt_0p90v_25C $sc9mcpp140z_db_file_ff_0p99v_m40C] -lefs [list $cln28ht_lef_file $sc9mcpp140z_lef_file] -technology $cln28ht_tech_file cln28ht +save_fusion_lib cln28ht -set_app_options -name +close_fusion_lib cln28ht -write_physical_lib -output cln28ht.ndm -report_lib -all cln28ht +# 16K SRAM +read_lib $sram_16k_lib_file_ss_0p81v_125c +write_lib -output $sram_16k_db_file_ss_0p81v_125c -format db SRAM_16K_ssg_cworstt_0p81v_0p81v_125c +close_lib -all -set_check_library_options -logic_vs_physical -physical -check_library -physical_library_name cln28ht -logic_library_name $sc9mcpp140z_db_file \ No newline at end of file +read_lib $sram_16k_lib_file_tt_0p90v_25c +write_lib -output $sram_16k_db_file_tt_0p90v_25c -format db SRAM_16K_tt_ctypical_0p90v_0p90v_85c +close_lib -all + +read_lib $sram_16k_lib_file_ff_0p99v_m40c +write_lib -output $sram_16k_db_file_ff_0p99v_m40c -format db SRAM_16K_ffg_cbestt_0p99v_0p99v_m40c +close_lib -all + +create_fusion_lib -dbs [list $sram_16k_db_file_ss_0p81v_125c $sram_16k_db_file_tt_0p90v_25c $sram_16k_db_file_ff_0p99v_m40c] -lefs $sram_16k_lef_file -technology $cln28ht_tech_file sram_16k +save_fusion_lib sram_16k +close_fusion_lib sram_16k + +# Boot ROM +read_lib $rom_via_lib_file_ss_0p81v_125c +write_lib -output $rom_via_db_file_ss_0p81v_125c -format db rom_via_ssg_cworstt_0p81v_0p81v_125c +close_lib -all + +read_lib $rom_via_lib_file_tt_0p90v_25c +write_lib -output $rom_via_db_file_tt_0p90v_25c -format db rom_via_tt_ctypical_0p90v_0p90v_25c +close_lib -all + +read_lib $rom_via_lib_file_ff_0p99v_m40c +write_lib -output $rom_via_db_file_ff_0p99v_m40c -format db rom_via_ffg_cbestt_0p99v_0p99v_m40c +close_lib -all + +create_fusion_lib -dbs [list $rom_via_db_file_ss_0p81v_125c $rom_via_db_file_tt_0p90v_25c $rom_via_db_file_ff_0p99v_m40c] -lefs $rom_via_lef_file -technology $cln28ht_tech_file rom_via +save_fusion_lib rom_via +close_fusion_lib rom_via + + +exit \ No newline at end of file diff --git a/ASIC/nanosoc_chip_pads/tsmc28hpcp/nanosoc_chip_pads_38pin.v b/ASIC/nanosoc_chip_pads/tsmc28hpcp/nanosoc_chip_pads_38pin.v index 08ae5f440d81397c18295589b473482e446885ac..486b4acd71c1c4015ce3385d960bbc19eb930fb7 100644 --- a/ASIC/nanosoc_chip_pads/tsmc28hpcp/nanosoc_chip_pads_38pin.v +++ b/ASIC/nanosoc_chip_pads/tsmc28hpcp/nanosoc_chip_pads_38pin.v @@ -224,122 +224,101 @@ nanosoc_chip_cfg #( // Pad IO power supplies -PVDD2CDG uPAD_VDDIO_0( +PVDD2DGZ_H_G uPAD_VDDIO_0( .VDDPST(VDDIO) ); -//PVDD2CDG uPAD_VDDIO_1( -// .VDDPST(VDDIO) -// ); -PVDD2CDG uPAD_VDDIO_2( +PVDD2DGZ_H_G uPAD_VDDIO_2( .VDDPST(VDDIO) ); -PVDD2POC uPAD_VDDIO_3( +PVDD2POC_H_G uPAD_VDDIO_3( .VDDPST(VDDIO) ); -PVSS2CDG uPAD_VSSIO_0( +PVSS2DGZ_H_G uPAD_VSSIO_0( .VSSPST(VSSIO) ); -PVSS2CDG uPAD_VSSIO_1( +PVSS2DGZ_H_G uPAD_VSSIO_1( .VSSPST(VSSIO) ); // Core power supplies -PVDD1CDG uPAD_VDD_0( +PVDD1DGZ_H_G uPAD_VDD_0( .VDD(VDD) ); -PVDD1CDG uPAD_VDD_1( +PVDD1DGZ_V_G uPAD_VDD_1( .VDD(VDD) ); -PVDD1CDG uPAD_VDD_2( +PVDD1DGZ_H_G uPAD_VDD_2( .VDD(VDD) ); -PVDD1CDG uPAD_VDD_3( +PVDD1DGZ_V_G uPAD_VDD_3( .VDD(VDD) ); -PVSS1CDG uPAD_VSS_0( +PVSS1DGZ_H_G uPAD_VSS_0( .VSS(VSS) ); -PVSS1CDG uPAD_VSS_1( +PVSS1DGZ_V_G uPAD_VSS_1( .VSS(VSS) ); -PVSS1CDG uPAD_VSS_2( +PVSS1DGZ_H_G uPAD_VSS_2( .VSS(VSS) ); -PVSS1CDG uPAD_VSS_3( +PVSS1DGZ_V_G uPAD_VSS_3( .VSS(VSS) ); // Accelerator Power supplies -PVDD1CDG uPAD_VDDACC_0( +PVDD1DGZ_H_G uPAD_VDDACC_0( .VDD(VDDACC) ); -PVDD1CDG uPAD_VDDACC_1( +PVDD1DGZ_V_G uPAD_VDDACC_1( .VDD(VDDACC) ); -PVDD1CDG uPAD_VDDACC_2( +PVDD1DGZ_H_G uPAD_VDDACC_2( .VDD(VDDACC) ); // Clock, Reset and Serial Wire Debug ports -PRDW0408SCDG uPAD_SE_I ( - .IE(tiehi), +PRDW08SDGZ_V_G uPAD_SE_I ( .C(pad_se_i), - .PE(tielo), - .DS(tielo), .I(tielo), .OEN(tiehi), .PAD(SE) ); -PRDW0408SCDG uPAD_CLK_I ( - .IE(tiehi), +PRDW08SDGZ_V_G uPAD_CLK_I ( .C(pad_clk_i), - .PE(tielo), - .DS(tielo), .I(tielo), .OEN(tiehi), .PAD(CLK) ); -PRDW0408SCDG uPAD_TEST_I ( - .IE(tiehi), +PRDW08SDGZ_V_G uPAD_TEST_I ( .C(pad_test_i), - .PE(tielo), - .DS(tielo), .I(tielo), .OEN(tiehi), .PAD(TEST) ); -PRDW0408SCDG uPAD_NRST_I ( - .IE(tiehi), +PRDW08SDGZ_V_G uPAD_NRST_I ( .C(pad_nrst_i), - .PE(tielo), - .DS(tielo), .I(tielo), .OEN(tiehi), .PAD(NRST) ); -PRDW0408SCDG uPAD_SWDIO_IO ( - .IE(pad_swdio_z), +PRDW08SDGZ_V_G uPAD_SWDIO_IO ( .C(pad_swdio_i), - .PE(tielo), - .DS(tielo), .I(pad_swdio_o), .OEN(pad_swdio_z), .PAD(SWDIO) ); -PRDW0408SCDG uPAD_SWDCK_I ( - .IE(tiehi), +PRDW08SDGZ_V_G uPAD_SWDCK_I ( .C(pad_swdclk_i), - .PE(tielo), - .DS(tielo), .I(tielo), .OEN(tiehi), .PAD(SWDCK) @@ -347,162 +326,114 @@ PRDW0408SCDG uPAD_SWDCK_I ( // GPI.I Port 0 x 16 -PRDW0408SCDG uPAD_P0_00 ( - .IE(pad_gpio_port0_z[00]), +PRDW08SDGZ_V_G uPAD_P0_00 ( .C(pad_gpio_port0_i[00]), - .PE(pad_gpio_port0_z[00]&pad_gpio_port0_o[00]), - .DS(tielo), .I(pad_gpio_port0_o[00]), .OEN(pad_gpio_port0_z[00]), .PAD(P0[00]) ); -PRDW0408SCDG uPAD_P0_01 ( - .IE(pad_gpio_port0_z[01]), +PRDW08SDGZ_V_G uPAD_P0_01 ( .C(pad_gpio_port0_i[01]), - .PE(pad_gpio_port0_z[01]&pad_gpio_port0_o[01]), - .DS(tielo), .I(pad_gpio_port0_o[01]), .OEN(pad_gpio_port0_z[01]), .PAD(P0[01]) ); -PRDW0408SCDG uPAD_P0_02 ( - .IE(pad_gpio_port0_z[02]), +PRDW08SDGZ_V_G uPAD_P0_02 ( .C(pad_gpio_port0_i[02]), - .PE(pad_gpio_port0_z[02]&pad_gpio_port0_o[02]), - .DS(tielo), .I(pad_gpio_port0_o[02]), .OEN(pad_gpio_port0_z[02]), .PAD(P0[02]) ); -PRDW0408SCDG uPAD_P0_03 ( - .IE(pad_gpio_port0_z[03]), +PRDW08SDGZ_V_G uPAD_P0_03 ( .C(pad_gpio_port0_i[03]), - .PE(pad_gpio_port0_z[03]&pad_gpio_port0_o[03]), - .DS(tielo), .I(pad_gpio_port0_o[03]), .OEN(pad_gpio_port0_z[03]), .PAD(P0[03]) ); -PRDW0408SCDG uPAD_P0_04 ( - .IE(pad_gpio_port0_z[04]), +PRDW08SDGZ_V_G uPAD_P0_04 ( .C(pad_gpio_port0_i[04]), - .PE(pad_gpio_port0_z[04]&pad_gpio_port0_o[04]), - .DS(tielo), .I(pad_gpio_port0_o[04]), .OEN(pad_gpio_port0_z[04]), .PAD(P0[04]) ); -PRDW0408SCDG uPAD_P0_05 ( - .IE(pad_gpio_port0_z[05]), +PRDW08SDGZ_V_G uPAD_P0_05 ( .C(pad_gpio_port0_i[05]), - .PE(pad_gpio_port0_z[05]&pad_gpio_port0_o[05]), - .DS(tielo), .I(pad_gpio_port0_o[05]), .OEN(pad_gpio_port0_z[05]), .PAD(P0[05]) ); -PRDW0408SCDG uPAD_P0_06 ( - .IE(pad_gpio_port0_z[06]), +PRDW08SDGZ_V_G uPAD_P0_06 ( .C(pad_gpio_port0_i[06]), - .PE(pad_gpio_port0_z[06]&pad_gpio_port0_o[06]), - .DS(tielo), .I(pad_gpio_port0_o[06]), .OEN(pad_gpio_port0_z[06]), .PAD(P0[06]) ); -PRDW0408SCDG uPAD_P0_07 ( - .IE(pad_gpio_port0_z[07]), +PRDW08SDGZ_V_G uPAD_P0_07 ( .C(pad_gpio_port0_i[07]), - .PE(pad_gpio_port0_z[07]&pad_gpio_port0_o[07]), - .DS(tielo), .I(pad_gpio_port0_o[07]), .OEN(pad_gpio_port0_z[07]), .PAD(P0[07]) ); // GPI.I Port 1 x 16 -PRDW0408SCDG uPAD_P1_00 ( - .IE(pad_gpio_port1_z[00]), +PRDW08SDGZ_V_G uPAD_P1_00 ( .C(pad_gpio_port1_i[00]), - .PE(pad_gpio_port1_z[00]&pad_gpio_port1_o[00]), - .DS(tielo), .I(pad_gpio_port1_o[00]), .OEN(pad_gpio_port1_z[00]), .PAD(P1[00]) ); -PRDW0408SCDG uPAD_P1_01 ( - .IE(pad_gpio_port1_z[01]), +PRDW08SDGZ_V_G uPAD_P1_01 ( .C(pad_gpio_port1_i[01]), - .PE(pad_gpio_port1_z[01]&pad_gpio_port1_o[01]), - .DS(tielo), .I(pad_gpio_port1_o[01]), .OEN(pad_gpio_port1_z[01]), .PAD(P1[01]) ); -PRDW0408SCDG uPAD_P1_02 ( - .IE(pad_gpio_port1_z[02]), +PRDW08SDGZ_V_G uPAD_P1_02 ( .C(pad_gpio_port1_i[02]), - .PE(pad_gpio_port1_z[02]&pad_gpio_port1_o[02]), - .DS(tielo), .I(pad_gpio_port1_o[02]), .OEN(pad_gpio_port1_z[02]), .PAD(P1[02]) ); -PRDW0408SCDG uPAD_P1_03 ( - .IE(pad_gpio_port1_z[03]), +PRDW08SDGZ_V_G uPAD_P1_03 ( .C(pad_gpio_port1_i[03]), - .PE(pad_gpio_port1_z[03]&pad_gpio_port1_o[03]), - .DS(tielo), .I(pad_gpio_port1_o[03]), .OEN(pad_gpio_port1_z[03]), .PAD(P1[03]) ); -PRDW0408SCDG uPAD_P1_04 ( - .IE(pad_gpio_port1_z[04]), +PRDW08SDGZ_V_G uPAD_P1_04 ( .C(pad_gpio_port1_i[04]), - .PE(pad_gpio_port1_z[04]&pad_gpio_port1_o[04]), - .DS(tielo), .I(pad_gpio_port1_o[04]), .OEN(pad_gpio_port1_z[04]), .PAD(P1[04]) ); -PRDW0408SCDG uPAD_P1_05 ( - .IE(pad_gpio_port1_z[05]), +PRDW08SDGZ_V_G uPAD_P1_05 ( .C(pad_gpio_port1_i[05]), - .PE(pad_gpio_port1_z[05]&pad_gpio_port1_o[05]), - .DS(tielo), .I(pad_gpio_port1_o[05]), .OEN(pad_gpio_port1_z[05]), .PAD(P1[05]) ); -PRDW0408SCDG uPAD_P1_06 ( - .IE(pad_gpio_port1_z[06]), +PRDW08SDGZ_V_G uPAD_P1_06 ( .C(pad_gpio_port1_i[06]), - .PE(pad_gpio_port1_z[06]&pad_gpio_port1_o[06]), - .DS(tielo), .I(pad_gpio_port1_o[06]), .OEN(pad_gpio_port1_z[06]), .PAD(P1[06]) ); -PRDW0408SCDG uPAD_P1_07 ( - .IE(pad_gpio_port1_z[07]), +PRDW08SDGZ_V_G uPAD_P1_07 ( .C(pad_gpio_port1_i[07]), - .PE(pad_gpio_port1_z[07]&pad_gpio_port1_o[07]), - .DS(tielo), .I(pad_gpio_port1_o[07]), .OEN(pad_gpio_port1_z[07]), .PAD(P1[07]) diff --git a/ASIC/nanosoc_chip_pads/tsmc28hpcp/nanosoc_chip_pads_no_pads.v b/ASIC/nanosoc_chip_pads/tsmc28hpcp/nanosoc_chip_pads_no_pads.v new file mode 100644 index 0000000000000000000000000000000000000000..f7d856e5f73a239d117e6ddf79638b5c2c8ad2fa --- /dev/null +++ b/ASIC/nanosoc_chip_pads/tsmc28hpcp/nanosoc_chip_pads_no_pads.v @@ -0,0 +1,527 @@ +//----------------------------------------------------------------------------- +// customised top-level Cortex-M0 'nanosoc' controller +// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +// +// Contributors +// +// David Flynn (d.w.flynn@soton.ac.uk) +// +// Copyright (C) 2021-3, SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// The confidential and proprietary information contained in this file may +// only be used by a person authorised under and to the extent permitted +// by a subsisting licensing agreement from Arm Limited or its affiliates. +// +// (C) COPYRIGHT 2010-2013 Arm Limited or its affiliates. +// ALL RIGHTS RESERVED +// +// This entire notice must be reproduced on all copies of this file +// and copies of this file may only be made by a person if such person is +// permitted to do so under the terms of a subsisting license agreement +// from Arm Limited or its affiliates. +// +// SVN Information +// +// Checked In : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $ +// +// Revision : $Revision: 371321 $ +// +// Release Information : Cortex-M System Design Kit-r1p1-00rel0 +// +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +// Abstract : Top level for example Cortex-M0/Cortex-M0+ microcontroller +//----------------------------------------------------------------------------- +// + +module nanosoc_chip_pads ( +`ifdef POWER_PINS + inout wire VDDIO, + inout wire VSSIO, + inout wire VDD, + inout wire VSS, + inout wire VDDACC, +`endif + input wire SE, + inout wire CLK, // input + inout wire TEST, // output + inout wire NRST, // active low reset + inout wire [15:0] P0, + inout wire [15:0] P1, + inout wire SWDIO, + inout wire SWDCK); + + +//------------------------------------ +// internal wires + +localparam GPIO_TIO = 4; + +wire pad_clk_i; +wire pad_nrst_i; +wire pad_test_i; +wire pad_swdclk_i; +wire pad_swdio_i; +wire pad_swdio_o; +wire pad_swdio_e; +wire pad_swdio_z; +wire [15:0] pad_gpio_port0_i ; +wire [15:0] pad_gpio_port0_o ; +wire [15:0] pad_gpio_port0_e ; +wire [15:0] pad_gpio_port0_z ; +wire [15:0] pad_gpio_port1_i ; +wire [15:0] pad_gpio_port1_o ; +wire [15:0] pad_gpio_port1_e ; +wire [15:0] pad_gpio_port1_z ; +wire soc_nreset; +wire soc_diag_mode; +wire soc_diag_ctrl; +wire soc_scan_mode; +wire soc_scan_enable; +wire [GPIO_TIO-1:0] soc_scan_in; //soc test status outputs +wire [GPIO_TIO-1:0] soc_scan_out; //soc test status outputs +wire soc_bist_mode; +wire soc_bist_enable; +wire [GPIO_TIO-1:0] soc_bist_in; //soc test status outputs +wire [GPIO_TIO-1:0] soc_bist_out; //soc test status outputs +wire soc_alt_mode; // ALT MODE = UART +wire soc_uart_rxd_i; // UART RXD +wire soc_uart_txd_o; // UART TXD +wire soc_swd_mode; // SWD mode +wire soc_swd_clk_i; // SWDCLK +wire soc_swd_dio_i; // SWDIO tristate input +wire soc_swd_dio_o; // SWDIO trstate output +wire soc_swd_dio_e; // SWDIO tristate output enable +wire soc_swd_dio_z; // SWDIO tristate output hiz +wire [15:0] soc_gpio_port0_i; // GPIO SOC tristate input +wire [15:0] soc_gpio_port0_o; // GPIO SOC trstate output +wire [15:0] soc_gpio_port0_e; // GPIO SOC tristate output enable +wire [15:0] soc_gpio_port0_z; // GPIO SOC tristate output hiz +wire [15:0] soc_gpio_port1_i; // GPIO SOC tristate input +wire [15:0] soc_gpio_port1_o; // GPIO SOC trstate output +wire [15:0] soc_gpio_port1_e; // GPIO SOC tristate output enable +wire [15:0] soc_gpio_port1_z; // GPIO SOC tristate output hiz + +wire pad_se_i; + + +// connect up high order GPIOs +assign soc_gpio_port0_i[15:GPIO_TIO] = pad_gpio_port0_i[15:GPIO_TIO]; +assign pad_gpio_port0_o[15:GPIO_TIO] = soc_gpio_port0_o[15:GPIO_TIO]; +assign pad_gpio_port0_e[15:GPIO_TIO] = soc_gpio_port0_e[15:GPIO_TIO]; +assign pad_gpio_port0_z[15:GPIO_TIO] = soc_gpio_port0_z[15:GPIO_TIO]; +assign soc_gpio_port1_i[15:GPIO_TIO] = pad_gpio_port1_i[15:GPIO_TIO]; +assign pad_gpio_port1_o[15:GPIO_TIO] = soc_gpio_port1_o[15:GPIO_TIO]; +assign pad_gpio_port1_e[15:GPIO_TIO] = soc_gpio_port1_e[15:GPIO_TIO]; +assign pad_gpio_port1_z[15:GPIO_TIO] = soc_gpio_port1_z[15:GPIO_TIO]; + +wire tiehi = 1'b1; +wire tielo = 1'b0; + +nanosoc_chip_cfg #( + .GPIO_TIO (GPIO_TIO) + ) + u_nanosoc_chip_cfg + ( + // Primary Inputs + .pad_clk_i (pad_clk_i ) + ,.pad_nrst_i (pad_nrst_i ) + ,.pad_test_i (pad_test_i ) + // Alternate/reconfigurable IP and associated bidirectional I/O + ,.pad_altin_i (pad_se_i ) // SWCLK/UARTRXD/SCAN-ENABLE + ,.pad_altio_i (pad_swdio_i ) // SWDIO/UARTTXD tristate input + ,.pad_altio_o (pad_swdio_o ) // SWDIO/UARTTXD trstate output + ,.pad_altio_e (pad_swdio_e ) // SWDIO/UARTTXD tristate output enable + ,.pad_altio_z (pad_swdio_z ) // SWDIO/UARTTXD tristate output hiz + // Reconfigurable General Purpose bidirectional I/Os Port-0 (user) + ,.pad_gpio_port0_i (pad_gpio_port0_i[GPIO_TIO-1:0]) // GPIO PAD tristate input + ,.pad_gpio_port0_o (pad_gpio_port0_o[GPIO_TIO-1:0]) // GPIO PAD trstate output + ,.pad_gpio_port0_e (pad_gpio_port0_e[GPIO_TIO-1:0]) // GPIO PAD tristate output enable + ,.pad_gpio_port0_z (pad_gpio_port0_z[GPIO_TIO-1:0]) // GPIO PAD tristate output hiz + // Reconfigurable General Purpose bidirectional I/Os Port-1 (system) + ,.pad_gpio_port1_i (pad_gpio_port1_i[GPIO_TIO-1:0]) // GPIO PAD tristate input + ,.pad_gpio_port1_o (pad_gpio_port1_o[GPIO_TIO-1:0]) // GPIO PAD trstate output + ,.pad_gpio_port1_e (pad_gpio_port1_e[GPIO_TIO-1:0]) // GPIO PAD tristate output enable + ,.pad_gpio_port1_z (pad_gpio_port1_z[GPIO_TIO-1:0]) // GPIO PAD tristate output hiz + //SOC + ,.soc_nreset (soc_nreset ) + ,.soc_diag_mode (soc_diag_mode ) + ,.soc_diag_ctrl (soc_diag_ctrl ) + ,.soc_scan_mode (soc_scan_mode ) + ,.soc_scan_enable (soc_scan_enable ) + ,.soc_scan_in (soc_scan_in ) // soc test scan chain inputs + ,.soc_scan_out (soc_scan_out ) // soc test scan chain outputs + ,.soc_bist_mode (soc_bist_mode ) + ,.soc_bist_enable (soc_bist_enable ) + ,.soc_bist_in (soc_bist_in ) // soc bist control inputs + ,.soc_bist_out (soc_bist_out ) // soc test status outputs + ,.soc_alt_mode (soc_alt_mode )// ALT MODE = UART + ,.soc_uart_rxd_i (soc_uart_rxd_i ) // UART RXD + ,.soc_uart_txd_o (soc_uart_txd_o ) // UART TXD + ,.soc_swd_mode (soc_swd_mode ) // SWD mode + ,.soc_swd_clk_i (soc_swd_clk_i ) // SWDCLK + ,.soc_swd_dio_i (soc_swd_dio_i ) // SWDIO tristate input + ,.soc_swd_dio_o (soc_swd_dio_o ) // SWDIO trstate output + ,.soc_swd_dio_e (soc_swd_dio_e ) // SWDIO tristate output enable + ,.soc_swd_dio_z (soc_swd_dio_z ) // SWDIO tristate output hiz + ,.soc_gpio_port0_i (soc_gpio_port0_i[GPIO_TIO-1:0]) // GPIO SOC tristate input + ,.soc_gpio_port0_o (soc_gpio_port0_o[GPIO_TIO-1:0]) // GPIO SOC trstate output + ,.soc_gpio_port0_e (soc_gpio_port0_e[GPIO_TIO-1:0]) // GPIO SOC tristate output enable + ,.soc_gpio_port0_z (soc_gpio_port0_z[GPIO_TIO-1:0]) // GPIO SOC tristate output hiz + ,.soc_gpio_port1_i (soc_gpio_port1_i[GPIO_TIO-1:0]) // GPIO SOC tristate input + ,.soc_gpio_port1_o (soc_gpio_port1_o[GPIO_TIO-1:0]) // GPIO SOC trstate output + ,.soc_gpio_port1_e (soc_gpio_port1_e[GPIO_TIO-1:0]) // GPIO SOC tristate output enable + ,.soc_gpio_port1_z (soc_gpio_port1_z[GPIO_TIO-1:0]) // GPIO SOC tristate output hiz +); + + // -------------------------------------------------------------------------------- + // Cortex-M0 nanosoc Microcontroller + // -------------------------------------------------------------------------------- + + nanosoc_chip u_nanosoc_chip ( +`ifdef POWER_PINS + .VDD (VDD), + .VSS (VSS), + .VDDACC (VDDACC), +`endif +//`ifdef ASIC_TEST_PORTS + .diag_mode (soc_diag_mode ), + .diag_ctrl (soc_diag_ctrl ), + .scan_mode (soc_scan_mode ), + .scan_enable (soc_scan_enable ), + .scan_in (soc_scan_in ), // soc test scan chain inputs + .scan_out (soc_scan_out ), // soc test scan chain outputs + .bist_mode (soc_bist_mode ), + .bist_enable (soc_bist_enable ), + .bist_in (soc_bist_in ), // soc bist control inputs + .bist_out (soc_bist_out ), // soc test status outputs + .alt_mode (soc_alt_mode ),// ALT MODE = UART + .uart_rxd_i (soc_uart_rxd_i ), // UART RXD + .uart_txd_o (soc_uart_txd_o ), // UART TXD + .swd_mode (soc_swd_mode ), // SWD mode +//`endif + .clk_i (pad_clk_i), + .test_i (soc_scan_mode), //(test_i), + .nrst_i (soc_nreset), //(nrst_i), + .p0_i (soc_gpio_port0_i), // level-shifted input from pad + .p0_o (soc_gpio_port0_o), // output port drive + .p0_e (soc_gpio_port0_e), // active high output drive enable (pad tech dependent) + .p0_z (soc_gpio_port0_z), // active low output drive enable (pad tech dependent) + .p1_i (soc_gpio_port1_i), // level-shifted input from pad + .p1_o (soc_gpio_port1_o), // output port drive + .p1_e (soc_gpio_port1_e), // active high output drive enable (pad tech dependent) + .p1_z (soc_gpio_port1_z), // active low output drive enable (pad tech dependent) + .swdio_i (soc_swd_dio_i), + .swdio_o (soc_swd_dio_o), + .swdio_e (soc_swd_dio_e), + .swdio_z (soc_swd_dio_z), + .swdclk_i (pad_swdclk_i) + ); + + + // -------------------------------------------------------------------------------- + // IO pad (GLIB Generic Library napping) + // -------------------------------------------------------------------------------- + +`ifdef POWER_PINS +// Pad IO power supplies + +PAD_VDDIO uPAD_VDDIO_1( + .PAD(VDDIO) + ); + +PAD_VSSIO uPAD_VSSIO_1( + .PAD(VSSIO) + ); + +// Core power supplies + +PAD_VDDSOC uPAD_VDD_1( + .PAD(VDD) + ); + +PAD_VSS uPAD_VSS_1( + .PAD(VSS) + ); + +// Accelerator Power supplies +PAD_VDDSOC uPAD_VDDACC_1( + .PAD(VDDACC) + ); +`endif + +// Clock, Reset and Serial Wire Debug ports + +PAD_INOUT8MA_NOE uPAD_SE_I ( + .PAD (SE), + .O (tielo), + .I (pad_se_i), + .NOE (tiehi) + ); + +PAD_INOUT8MA_NOE uPAD_CLK_I ( + .PAD (CLK), + .O (tielo), + .I (pad_clk_i), + .NOE (tiehi) + ); + +PAD_INOUT8MA_NOE uPAD_XTAL_I ( + .PAD (TEST), + .O (tielo), + .I (pad_test_i), + .NOE (tiehi) + ); + +PAD_INOUT8MA_NOE uPAD_NRST_I ( + .PAD (NRST), + .O (tielo), + .I (pad_nrst_i), + .NOE (tiehi) + ); + +PAD_INOUT8MA_NOE uPAD_SWDIO_IO ( + .PAD (SWDIO), + .O (pad_swdio_o), + .I (pad_swdio_i), + .NOE (pad_swdio_z) + ); + +PAD_INOUT8MA_NOE uPAD_SWDCK_I ( + .PAD (SWDCK), + .O (tielo), + .I (pad_swdclk_i), + .NOE (tiehi) + ); + +// GPI.I Port 0 x 16 + +PAD_INOUT8MA_NOE uPAD_P0_00 ( + .PAD (P0[00]), + .O (pad_gpio_port0_o[00]), + .I (pad_gpio_port0_i[00]), + .NOE (pad_gpio_port0_z[00]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_01 ( + .PAD (P0[01]), + .O (pad_gpio_port0_o[01]), + .I (pad_gpio_port0_i[01]), + .NOE (pad_gpio_port0_z[01]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_02 ( + .PAD (P0[02]), + .O (pad_gpio_port0_o[02]), + .I (pad_gpio_port0_i[02]), + .NOE (pad_gpio_port0_z[02]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_03 ( + .PAD (P0[03]), + .O (pad_gpio_port0_o[03]), + .I (pad_gpio_port0_i[03]), + .NOE (pad_gpio_port0_z[03]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_04 ( + .PAD (P0[04]), + .O (pad_gpio_port0_o[04]), + .I (pad_gpio_port0_i[04]), + .NOE (pad_gpio_port0_z[04]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_05 ( + .PAD (P0[05]), + .O (pad_gpio_port0_o[05]), + .I (pad_gpio_port0_i[05]), + .NOE (pad_gpio_port0_z[05]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_06 ( + .PAD (P0[06]), + .O (pad_gpio_port0_o[06]), + .I (pad_gpio_port0_i[06]), + .NOE (pad_gpio_port0_z[06]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_07 ( + .PAD (P0[07]), + .O (pad_gpio_port0_o[07]), + .I (pad_gpio_port0_i[07]), + .NOE (pad_gpio_port0_z[07]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_08 ( + .PAD (P0[08]), + .O (pad_gpio_port0_o[08]), + .I (pad_gpio_port0_i[08]), + .NOE (pad_gpio_port0_z[08]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_09 ( + .PAD (P0[09]), + .O (pad_gpio_port0_o[09]), + .I (pad_gpio_port0_i[09]), + .NOE (pad_gpio_port0_z[09]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_10 ( + .PAD (P0[10]), + .O (pad_gpio_port0_o[10]), + .I (pad_gpio_port0_i[10]), + .NOE (pad_gpio_port0_z[10]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_11 ( + .PAD (P0[11]), + .O (pad_gpio_port0_o[11]), + .I (pad_gpio_port0_i[11]), + .NOE (pad_gpio_port0_z[11]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_12 ( + .PAD (P0[12]), + .O (pad_gpio_port0_o[12]), + .I (pad_gpio_port0_i[12]), + .NOE (pad_gpio_port0_z[12]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_13 ( + .PAD (P0[13]), + .O (pad_gpio_port0_o[13]), + .I (pad_gpio_port0_i[13]), + .NOE (pad_gpio_port0_z[13]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_14 ( + .PAD (P0[14]), + .O (pad_gpio_port0_o[14]), + .I (pad_gpio_port0_i[14]), + .NOE (pad_gpio_port0_z[14]) + ); + +PAD_INOUT8MA_NOE uPAD_P0_15 ( + .PAD (P0[15]), + .O (pad_gpio_port0_o[15]), + .I (pad_gpio_port0_i[15]), + .NOE (pad_gpio_port0_z[15]) + ); + +// GPI.I Port 1 x 16 + +PAD_INOUT8MA_NOE uPAD_P1_00 ( + .PAD (P1[00]), + .O (pad_gpio_port1_o[00]), + .I (pad_gpio_port1_i[00]), + .NOE (pad_gpio_port1_z[00]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_01 ( + .PAD (P1[01]), + .O (pad_gpio_port1_o[01]), + .I (pad_gpio_port1_i[01]), + .NOE (pad_gpio_port1_z[01]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_02 ( + .PAD (P1[02]), + .O (pad_gpio_port1_o[02]), + .I (pad_gpio_port1_i[02]), + .NOE (pad_gpio_port1_z[02]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_03 ( + .PAD (P1[03]), + .O (pad_gpio_port1_o[03]), + .I (pad_gpio_port1_i[03]), + .NOE (pad_gpio_port1_z[03]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_04 ( + .PAD (P1[04]), + .O (pad_gpio_port1_o[04]), + .I (pad_gpio_port1_i[04]), + .NOE (pad_gpio_port1_z[04]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_05 ( + .PAD (P1[05]), + .O (pad_gpio_port1_o[05]), + .I (pad_gpio_port1_i[05]), + .NOE (pad_gpio_port1_z[05]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_06 ( + .PAD (P1[06]), + .O (pad_gpio_port1_o[06]), + .I (pad_gpio_port1_i[06]), + .NOE (pad_gpio_port1_z[06]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_07 ( + .PAD (P1[07]), + .O (pad_gpio_port1_o[07]), + .I (pad_gpio_port1_i[07]), + .NOE (pad_gpio_port1_z[07]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_08 ( + .PAD (P1[08]), + .O (pad_gpio_port1_o[08]), + .I (pad_gpio_port1_i[08]), + .NOE (pad_gpio_port1_z[08]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_09 ( + .PAD (P1[09]), + .O (pad_gpio_port1_o[09]), + .I (pad_gpio_port1_i[09]), + .NOE (pad_gpio_port1_z[09]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_10 ( + .PAD (P1[10]), + .O (pad_gpio_port1_o[10]), + .I (pad_gpio_port1_i[10]), + .NOE (pad_gpio_port1_z[10]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_11 ( + .PAD (P1[11]), + .O (pad_gpio_port1_o[11]), + .I (pad_gpio_port1_i[11]), + .NOE (pad_gpio_port1_z[11]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_12 ( + .PAD (P1[12]), + .O (pad_gpio_port1_o[12]), + .I (pad_gpio_port1_i[12]), + .NOE (pad_gpio_port1_z[12]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_13 ( + .PAD (P1[13]), + .O (pad_gpio_port1_o[13]), + .I (pad_gpio_port1_i[13]), + .NOE (pad_gpio_port1_z[13]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_14 ( + .PAD (P1[14]), + .O (pad_gpio_port1_o[14]), + .I (pad_gpio_port1_i[14]), + .NOE (pad_gpio_port1_z[14]) + ); + +PAD_INOUT8MA_NOE uPAD_P1_15 ( + .PAD (P1[15]), + .O (pad_gpio_port1_o[15]), + .I (pad_gpio_port1_i[15]), + .NOE (pad_gpio_port1_z[15]) + ); + +endmodule diff --git a/flist/nanosoc_ASIC.flist b/flist/nanosoc_ASIC.flist index 1fe143c29dd81106062ff6b6381193db8f6b98fe..cdfddfdd04a1d65f9781f0ce923cb83df438ad44 100644 --- a/flist/nanosoc_ASIC.flist +++ b/flist/nanosoc_ASIC.flist @@ -22,6 +22,10 @@ // $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/nanosoc_chip_pads/tsmc65lp/nanosoc_chip_pads_44pin.v // $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/nanosoc_chip_pads/tsmc65lp/nanosoc_chip_pads_60pin.v +$(SOCLABS_NANOSOC_TECH_DIR)/extio8x4-axis/rtl/extio8x4_axis_initiator.v +$(SOCLABS_NANOSOC_TECH_DIR)/extio8x4-axis/rtl/extio8x4_ifsm.v +$(SOCLABS_NANOSOC_TECH_DIR)/extio8x4-axis/rtl/extio8x4_sync.v + // Include NanoSoC IP -f $(SOCLABS_NANOSOC_TECH_DIR)/flist/nanosoc_ip.flist