set ::env(USER_ROOT) "/home/dinesha/workarea/opencore/git/riscduino" | |
#set ::env(CARAVEL_ROOT) "/home/dinesha/workarea/efabless/MPW-4/caravel_openframe" | |
#set ::env(CARAVEL_PDK_ROOT) "/opt/pdk_mpw4" | |
set ::env(CARAVEL_ROOT) "/home/dinesha/workarea/efabless/MPW-5/caravel" | |
set ::env(CARAVEL_PDK_ROOT) "/opt/pdk_mpw4" | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__tt_025C_1v80.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/lib/sky130_sram_2kbyte_1rw1r_32x512_8_TT_1p8V_25C.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/lib/sky130_sram_1kbyte_1rw1r_32x256_8_TT_1p8V_25C.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hvl/lib/sky130_fd_sc_hvl__tt_025C_3v30.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hvl/lib/sky130_fd_sc_hvl__tt_025C_3v30_lv1v80.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_gpiov2_tt_tt_025C_1v80_3v30.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_hvc_wpad_tt_025C_1v80_3v30_3v30.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_lvc_wpad_tt_025C_1v80_3v30.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_lvc_wpad_tt_100C_1v80_3v30.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_power_lvc_wpad_tt_025C_1v80_3v30_3v30.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_xres4v2_tt_tt_025C_1v80_3v30.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_tt_tt_025C_1v80_3v30.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vdda_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssa_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_tt_025C_1v80_3v30.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_tt_025C_1v80_3v30_3v30.lib | |
read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_tt_025C_1v80_3v30.lib | |
# User project netlist | |
read_verilog $::env(USER_ROOT)/verilog/gl/yifive.v | |
link_design ycr1_top_wb | |
## User Project Spef | |
read_spef $::env(USER_ROOT)/spef/ycr1_top_wb.spef | |
read_sdc -echo ./sdc/yifive.sdc | |
set_propagated_clock [all_clocks] | |
check_setup -verbose > unconstraints.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -format full_clock_expanded -group_count 50 | |
report_checks -path_delay max -fields {slew cap input nets fanout} -format full_clock_expanded -group_count 50 | |
report_worst_slack -max | |
report_worst_slack -min | |
report_checks -path_delay min -fields {slew cap input nets fanout} -format full_clock_expanded -slack_max 0.18 -group_count 10 | |
report_check_types -max_slew -max_capacitance -max_fanout -violators > slew.cap.fanout.vio.rpt | |
#Min Delay check around DFFRAM | |
echo "DFFRAM Interface Min Timing.................." > dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through tcm_dffram_wmask0[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through tcm_dffram_cs0 >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through tcm_dffram_din0[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through tcm_dffram_addr0[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through tcm_dffram_dout0[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through tcm_dffram_wmask1[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through tcm_dffram_cs1 >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through tcm_dffram_din1[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through tcm_dffram_addr1[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through tcm_dffram_dout1[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through icache_dffram_wmask0[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through icache_dffram_cs0 >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through icache_dffram_din0[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through icache_dffram_addr0[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through icache_dffram_dout0[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through icache_dffram_wmask1[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through icache_dffram_cs1 >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through icache_dffram_din1[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through icache_dffram_addr1[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through icache_dffram_dout1[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through dcache_dffram_wmask0[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through dcache_dffram_cs0 >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through dcache_dffram_din0[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through dcache_dffram_addr0[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through dcache_dffram_dout0[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through dcache_dffram_wmask1[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through dcache_dffram_cs1 >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through dcache_dffram_din1[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through dcache_dffram_addr1[*] >> dffram.min.rpt | |
report_checks -path_delay min -fields {slew cap input nets fanout} -through dcache_dffram_dout1[*] >> dffram.min.rpt | |
#Max Delay check around DFFRAM | |
echo "DFFRAM Interface Max Timing.................." > dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through tcm_dffram_wmask0[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through tcm_dffram_cs0 >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through tcm_dffram_din0[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through tcm_dffram_addr0[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through tcm_dffram_dout0[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through tcm_dffram_wmask1[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through tcm_dffram_cs1 >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through tcm_dffram_din1[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through tcm_dffram_addr1[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through tcm_dffram_dout1[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through icache_dffram_wmask0[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through icache_dffram_cs0 >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through icache_dffram_din0[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through icache_dffram_addr0[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through icache_dffram_dout0[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through icache_dffram_wmask1[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through icache_dffram_cs1 >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through icache_dffram_din1[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through icache_dffram_addr1[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through icache_dffram_dout1[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through dcache_dffram_wmask0[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through dcache_dffram_cs0 >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through dcache_dffram_din0[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through dcache_dffram_addr0[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through dcache_dffram_dout0[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through dcache_dffram_wmask1[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through dcache_dffram_cs1 >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through dcache_dffram_din1[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through dcache_dffram_addr1[*] >> dffram.max.rpt | |
report_checks -path_delay max -fields {slew cap input nets fanout} -through dcache_dffram_dout1[*] >> dffram.max.rpt |