mirror of
https://github.com/lcbcFoo/ReonV.git
synced 2025-04-23 13:07:08 -04:00
216 lines
No EOL
12 KiB
Tcl
216 lines
No EOL
12 KiB
Tcl
#################################################################################
|
|
# LEON3-ASIC Create reports scripts
|
|
#
|
|
# This file generates the following reports and files:
|
|
#
|
|
# 1. Timing
|
|
# General Timing
|
|
# SPW IO timing
|
|
# JTAG
|
|
# UART
|
|
# I2C
|
|
# SPI
|
|
# GPIO
|
|
# DSU
|
|
# MCTRL
|
|
# Clock Domain Crossings
|
|
# 2. Area
|
|
# General Area
|
|
# 3. Power
|
|
# Test Case power report
|
|
# 4. Clock Gating
|
|
# Clock gating status and coverage
|
|
# 5. Constraint checks
|
|
# 6. Design DRC Violations
|
|
# 7. Case Analysis in design
|
|
#
|
|
#################################################################################
|
|
|
|
#################################################################################
|
|
# Report setup for Leon3 ASIC Ref Design
|
|
#################################################################################
|
|
|
|
# Select to use scan mode
|
|
if { ![info exists use_scan_clk] } {
|
|
echo "Info: Normal Functional mode clocks"
|
|
set use_scan_clk 0
|
|
} else {
|
|
if { $use_scan_clk == 0 } {
|
|
echo "Info: Normal Functional mode clocks"
|
|
} else {
|
|
echo "Info: Scan mode clocks"
|
|
}
|
|
}
|
|
|
|
# Select to ignore io timing (only use for debug and area)
|
|
if { ![info exists ignore_io_timing] } {
|
|
set ignore_io_timing 0
|
|
} else {
|
|
if { $ignore_io_timing == 1 } {
|
|
echo "Warning: No IO Constraints set for the design"
|
|
}
|
|
}
|
|
|
|
### create dir
|
|
sh mkdir -p synopsys/$report_run
|
|
set report_dir synopsys/$report_run
|
|
|
|
#################################################################################
|
|
# Start Report timing for Leon3 ASIC Ref Design
|
|
#################################################################################
|
|
|
|
### Report Quality of Result
|
|
echo "Info: Generate QoR Reports"
|
|
report_qor -summary > $report_dir/qor_$report_run.log
|
|
|
|
### Check for Design Errors
|
|
echo "Info: Generate Design Error Reports"
|
|
check_design -summary > $report_dir/check_design_$report_run.log
|
|
|
|
### Check Clock gating in design
|
|
echo "Info: Generate Clock Gate Reports"
|
|
report_clock_gating -multi_stage -nosplit > $report_dir/clockgate_$report_run.log
|
|
|
|
### General timing report
|
|
echo "Info: Generate General Timing Reports"
|
|
report_timing -transition_time -capacitance -nosplit -delay max > $report_dir/timing_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -delay min >> $report_dir/timing_$report_run.log
|
|
|
|
### IO timing
|
|
if { $ignore_io_timing == 0 } {
|
|
echo "Info: Generate IO Timing Reports"
|
|
|
|
# SPW CMOS interface
|
|
echo "Info: Generate SPW CMOS IO Timing Reports"
|
|
for { set port 0 } { $port <= 2 } { incr port } {
|
|
report_timing -transition_time -capacitance -nosplit -unique -to [get_ports spw_txd[$port]] -delay max > $report_dir/spw_port_${port}_${report_run}.log
|
|
report_timing -transition_time -capacitance -nosplit -unique -from [get_ports spw_rxd[$port]] -delay max >> $report_dir/spw_port_${port}_${report_run}.log
|
|
report_timing -transition_time -capacitance -nosplit -unique -to [get_ports spw_txs[$port]] -delay max >> $report_dir/spw_port_${port}_${report_run}.log
|
|
report_timing -transition_time -capacitance -nosplit -unique -from [get_ports spw_rxs[$port]] -delay max >> $report_dir/spw_port_${port}_${report_run}.log
|
|
report_timing -transition_time -capacitance -nosplit -unique -to [get_ports spw_txd[$port]] -delay min >> $report_dir/spw_port_${port}_${report_run}.log
|
|
report_timing -transition_time -capacitance -nosplit -unique -from [get_ports spw_rxd[$port]] -delay min >> $report_dir/spw_port_${port}_${report_run}.log
|
|
report_timing -transition_time -capacitance -nosplit -unique -to [get_ports spw_txs[$port]] -delay min >> $report_dir/spw_port_${port}_${report_run}.log
|
|
report_timing -transition_time -capacitance -nosplit -unique -from [get_ports spw_rxs[$port]] -delay min >> $report_dir/spw_port_${port}_${report_run}.log
|
|
}
|
|
|
|
# JTAG
|
|
echo "Info: Generate JTAG IO Timing Reports"
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports tdo] > $report_dir/jtag_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports tck] >> $report_dir/jtag_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports tms] >> $report_dir/jtag_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports tdi] >> $report_dir/jtag_$report_run.log
|
|
|
|
# UART
|
|
echo "Info: Generate UART IO Timing Reports"
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports txd1] > $report_dir/uart1_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports rxd1] >> $report_dir/uart1_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports txd2] > $report_dir/uart2_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports rxd2] >> $report_dir/uart2_$report_run.log
|
|
|
|
### I2C
|
|
echo "Info: Generate I2C IO Timing Reports"
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports i2c_scl] > $report_dir/i2c_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports i2c_scl] >> $report_dir/i2c_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports i2c_sda] >> $report_dir/i2c_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports i2c_sda] >> $report_dir/i2c_$report_run.log
|
|
|
|
# SPI
|
|
echo "Info: Generate SPI IO Timing Reports"
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports spi_miso ] > $report_dir/spi_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports spi_mosi ] >> $report_dir/spi_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports spi_sck ] >> $report_dir/spi_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports spi_slvsel] >> $report_dir/spi_$report_run.log
|
|
|
|
# GPIO
|
|
echo "Info: Generate GPIO IO Timing Reports"
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports gpio[0]] > $report_dir/gpio_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports gpio[0]] >> $report_dir/gpio_$report_run.log
|
|
for { set port 1 } { $port <= 15 } { incr port } {
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports gpio[$port]] >> $report_dir/gpio_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports gpio[$port]] >> $report_dir/gpio_$report_run.log
|
|
}
|
|
|
|
### DSU
|
|
echo "Info: Generate DSU IO Timing Reports"
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports dsutx] > $report_dir/dsu_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports dsuact] >> $report_dir/dsu_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports dsurx] >> $report_dir/dsu_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports dsuen] >> $report_dir/dsu_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports dsubre] >> $report_dir/dsu_$report_run.log
|
|
|
|
### PROM/SRAM/SDRAM Interface
|
|
echo "Info: Generate MCTRL IO Timing Reports"
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports sdclk ] > $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports data ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports cb ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports data ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -to [get_ports cb ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports brdyn ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports bexcn ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports address] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports sdcsn ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports sdwen ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports sdrasn ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports sdcasn ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports sddqm ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports ramsn ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports ramoen ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports rwen ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports oen ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports writen ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports read ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports iosn ] >> $report_dir/mctrl_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [get_ports romsn ] >> $report_dir/mctrl_$report_run.log
|
|
}
|
|
|
|
### Check clock domain crossings
|
|
echo "Info: Generate Clock Domain Crossings Timing Reports"
|
|
if { $use_scan_clk == 0 } {
|
|
echo "Info: Check clock domain crossings"
|
|
report_timing -transition_time -capacitance -nosplit -from [all_registers -clock clk -clock_pins] -to [all_registers -clock spwclk -data_pins] > $report_dir/cdc_spw_paths_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [all_registers -clock spwclk -clock_pins] -to [all_registers -clock clk -data_pins] > $report_dir/cdc_spw_paths_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [all_registers -clock clk -clock_pins] -to [all_registers -clock tck -data_pins] >> $report_dir/cdc_jtag_paths_$report_run.log
|
|
report_timing -transition_time -capacitance -nosplit -from [all_registers -clock tck -clock_pins] -to [all_registers -clock clk -data_pins] >> $report_dir/cdc_jtag_paths_$report_run.log
|
|
}
|
|
|
|
### Area
|
|
echo "Info: Check Design Area"
|
|
report_area -all > $report_dir/area_all_$report_run.log
|
|
report_area -hierarchy > $report_dir/area_hier_$report_run.log
|
|
|
|
### Clock gating
|
|
echo "Info: Check Clock Gating"
|
|
report_clock_gating -style -multi_stage -ungated > $report_dir/clockgating_$report_run.log
|
|
|
|
### Constraints
|
|
echo "Info: Check constraints"
|
|
report_constraints -all_violators > $report_dir/check_constraints_$report_run.log
|
|
|
|
### Check design
|
|
echo "Info: Check Design"
|
|
check_design > $report_dir/check_design_$report_run.log
|
|
|
|
### Report dont touch nets
|
|
report_dont_touch > $report_dir/dont_touch_$report_run.log
|
|
|
|
### Report size only cells
|
|
report_size_only > $report_dir/size_only_$report_run.log
|
|
|
|
### Summary report of the design and cells used etc
|
|
report_design > $report_dir/report_design_$report_run.log
|
|
|
|
### Report blocks instantiated etc.
|
|
report_reference -hierarchy > $report_dir/report_reference_$report_run.log
|
|
|
|
### Checks for possible timing problems in the current design.
|
|
check_timing -include {unconstrained_endpoints} > $report_dir/check_timing_$report_run.log
|
|
|
|
### Displays minimum pulse width check information about specified sequential device clock pins.
|
|
report_min_pulse_width -all_violators > $report_dir/report_min_pulse_width_$report_run.log
|
|
|
|
### Case analysis
|
|
# - Writes sdc files for case analysis in PrimeTime
|
|
# - Only test for worst paths.
|
|
# - SCAN test case anlysis has been moved to external script to be able to create new timing constrints for scan.
|
|
|
|
# TODO |