# 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/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

## 3. Executing Flow run directory + Link technology library ..... % 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