diff options
Diffstat (limited to 'picorv32/scripts/vivado/tabtest.sh')
-rw-r--r-- | picorv32/scripts/vivado/tabtest.sh | 103 |
1 files changed, 0 insertions, 103 deletions
diff --git a/picorv32/scripts/vivado/tabtest.sh b/picorv32/scripts/vivado/tabtest.sh deleted file mode 100644 index bc3d840..0000000 --- a/picorv32/scripts/vivado/tabtest.sh +++ /dev/null @@ -1,103 +0,0 @@ -#!/bin/bash - -set -e -read _ ip dev grade _ < <( echo $* | tr '_/' ' '; ) - -# rm -rf tab_${ip}_${dev}_${grade} -mkdir -p tab_${ip}_${dev}_${grade} -cd tab_${ip}_${dev}_${grade} - -best_speed=99 -speed=20 -step=16 - -synth_case() { - if [ -f test_${1}.txt ]; then - echo "Reusing cached tab_${ip}_${dev}_${grade}/test_${1}." - return - fi - - case "${dev}" in - xc7k) xl_device="xc7k70t-fbg676-${grade}" ;; - xc7v) xl_device="xc7v585t-ffg1761-${grade}" ;; - xcku) xl_device="xcku035-fbva676-${grade}-e" ;; - xcvu) xl_device="xcvu065-ffvc1517-${grade}-e" ;; - xckup) xl_device="xcku3p-ffva676-${grade}-e" ;; - xcvup) xl_device="xcvu3p-ffvc1517-${grade}-e" ;; - esac - - cat > test_${1}.tcl <<- EOT - read_verilog ../tabtest.v - read_verilog ../../../picorv32.v - read_xdc test_${1}.xdc - synth_design -flatten_hierarchy full -part ${xl_device} -top top - opt_design -sweep -remap -propconst - opt_design -directive Explore - place_design -directive Explore - phys_opt_design -retime -rewire -critical_pin_opt -placement_opt -critical_cell_opt - route_design -directive Explore - place_design -post_place_opt - phys_opt_design -retime - route_design -directive NoTimingRelaxation - report_utilization - report_timing - EOT - - cat > test_${1}.xdc <<- EOT - create_clock -period ${speed%?}.${speed#?} [get_ports clk] - EOT - - echo "Running tab_${ip}_${dev}_${grade}/test_${1}.." - if ! $VIVADO -nojournal -log test_${1}.log -mode batch -source test_${1}.tcl > /dev/null 2>&1; then - cat test_${1}.log - exit 1 - fi - mv test_${1}.log test_${1}.txt -} - -got_violated=false -got_met=false - -countdown=2 -while [ $countdown -gt 0 ]; do - synth_case $speed - - if grep -q '^Slack.*(VIOLATED)' test_${speed}.txt; then - echo " tab_${ip}_${dev}_${grade}/test_${speed} VIOLATED" - step=$((step / 2)) - speed=$((speed + step)) - got_violated=true - elif grep -q '^Slack.*(MET)' test_${speed}.txt; then - echo " tab_${ip}_${dev}_${grade}/test_${speed} MET" - [ $speed -lt $best_speed ] && best_speed=$speed - step=$((step / 2)) - speed=$((speed - step)) - got_met=true - else - echo "ERROR: No slack line found in $PWD/test_${speed}.txt!" - exit 1 - fi - - if [ $step -eq 0 ]; then - countdown=$((countdown - 1)) - speed=$((best_speed - 2)) - step=1 - fi -done - -if ! $got_violated; then - echo "ERROR: No timing violated in $PWD!" - exit 1 -fi - -if ! $got_met; then - echo "ERROR: No timing met in $PWD!" - exit 1 -fi - - -echo "-----------------------" -echo "Best speed for tab_${ip}_${dev}_${grade}: $best_speed" -echo "-----------------------" -echo $best_speed > results.txt - |