Merge remote-tracking branch 'origin/ganesh_dev' into dev
This commit is contained in:
commit
3c2055156a
|
@ -45,3 +45,4 @@ tmp/
|
||||||
build/
|
build/
|
||||||
|
|
||||||
message.txt
|
message.txt
|
||||||
|
deploy_key
|
|
@ -9,4 +9,7 @@ travis_fold end after_failure.1
|
||||||
|
|
||||||
start_section "failure.tail" "${RED}Failure output...${NC}"
|
start_section "failure.tail" "${RED}Failure output...${NC}"
|
||||||
tail -n 1000 output.log
|
tail -n 1000 output.log
|
||||||
|
echo "Failed uploading files to LNIS Server"
|
||||||
|
scp -qCr $TRAVIS_BUILD_DIR/openfpga_flow/tasks/ u1249762@lab1-1.eng.utah.edu:/var/tmp/travis_bc/$TRAVIS_JOB_ID/
|
||||||
|
scp output.log u1249762@lab1-1.eng.utah.edu:/var/tmp/travis_bc/$TRAVIS_JOB_ID/
|
||||||
end_section "failure.tail"
|
end_section "failure.tail"
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,74 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#title : openfpga.sh
|
||||||
|
#description : This script provides shortcut commands <bash functions>
|
||||||
|
# for several simple operations in OpenFPGA project
|
||||||
|
#author : Ganesh Gore <ganesh.gore@utah.edu>
|
||||||
|
#==============================================================================
|
||||||
|
|
||||||
|
export OPENFPGA_PATH="$(pwd)"
|
||||||
|
export OPENFPGA_SCRIPT_PATH="$(pwd)/openfpga_flow/scripts"
|
||||||
|
export OPENFPGA_TASK_PATH="$(pwd)/openfpga_flow/tasks"
|
||||||
|
if [ -z $PYTHON_EXEC ]; then export PYTHON_EXEC="python3"; fi
|
||||||
|
|
||||||
|
# This function checks the path and
|
||||||
|
# raises warning if the command is not executing
|
||||||
|
# inside current OpendFPGA folder
|
||||||
|
check_execution_path (){
|
||||||
|
if [[ $1 != *"${OPENFPGA_PATH}"* ]]; then
|
||||||
|
echo -e "\e[33mCommand is not executed from configured OPNEFPGA directory\e[0m"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
run-task () {
|
||||||
|
$PYTHON_EXEC $OPENFPGA_SCRIPT_PATH/run_fpga_task.py "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
run-flow () {
|
||||||
|
$PYTHON_EXEC $OPENFPGA_SCRIPT_PATH/run_fpga_flow.py "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# lists all the configure task in task directory
|
||||||
|
list-tasks () {
|
||||||
|
check_execution_path "$(pwd)"
|
||||||
|
ls -tdalh ${OPENFPGA_TASK_PATH}/* | awk '{printf("%-4s | %s %-3s | ", $5, $6, $7) ;system("basename " $9)}'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Switch directory to root of OpenFPGA
|
||||||
|
goto-root () {
|
||||||
|
cd $OPENFPGA_PATH
|
||||||
|
}
|
||||||
|
|
||||||
|
# Changes directory to task directory [goto_task <task_name> <run_num[default 0]>]
|
||||||
|
goto-task () {
|
||||||
|
if [ -z $1 ]; then
|
||||||
|
echo "requires task name goto_task <task_name> <run_num[default 0]>"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
goto_path=$OPENFPGA_TASK_PATH/$1
|
||||||
|
run_num=""
|
||||||
|
if [ ! -d $goto_path ]; then echo "Task directory not found"; return; fi
|
||||||
|
if [[ "$2" =~ '^[0-9]+$' ]] ; then
|
||||||
|
if ! [[ $2 == '0' ]] ; then run_num="$(printf run%03d $2)"; else run_num="latest"; fi
|
||||||
|
if [ ! -d "$goto_path/$run_num" ]; then run_num="latest"; fi
|
||||||
|
fi
|
||||||
|
if [ ! -d $goto_path/$run_num ]; then
|
||||||
|
echo "\e[33mTask run directory not found -" $goto_path/$run_num "\e[0m"
|
||||||
|
else
|
||||||
|
echo "Switching current dirctory to" $goto_path/$run_num
|
||||||
|
cd $goto_path/$run_num
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Clears enviroment variables and fucntions
|
||||||
|
unset-openfpga (){
|
||||||
|
unset -v OPENFPGA_PATH
|
||||||
|
unset -f list-tasks run-task run-flow goto-task goto-root >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Allow autocompletion of task
|
||||||
|
if [[ $(ps -p $$ -oargs=) == *"zsh"* ]]; then
|
||||||
|
autoload -U +X bashcompinit; bashcompinit;
|
||||||
|
fi
|
||||||
|
TaskList=$(ls -tdalh ${OPENFPGA_TASK_PATH}/* | awk '{system("basename " $9)}' | awk '{printf("%s ",$1)}')
|
||||||
|
complete -W "${TaskList}" goto-task
|
||||||
|
complete -W "${TaskList}" run-task
|
|
@ -47,7 +47,7 @@ proc top_create_new_project {projectname verilog_files modelsim_path simtime uni
|
||||||
#Start the simulation
|
#Start the simulation
|
||||||
vsim $projectname.$top_tb -voptargs=+acc
|
vsim $projectname.$top_tb -voptargs=+acc
|
||||||
#Add the waves
|
#Add the waves
|
||||||
add_waves top_tb
|
add_waves $top_tb
|
||||||
#run the simulation
|
#run the simulation
|
||||||
runsim $simtime $unit
|
runsim $simtime $unit
|
||||||
#Fit the window view
|
#Fit the window view
|
||||||
|
|
|
@ -1,16 +1,20 @@
|
||||||
from string import Template
|
from string import Template
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import pprint
|
import re
|
||||||
|
import glob
|
||||||
|
import time
|
||||||
|
import threading
|
||||||
|
from datetime import timedelta
|
||||||
import argparse
|
import argparse
|
||||||
import subprocess
|
import subprocess
|
||||||
import logging
|
import logging
|
||||||
from pprint import pprint
|
from configparser import ConfigParser, ExtendedInterpolation
|
||||||
from configparser import ConfigParser
|
|
||||||
|
|
||||||
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
||||||
# Configure logging system
|
# Configure logging system
|
||||||
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
||||||
|
FILE_LOG_FORMAT = '%(levelname)s (%(threadName)10s) - %(message)s'
|
||||||
logging.basicConfig(level=logging.INFO, stream=sys.stdout,
|
logging.basicConfig(level=logging.INFO, stream=sys.stdout,
|
||||||
format='%(levelname)s (%(threadName)10s) - %(message)s')
|
format='%(levelname)s (%(threadName)10s) - %(message)s')
|
||||||
logger = logging.getLogger('Modelsim_run_log')
|
logger = logging.getLogger('Modelsim_run_log')
|
||||||
|
@ -20,7 +24,13 @@ logger = logging.getLogger('Modelsim_run_log')
|
||||||
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('files', nargs='+',
|
parser.add_argument('files', nargs='+',
|
||||||
help="Pass SimulationDeckInfo generated by OpenFPGA flow")
|
help="Pass SimulationDeckInfo generated by OpenFPGA flow" +
|
||||||
|
" or pass taskname <taskname> <run_number[optional]>")
|
||||||
|
parser.add_argument('--maxthreads', type=int, default=2,
|
||||||
|
help="Number of fpga_flow threads to run default = 2," +
|
||||||
|
"Typically <= Number of processors on the system")
|
||||||
|
parser.add_argument('--debug', action="store_true",
|
||||||
|
help="Run script in debug mode")
|
||||||
parser.add_argument('--modelsim_proc_tmpl', type=str,
|
parser.add_argument('--modelsim_proc_tmpl', type=str,
|
||||||
help="Modelsim proc template file")
|
help="Modelsim proc template file")
|
||||||
parser.add_argument('--modelsim_runsim_tmpl', type=str,
|
parser.add_argument('--modelsim_runsim_tmpl', type=str,
|
||||||
|
@ -36,9 +46,32 @@ parser.add_argument('--modelsim_ini', type=str,
|
||||||
help="Skip any confirmation")
|
help="Skip any confirmation")
|
||||||
parser.add_argument('--skip_prompt', action='store_true',
|
parser.add_argument('--skip_prompt', action='store_true',
|
||||||
help='Skip any confirmation')
|
help='Skip any confirmation')
|
||||||
|
parser.add_argument('--ini_filename', type=str,
|
||||||
|
default="simulation_deck_info.ini",
|
||||||
|
help='default INI filename in in fun dir')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# Consider default formality script template
|
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
||||||
|
# Read script configuration file
|
||||||
|
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
||||||
|
task_script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
script_env_vars = ({"PATH": {
|
||||||
|
"OPENFPGA_FLOW_PATH": task_script_dir,
|
||||||
|
"ARCH_PATH": os.path.join("${PATH:OPENFPGA_PATH}", "arch"),
|
||||||
|
"BENCH_PATH": os.path.join("${PATH:OPENFPGA_PATH}", "benchmarks"),
|
||||||
|
"TECH_PATH": os.path.join("${PATH:OPENFPGA_PATH}", "tech"),
|
||||||
|
"SPICENETLIST_PATH": os.path.join("${PATH:OPENFPGA_PATH}", "SpiceNetlists"),
|
||||||
|
"VERILOG_PATH": os.path.join("${PATH:OPENFPGA_PATH}", "VerilogNetlists"),
|
||||||
|
"OPENFPGA_PATH": os.path.abspath(os.path.join(task_script_dir, os.pardir,
|
||||||
|
os.pardir))}})
|
||||||
|
config = ConfigParser(interpolation=ExtendedInterpolation())
|
||||||
|
config.read_dict(script_env_vars)
|
||||||
|
config.read_file(open(os.path.join(task_script_dir, 'run_fpga_task.conf')))
|
||||||
|
gc = config["GENERAL CONFIGURATION"]
|
||||||
|
|
||||||
|
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
||||||
|
# Load default templates for modelsim
|
||||||
|
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
||||||
task_script_dir = os.path.dirname(os.path.abspath(__file__))
|
task_script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
if not args.modelsim_proc_tmpl:
|
if not args.modelsim_proc_tmpl:
|
||||||
args.modelsim_proc_tmpl = os.path.join(task_script_dir, os.pardir,
|
args.modelsim_proc_tmpl = os.path.join(task_script_dir, os.pardir,
|
||||||
|
@ -52,7 +85,60 @@ args.modelsim_runsim_tmpl = os.path.abspath(args.modelsim_runsim_tmpl)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
for eachFile in args.files:
|
if os.path.isfile(args.files[0]):
|
||||||
|
create_tcl_script(args.files)
|
||||||
|
else:
|
||||||
|
# Check if task directory exists and consistent
|
||||||
|
taskname = args.files[0]
|
||||||
|
task_run = "latest"
|
||||||
|
if len(args.files) > 1:
|
||||||
|
task_run = f"run{int(args.files[1]):03}"
|
||||||
|
|
||||||
|
temp_dir = os.path.join(gc["task_dir"], taskname)
|
||||||
|
if not os.path.isdir(temp_dir):
|
||||||
|
clean_up_and_exit("Task directory [%s] not found" % temp_dir)
|
||||||
|
temp_dir = os.path.join(gc["task_dir"], taskname, task_run)
|
||||||
|
if not os.path.isdir(temp_dir):
|
||||||
|
clean_up_and_exit("Task run directory [%s] not found" % temp_dir)
|
||||||
|
|
||||||
|
# = = = = = = = Create a current script log file handler = = = =
|
||||||
|
logfile_path = os.path.join(gc["task_dir"],
|
||||||
|
taskname, task_run, "modelsim_run.log")
|
||||||
|
logfilefh = logging.FileHandler(logfile_path, "w")
|
||||||
|
logfilefh.setFormatter(logging.Formatter(FILE_LOG_FORMAT))
|
||||||
|
logger.addHandler(logfilefh)
|
||||||
|
logger.info("Created log file at %s" % logfile_path)
|
||||||
|
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
||||||
|
|
||||||
|
# = = = = Read Task log file and extract run directory = = =
|
||||||
|
logfile = os.path.join(gc["task_dir"], taskname, task_run, "*_out.log")
|
||||||
|
logfiles = glob.glob(logfile)
|
||||||
|
if not len(logfiles):
|
||||||
|
clean_up_and_exit("No successful run found in [%s]" % temp_dir)
|
||||||
|
|
||||||
|
task_ini_files = []
|
||||||
|
for eachfile in logfiles:
|
||||||
|
with open(eachfile) as fp:
|
||||||
|
run_dir = [re.findall(r'^INFO.*Run directory : (.*)$', line)
|
||||||
|
for line in open(eachfile)]
|
||||||
|
run_dir = filter(bool, run_dir)
|
||||||
|
for each_run in run_dir:
|
||||||
|
INIfile = os.path.join(each_run[0], args.ini_filename)
|
||||||
|
if os.path.isfile(INIfile):
|
||||||
|
task_ini_files.append(INIfile)
|
||||||
|
logger.info(f"Found {len(task_ini_files)} INI files")
|
||||||
|
create_tcl_script(task_ini_files)
|
||||||
|
|
||||||
|
|
||||||
|
def clean_up_and_exit(msg):
|
||||||
|
logger.error(msg)
|
||||||
|
logger.error("Exiting . . . . . .")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def create_tcl_script(files):
|
||||||
|
runsim_files = []
|
||||||
|
for eachFile in files:
|
||||||
eachFile = os.path.abspath(eachFile)
|
eachFile = os.path.abspath(eachFile)
|
||||||
pDir = os.path.dirname(eachFile)
|
pDir = os.path.dirname(eachFile)
|
||||||
os.chdir(pDir)
|
os.chdir(pDir)
|
||||||
|
@ -107,42 +193,78 @@ def main():
|
||||||
with open(proc_filename, 'w', encoding='utf-8') as tclout:
|
with open(proc_filename, 'w', encoding='utf-8') as tclout:
|
||||||
tclout.write(open(args.modelsim_proc_tmpl,
|
tclout.write(open(args.modelsim_proc_tmpl,
|
||||||
encoding='utf-8').read())
|
encoding='utf-8').read())
|
||||||
|
runsim_files.append({
|
||||||
# Execute modelsim
|
"modelsim_run_dir": args.modelsim_run_dir,
|
||||||
if args.run_sim:
|
"runsim_filename": runsim_filename,
|
||||||
os.chdir(args.modelsim_run_dir)
|
"status" :False,
|
||||||
print(args.modelsim_run_dir)
|
"finished" : True
|
||||||
modelsim_run_cmd = ["vsim", "-c", "-do", runsim_filename]
|
})
|
||||||
run_command("ModelSim Run", "modelsim_run.log",
|
# Execute modelsim
|
||||||
modelsim_run_cmd)
|
if args.run_sim:
|
||||||
else:
|
thread_sema = threading.Semaphore(args.maxthreads)
|
||||||
logger.info("Created runsim and proc files")
|
logger.info("Launching %d parallel threads" % args.maxthreads)
|
||||||
logger.info(f"runsim_filename {runsim_filename}")
|
thread_list = []
|
||||||
logger.info(f"proc_filename {proc_filename}")
|
for thread_no, eachjob in enumerate(runsim_files):
|
||||||
|
t = threading.Thread(target=run_modelsim_thread,
|
||||||
|
name=f"Thread_{thread_no:d}",
|
||||||
|
args=(thread_sema, eachjob, runsim_files))
|
||||||
|
t.start()
|
||||||
|
thread_list.append(t)
|
||||||
|
for eachthread in thread_list:
|
||||||
|
eachthread.join()
|
||||||
|
exit()
|
||||||
|
else:
|
||||||
|
logger.info("Created runsim and proc files")
|
||||||
|
logger.info(f"runsim_filename {runsim_filename}")
|
||||||
|
logger.info(f"proc_filename {proc_filename}")
|
||||||
|
from pprint import pprint
|
||||||
|
pprint(runsim_files)
|
||||||
|
|
||||||
|
|
||||||
def run_command(taskname, logfile, command, exit_if_fail=True):
|
def run_modelsim_thread(s, eachJob, job_list):
|
||||||
# os.chdir(os.pardir)
|
os.chdir(eachJob["modelsim_run_dir"])
|
||||||
logger.info("Launching %s " % taskname)
|
with s:
|
||||||
with open(logfile, 'w+') as output:
|
thread_name = threading.currentThread().getName()
|
||||||
|
eachJob["starttime"] = time.time()
|
||||||
try:
|
try:
|
||||||
output.write(os.getcwd() + "\n")
|
logfile = "%s_modelsim.log" % thread_name
|
||||||
output.write(" ".join(command)+"\n")
|
with open(logfile, 'w+') as output:
|
||||||
process = subprocess.run(command,
|
output.write("* "*20 + '\n')
|
||||||
check=True,
|
output.write("RunDirectory : %s\n" % os.getcwd())
|
||||||
stdout=subprocess.PIPE,
|
command = ["vsim", "-c", "-do", eachJob["runsim_filename"]]
|
||||||
stderr=subprocess.PIPE,
|
output.write(" ".join(command) + '\n')
|
||||||
universal_newlines=True)
|
output.write("* "*20 + '\n')
|
||||||
output.write(process.stdout)
|
logger.info("Running modelsim with [%s]" % " ".join(command))
|
||||||
if process.returncode:
|
process = subprocess.Popen(command,
|
||||||
logger.error("%s run failed with returncode %d" %
|
stdout=subprocess.PIPE,
|
||||||
(taskname, process.returncode))
|
stderr=subprocess.STDOUT,
|
||||||
except (Exception, subprocess.CalledProcessError) as e:
|
universal_newlines=True)
|
||||||
logger.exception("failed to execute %s" % taskname)
|
for line in process.stdout:
|
||||||
return None
|
if "Errors" in line:
|
||||||
logger.info("%s is written in file %s" % (taskname, logfile))
|
logger.info(line.strip())
|
||||||
return process.stdout
|
sys.stdout.buffer.flush()
|
||||||
|
output.write(line)
|
||||||
|
process.wait()
|
||||||
|
if process.returncode:
|
||||||
|
raise subprocess.CalledProcessError(0, " ".join(command))
|
||||||
|
eachJob["status"] = True
|
||||||
|
except:
|
||||||
|
logger.exception("Failed to execute openfpga flow - " +
|
||||||
|
eachJob["name"])
|
||||||
|
if not args.continue_on_fail:
|
||||||
|
os._exit(1)
|
||||||
|
eachJob["endtime"] = time.time()
|
||||||
|
timediff = timedelta(seconds=(eachJob["endtime"]-eachJob["starttime"]))
|
||||||
|
timestr = humanize.naturaldelta(timediff) if "humanize" in sys.modules \
|
||||||
|
else str(timediff)
|
||||||
|
logger.info("%s Finished with returncode %d, Time Taken %s " %
|
||||||
|
(thread_name, process.returncode, timestr))
|
||||||
|
eachJob["finished"] = True
|
||||||
|
no_of_finished_job = sum([not eachJ["finished"] for eachJ in job_list])
|
||||||
|
logger.info("***** %d runs pending *****" % (no_of_finished_job))
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
if args.debug:
|
||||||
|
logger.info("Setting loggger in debug mode")
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
main()
|
main()
|
||||||
|
|
120
run_test.sh
120
run_test.sh
|
@ -18,14 +18,13 @@
|
||||||
# Test popular multi-mode architecture
|
# Test popular multi-mode architecture
|
||||||
python3 openfpga_flow/scripts/run_fpga_flow.py \
|
python3 openfpga_flow/scripts/run_fpga_flow.py \
|
||||||
./openfpga_flow/arch/template/k6_N10_sram_chain_HC_template.xml \
|
./openfpga_flow/arch/template/k6_N10_sram_chain_HC_template.xml \
|
||||||
./openfpga_flow/benchmarks/Test_Modes/test_modes.blif \
|
./openfpga_flow/benchmarks/test_modes/test_modes.blif \
|
||||||
--fpga_flow vpr_blif \
|
--fpga_flow vpr_blif \
|
||||||
--top_module test_modes \
|
--top_module test_modes \
|
||||||
--activity_file ./openfpga_flow/benchmarks/Test_Modes/test_modes.act \
|
--activity_file ./openfpga_flow/benchmarks/test_modes/test_modes.act \
|
||||||
--base_verilog ./openfpga_flow/benchmarks/Test_Modes/test_modes.v \
|
--base_verilog ./openfpga_flow/benchmarks/test_modes/test_modes.v \
|
||||||
--power \
|
--power \
|
||||||
--power_tech ./openfpga_flow/tech/PTM_45nm/45nm.xml \
|
--power_tech ./openfpga_flow/tech/PTM_45nm/45nm.xml \
|
||||||
#--fix_route_chan_width 300 \
|
|
||||||
--min_route_chan_width 1.3 \
|
--min_route_chan_width 1.3 \
|
||||||
--vpr_fpga_verilog \
|
--vpr_fpga_verilog \
|
||||||
--vpr_fpga_verilog_dir . \
|
--vpr_fpga_verilog_dir . \
|
||||||
|
@ -42,64 +41,65 @@ python3 openfpga_flow/scripts/run_fpga_flow.py \
|
||||||
--vpr_fpga_verilog_print_sdc_pnr \
|
--vpr_fpga_verilog_print_sdc_pnr \
|
||||||
--vpr_fpga_verilog_print_sdc_analysis \
|
--vpr_fpga_verilog_print_sdc_analysis \
|
||||||
--vpr_fpga_x2p_compact_routing_hierarchy \
|
--vpr_fpga_x2p_compact_routing_hierarchy \
|
||||||
--end_flow_with_test
|
--end_flow_with_test \
|
||||||
|
--vpr_fpga_verilog_print_modelsim_autodeck /uusoc/facility/cad_tools/Mentor/modelsim10.7b/modeltech/modelsim.ini
|
||||||
|
|
||||||
# Test Standard cell MUX2
|
# # Test Standard cell MUX2
|
||||||
python3 openfpga_flow/scripts/run_fpga_flow.py \
|
# python3 openfpga_flow/scripts/run_fpga_flow.py \
|
||||||
./openfpga_flow/arch/template/k8_N10_sram_chain_FC_template.xml \
|
# ./openfpga_flow/arch/template/k8_N10_sram_chain_FC_template.xml \
|
||||||
./openfpga_flow/benchmarks/Test_Modes/test_modes.blif \
|
# ./openfpga_flow/benchmarks/Test_Modes/test_modes.blif \
|
||||||
--fpga_flow vpr_blif \
|
# --fpga_flow vpr_blif \
|
||||||
--top_module test_modes \
|
# --top_module test_modes \
|
||||||
--activity_file ./openfpga_flow/benchmarks/Test_Modes/test_modes.act \
|
# --activity_file ./openfpga_flow/benchmarks/Test_Modes/test_modes.act \
|
||||||
--base_verilog ./openfpga_flow/benchmarks/Test_Modes/test_modes.v \
|
# --base_verilog ./openfpga_flow/benchmarks/Test_Modes/test_modes.v \
|
||||||
--power \
|
# --power \
|
||||||
--power_tech ./openfpga_flow/tech/PTM_45nm/45nm.xml \
|
# --power_tech ./openfpga_flow/tech/PTM_45nm/45nm.xml \
|
||||||
#--fix_route_chan_width 300 \
|
# #--fix_route_chan_width 300 \
|
||||||
--min_route_chan_width 1.3 \
|
# --min_route_chan_width 1.3 \
|
||||||
--vpr_fpga_verilog \
|
# --vpr_fpga_verilog \
|
||||||
--vpr_fpga_verilog_dir . \
|
# --vpr_fpga_verilog_dir . \
|
||||||
--vpr_fpga_x2p_rename_illegal_port \
|
# --vpr_fpga_x2p_rename_illegal_port \
|
||||||
--vpr_fpga_verilog_include_icarus_simulator \
|
# --vpr_fpga_verilog_include_icarus_simulator \
|
||||||
--vpr_fpga_verilog_formal_verification_top_netlist \
|
# --vpr_fpga_verilog_formal_verification_top_netlist \
|
||||||
--vpr_fpga_verilog_include_timing \
|
# --vpr_fpga_verilog_include_timing \
|
||||||
--vpr_fpga_verilog_include_signal_init \
|
# --vpr_fpga_verilog_include_signal_init \
|
||||||
--vpr_fpga_verilog_print_autocheck_top_testbench \
|
# --vpr_fpga_verilog_print_autocheck_top_testbench \
|
||||||
--debug \
|
# --debug \
|
||||||
--vpr_fpga_bitstream_generator \
|
# --vpr_fpga_bitstream_generator \
|
||||||
--vpr_fpga_verilog_print_user_defined_template \
|
# --vpr_fpga_verilog_print_user_defined_template \
|
||||||
--vpr_fpga_verilog_print_report_timing_tcl \
|
# --vpr_fpga_verilog_print_report_timing_tcl \
|
||||||
--vpr_fpga_verilog_print_sdc_pnr \
|
# --vpr_fpga_verilog_print_sdc_pnr \
|
||||||
--vpr_fpga_verilog_print_sdc_analysis \
|
# --vpr_fpga_verilog_print_sdc_analysis \
|
||||||
--vpr_fpga_x2p_compact_routing_hierarchy \
|
# --vpr_fpga_x2p_compact_routing_hierarchy \
|
||||||
--end_flow_with_test
|
# --end_flow_with_test
|
||||||
|
|
||||||
# Test local encoder feature
|
# # Test local encoder feature
|
||||||
python3 openfpga_flow/scripts/run_fpga_flow.py \
|
# python3 openfpga_flow/scripts/run_fpga_flow.py \
|
||||||
./openfpga_flow/arch/template/k6_N10_sram_chain_HC_local_encoder_template.xml \
|
# ./openfpga_flow/arch/template/k6_N10_sram_chain_HC_local_encoder_template.xml \
|
||||||
./openfpga_flow/benchmarks/Test_Modes/test_modes.blif \
|
# ./openfpga_flow/benchmarks/Test_Modes/test_modes.blif \
|
||||||
--fpga_flow vpr_blif \
|
# --fpga_flow vpr_blif \
|
||||||
--top_module test_modes \
|
# --top_module test_modes \
|
||||||
--activity_file ./openfpga_flow/benchmarks/Test_Modes/test_modes.act \
|
# --activity_file ./openfpga_flow/benchmarks/Test_Modes/test_modes.act \
|
||||||
--base_verilog ./openfpga_flow/benchmarks/Test_Modes/test_modes.v \
|
# --base_verilog ./openfpga_flow/benchmarks/Test_Modes/test_modes.v \
|
||||||
--power \
|
# --power \
|
||||||
--power_tech ./openfpga_flow/tech/PTM_45nm/45nm.xml \
|
# --power_tech ./openfpga_flow/tech/PTM_45nm/45nm.xml \
|
||||||
--fix_route_chan_width 300 \
|
# --fix_route_chan_width 300 \
|
||||||
--vpr_fpga_verilog \
|
# --vpr_fpga_verilog \
|
||||||
--vpr_fpga_verilog_dir . \
|
# --vpr_fpga_verilog_dir . \
|
||||||
--vpr_fpga_x2p_rename_illegal_port \
|
# --vpr_fpga_x2p_rename_illegal_port \
|
||||||
--vpr_fpga_verilog_include_icarus_simulator \
|
# --vpr_fpga_verilog_include_icarus_simulator \
|
||||||
--vpr_fpga_verilog_formal_verification_top_netlist \
|
# --vpr_fpga_verilog_formal_verification_top_netlist \
|
||||||
--vpr_fpga_verilog_include_timing \
|
# --vpr_fpga_verilog_include_timing \
|
||||||
--vpr_fpga_verilog_include_signal_init \
|
# --vpr_fpga_verilog_include_signal_init \
|
||||||
--vpr_fpga_verilog_print_autocheck_top_testbench \
|
# --vpr_fpga_verilog_print_autocheck_top_testbench \
|
||||||
--debug \
|
# --debug \
|
||||||
--vpr_fpga_bitstream_generator \
|
# --vpr_fpga_bitstream_generator \
|
||||||
--vpr_fpga_verilog_print_user_defined_template \
|
# --vpr_fpga_verilog_print_user_defined_template \
|
||||||
--vpr_fpga_verilog_print_report_timing_tcl \
|
# --vpr_fpga_verilog_print_report_timing_tcl \
|
||||||
--vpr_fpga_verilog_print_sdc_pnr \
|
# --vpr_fpga_verilog_print_sdc_pnr \
|
||||||
--vpr_fpga_verilog_print_sdc_analysis \
|
# --vpr_fpga_verilog_print_sdc_analysis \
|
||||||
--vpr_fpga_x2p_compact_routing_hierarchy \
|
# --vpr_fpga_x2p_compact_routing_hierarchy \
|
||||||
--end_flow_with_test
|
# --end_flow_with_test
|
||||||
|
|
||||||
# Test tileable routing feature
|
# Test tileable routing feature
|
||||||
#python3 openfpga_flow/scripts/run_fpga_flow.py \
|
#python3 openfpga_flow/scripts/run_fpga_flow.py \
|
||||||
|
|
Loading…
Reference in New Issue