# dfa **Repository Path**: icdop/dfa ## Basic Information - **Project Name**: dfa - **Description**: Design Flow Automation - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-02-05 - **Last Updated**: 2021-02-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Design Flow Automation ## 1. Prepare Flow Ticket file
# Flow Ticket file (T400-XXXX.ticket) [HEADER] TITLE = description of the flow ticket FLOW_ID = flow_reference_id:ticket_run_dir TECHLIB = techlib_config_file DVC_SRC = design_source_version_path DVC_DST = design_dest_version_path DESIGN = top_module_name [INPUT] input_ref_id1 = input_file_name input_ref_id2 = input_dir_name [OUTPUT] output_ref_id1 = output_file_name output_ref_id2 = output_dir_name [PARAM] parameter_id1 = parameter_value1 parameter_id2 = parameter_value2 ...
# Design Flow Definition File (flow_ref_id.dfd) FLOW flow_ref_id INPUT input_ref_id1 = input_file_name INPUT input_ref_id2 = input_dir_name OUTPUT output_ref_id1 = output_file_name OUTPUT output_ref_id2 = output_dir_name PARAM parameter_id1 = parameter_value1 PARAM parameter_id2 = parameter_value2 STEP step_ref_id1 step_dir_name1 \+ sf1_input_ref_id \< input_ref_id1 \+ sf1_output_ref_id > output_ref_id1 \@ sf1_parameter_id = parameter_id1 ; STEP step_ref_id2 step_dir_name2 \+ sf2_input_ref_id \< output_ref_id1 \+ sf2_output_ref_id > output_ref_id2 \@ sf2_parameter_id = parameter_id2 ; PRECHECK run_precheck EXECUTE run_flow_script EXECDQI run_dqi_extraction POSTCHECK run_postcheck ENDF## 2. Building design flow run directory
% dfa_build_flow_rundirflow_ref_id
.dfa/ "DEFINITION SUBFLOW PARAMETER script/" .techlib -> /project/project_id/techlib/techlib_id .design -> /project/project_id## 3. Executing Flow run directory + Link technology library ...../design/phase/block/stage/version/ .script -> /project/project_id/script .inp$input_ref_id1 -> .design/input_file_name .out$output_ref_id1 -> ::main/output_file_name ::main/ script -> ../.script/flow_ref_id input_file_name -> ../.inp$input_ref_id1 Makefile -> script/Makefile.flow FLOW := 510-RCXT INPUT := input_file_name OUTPUT := output_file_name PRECHECK := script/run_precheck EXECUTE := script/run_flow_script POSTCHECK := script/run_postcheck run: precheck make $(OUTPUT) | tee run.log $(INPUT): @echo "ERROR: Missing input file '$@'..." | tee -a error.log precheck: $(INPUT) $(PRECHECK) | tee precheck.log $(OUTPUT) : precheck $(EXECUTE) | tee execute.log postcheck: $(OUTPUT) $(POSTCHECK) | tee postcheck.log dqi: $(EXECDQI) | tee dqi.log
% make techlib
+ Checkout input data ......... % make checkout
+ Execute flow script ............ % make execute
+ Extract quality indicator .. % make dqi
+ Checkin output data ......... % make checkin
+ Mark status done
### Example: DEFINITION
[510-RCXT.dfd] FLOW 510-RCXT INPUT DEF_FILE = design.def OUTPUT SPEF_FILE = design.spef.gz PARAM rc_corner = Cmax EXECUTE run_rcxt.tcl END [511-SPEF2SDF.dfd] FLOW 511-SPEF2SDF INPUT VLOG_FILE = design.v INPUT SPEF_FILE = design.spef.gz OUTPUT SDF_FILE = design.sdf.gz PARAM op_corner = WCL EXECUTE run_spef2sdf.tcl END [521-DEF2SDF.dfd] FLOW 521-DEF2SDF INPUT VLG_FILE = design.v INPUT DEF_FILE = design.def OUTPUT SPEF_FILE = design.spef.gz OUTPUT SDF_FILE = design.sdf.gz PARAM rc_corner = Cmax_WCL PARAM op_corner = WC STEP 510-RCXT rcxt_spef + DEF_FILE < $DEF_FILE + SPEF_FILE > $SPEF_FILE @ rc_corner = $rc_corner ; STEP 511-SPEF2SDF spef2sdf + VLOG_FILE < $VLG_FILE + SPEF_FILE < $SPEF_FILE + SDF_FILE > $SDF_FILE @ op_corner = $op_corner ; END### Example: Flow Run Directory
.dfa/ "DEFINITION PARAMETER" .techlib -> /project/project_id/techlib/techlib_id .design -> /project/project_id/design/phase/block/stage/version/ .script -> /project/project_id/script .inp$DEF_FILE -> .design/design.def .out$SPEF_FILE -> 401-RXCT::rcxt_spef/.out$SPEF_FILE .out$SDF_FILE -> 511-SPEF2SDF::spef2sdf/.out$SDF_FILE ::main/ script -> ../.script/521-DEF2SDF design.def -> ../.inp$DEF_FILE design.spef.gz -> ../.out$SPEF_FILE design.sdf.gz -> ../.out$SDF_FILE Makefile -> script/Makefile # FLOW := 521-DEF2SDF INPUT := design.def OUTPUT := design.spef.gz design.sdf.gz PRECHECK := POSTCHECK := run: $(PRECHECK) make $(OUTPUT) | tee run.log $(INPUT): @echo "ERROR: Missing input file '$@'..." | tee -a error.log precheck: $(INPUT) $(PRECHECK) | tee precheck.log postcheck: $(OUTPUT) $(POSTCHECK) | tee postcheck.log design.spef.gz: design.def cd ../510-RCXT::rcxt_spef/::main; make design.spef.gz design.sdf.gz: design.spef.gz cd ../511-SPEF2SDF::spef2sdf/::main; make design.sdf.gz 510-RCXT::rcxt_spef/ .dfa/ "DEFINITION PARAMETER" .techlib -> ../.techlib .design -> ../.design .script -> ../.script .inp$DEF_FILE -> ../.inp$DEF_FILE .out$SPEF_FILE -> ::main/design.spef.gz ::main/ script -> ../.script/510-RCXT design.def -> ../.inp$DEF_FILE design.spef.gz Makefile -> script/Makefile # FLOW := 510-RCXT INPUT := design.def OUTPUT := design.spef.gz PRECHECK := POSTCHECK := run: precheck make $(OUTPUT) | tee run.log $(INPUT): @echo "ERROR: Missing input file '$@'..." | tee -a error.log precheck: $(INPUT) $(PRECHECK) | tee precheck.log postcheck: $(OUTPUT) $(POSTCHECK) | tee postcheck.log $(OUTPUT) : $(INPUT) script/run.tcl 511-SPEF2SDF::spef2sdf/ .dfa/ "DEFINITION PARAMETER" .design -> ../.design .techlib -> ../.techlib .script -> ../.script .inp$SPEF_FILE -> ../.out$SPEF_FILE .out$SDF_FILE -> ::main/$design.sdf.gz ::main/ script -> ../.script/511-SPEF2SDF design.spef.gz -> .../.inp$SPEF_FILE design.sdf.gz Makefile -> script/Makefile