compile.tcl
上传用户:aoptech
上传日期:2014-09-22
资源大小:784k
文件大小:4k
源码类别:

3G开发

开发平台:

Others

  1. echo ${DESIGN}
  2. echo ${SDC}
  3. echo ${WORKDIR}
  4. echo ${VFILES}
  5. echo ${DONTTOUCH}
  6. echo ${CLKPERIOD}
  7. # ---------------------------------------------
  8. # Setting up cell libs 
  9. # ---------------------------------------- 
  10. source libs.tcl
  11. # adding verilog files to search path
  12. # ----------------------------------------
  13. #lappend search_path ${SEARCHPATH}
  14. # info for formal verification
  15. #set_svf ${DESIGN}.svf
  16. # Setting DC ultra Optimization
  17. # ----------------------------------------
  18. set_ultra_optimization true
  19. set synlib_prefer_ultra_license true
  20. set synlib_enable_dpgen true
  21. set synlib_dwgen_smart_generation true
  22. set compile_new_boolean_structure true
  23. set compile_new_optimization true
  24. set_clock_gating_style -sequential_cell latch 
  25.                        -minimum_bitwidth 4 
  26.                        -control_point before 
  27.                        -control_signal scan_enable
  28. #if {${DDCFILES} != ""} {
  29. #    read_file -format ddc ${DDCFILES} 
  30. #}
  31. # Analyzing Design 
  32. # ---------------------------------------
  33. analyze -library ${WORKDIR} -format verilog ${VFILES}
  34. # Elabourating Design
  35. # --------------------------------------- 
  36. elaborate ${DESIGN} -architecture verilog -library ${WORKDIR}
  37. check_design > ${DESIGN}.check
  38. # Setting Don't Touch  
  39. # ---------------------------------------
  40. if {${DONTTOUCH} != {}} {
  41.     set_dont_touch ${DONTTOUCH}
  42. }
  43. # dont touch pads or power/ground nets
  44. #set_dont_touch [get_cells PI*]
  45. #set_dont_touch [get_nets VDD*]
  46. #set_dont_touch [get_nets VSS]
  47. uniquify
  48. if {${DONTTOUCH} != ""} {
  49.     set dont_touch_star_list {}
  50.     foreach design ${DONTTOUCH} {lappend dont_touch_star_list "${design}*"} 
  51.     set_dont_touch [find design -hierarchy ${dont_touch_star_list}]
  52. }
  53. read_sdc ${SDC}
  54. source ${SDC}
  55. # no scan for now
  56. #set_scan_configuration -style none
  57. create_clock CLK -name CLK -period ${CLKPERIOD}
  58. # Setting buffering margins (for PAR)
  59. # ---------------------------------------
  60. set_clock_uncertainty -setup [expr 0.025 * ${CLKPERIOD}]  [get_clocks] 
  61. set_critical_range [expr 0.02 * ${CLKPERIOD}] ${DESIGN} 
  62. #insert_clock_gating -global
  63. #propagate_constraints -gate_clock
  64. # Creating Clock
  65. # ---------------------------------------
  66. # create_clock CLK -name CLK -period ${CLKPERIOD}create_clock CLK -name CLK -period ${CLKPERIOD}
  67. # Combinational Design constraint
  68. # -------------------------------------
  69.  set_max_delay ${CLKPERIOD} -to [all_outputs] -from [all_inputs]
  70.  set_flatten -phase true -effort high
  71. # This constrainst sets the load capacitance in picofarads of the
  72. # output pins of your design. 4fF is reasonable if your design is
  73. # driving another block of on-chip logic.
  74. set_load -pin_load 0.004 [all_outputs]
  75. # Compiling Design
  76. #------------------------------------   
  77. set compile_auto_ungroup_delay_num_cells 100
  78. set_max_area 0
  79. compile -incremental_mapping 
  80.         -map_effort high 
  81.         -boundary_optimization 
  82.         -area_effort high 
  83.         -auto_ungroup area
  84. #report_auto_ungroup
  85. # Final Uniquify                                      
  86. # ---------------------------------------   
  87. #final uniquify of dont_touch designs
  88.  if {${DONTTOUCH} != ""} {
  89.     set_dont_touch ${DONTTOUCH} false
  90.     uniquify
  91. }
  92. change_names -rules verilog -hierarchy -verbose
  93. # use case-insesitives names to avoid confusing CAD tools (calibre)
  94. define_name_rules insens -case_insensitive
  95. change_names -rules insens -hierarchy -verbose
  96. # outputting Gate-level Design
  97. # ---------------------------------------
  98. write -format verilog -hierarchy -output ${DESIGN}_syn.v 
  99. # outputting DDC File
  100. # ---------------------------------------      
  101. write -format ddc -hierarchy -output ${DESIGN}.ddc
  102. # outputting SDC File
  103. # ---------------------------------------
  104. write_sdc ${DESIGN}_out.sdc
  105. # Timing/Area Reports
  106. # ---------------------------------------
  107. exec mkdir reports
  108. cd reports
  109. report_timing -capacitance 
  110.               -transition_time 
  111.               -nosplit 
  112.               -nworst 10 
  113.               -max_paths 100 
  114.        > ${DESIGN}.timing
  115. report_reference -nosplit > ${DESIGN}.area
  116. report_resources -nosplit > ${DESIGN}.resources
  117. report_power -nosplit -hier > ${DESIGN}.power
  118. set cells [get_cells -hierarchical -filter "is_hierarchical == true"]
  119. set zcells [sort_collection $cells { full_name }]
  120. foreach_in_collection eachcell $zcells {
  121.   current_instance $eachcell
  122.   report_reference -nosplit >> ${DESIGN}.area
  123.   report_resources -nosplit >> ${DESIGN}.resources
  124. }
  125. exit