Vadi96
New Contributor
1 year agoRunning a Quartus design flow from .TCL
Hi,
I have the built quartus project and the entire design flow I want to run it through .TCL flow.
I have exported the project to .TCL from the quartus > project >generate TCL for the project.
.TCL :
# Quartus Prime: Generate Tcl File for Project
# File: dummy.tcl
# Generated on: Tue Sep 24 16:05:30 2024
# Load Quartus Prime Tcl Project package
package require ::quartus::project
set need_to_close_project 0
set make_assignments 1
# Check that the right project is open
if {[is_project_open]} {
if {[string compare $quartus(project) "dummy"]} {
puts "Project dummy is not open"
set make_assignments 0
}
} else {
# Only open if not already open
if {[project_exists dummy]} {
project_open -revision dummy dummy
} else {
project_new -revision dummy dummy
}
set need_to_close_project 1
}
# Make assignments
if {$make_assignments} {
set_global_assignment -name TOP_LEVEL_ENTITY dummy
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 23.4.0
set_global_assignment -name PROJECT_CREATION_TIME_DATE "15:12:07 SEPTEMBER 24, 2024"
set_global_assignment -name LAST_QUARTUS_VERSION "23.4.0 Pro Edition"
set_global_assignment -name VERILOG_FILE dummy.v
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40"
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 100
set_global_assignment -name DEVICE 10AX115H1F34I1SG
set_global_assignment -name FAMILY "Arria 10"
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1
# IOBANK_3E
set_location_assignment PIN_F8 -to b -comment IOBANK_3E
# IOBANK_2I
set_location_assignment PIN_AF21 -to a -comment IOBANK_2I
set_instance_assignment -name IO_STANDARD "1.8 V" -to b -entity dummy
set_instance_assignment -name IO_STANDARD "1.8 V" -to a -entity dummy
# Including default assignments
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS ON -family "Arria 10"
set_global_assignment -name TDC_CCPP_TRADEOFF_TOLERANCE 0 -family "Arria 10"
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL ON -family "Arria 10"
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON -family "Arria 10"
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria 10"
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM ON -family "Arria 10"
set_global_assignment -name ADVANCED_PHYSICAL_SYNTHESIS_REGISTER_PACKING OFF -family "Arria 10"
set_global_assignment -name PHYSICAL_SYNTHESIS OFF -family "Arria 10"
set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "PASSIVE SERIAL" -family "Arria 10"
set_global_assignment -name PRESERVE_UNUSED_XCVR_CHANNEL OFF -family "Arria 10"
set_global_assignment -name DEVICE_INITIALIZATION_CLOCK INIT_INTOSC -family "Arria 10"
set_global_assignment -name OPTIMIZE_HOLD_TIMING "ALL PATHS" -family "Arria 10"
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING ON -family "Arria 10"
set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING AUTOMATIC -family "Arria 10"
set_global_assignment -name ENABLE_PHYSICAL_DSP_MERGING OFF -family "Arria 10"
set_global_assignment -name AUTO_DELAY_CHAINS ON -family "Arria 10"
set_global_assignment -name CRC_ERROR_OPEN_DRAIN ON -family "Arria 10"
set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHZ -family "Arria 10"
set_global_assignment -name GENERATE_PR_RBF_FILE OFF -family "Arria 10"
set_global_assignment -name POWER_USE_DEVICE_CHARACTERISTICS TYPICAL -family "Arria 10"
set_global_assignment -name POWER_AUTO_COMPUTE_TJ ON -family "Arria 10"
# Commit assignments
export_assignments
# Close project
if {$need_to_close_project} {
project_close
}
}
1. how to run this .TCL to go through design flow till assembler?
2. In Xilinx Vivado, command lines are printed in TCL console as soon as something is executed in GUI. Then later on we can copy the entire .tcl command lines from the console and then put it under one .TCL file and then later can source this file in Vivado TCL console.
Is there a similar way in Quartus too?
(Intention : Instead of going through and understanding all the command lines in the quartus scripting document, some easy way?)
I have the built quartus project and the entire design flow I want to run it through .TCL flow.
I have exported the project to .TCL from the quartus > project >generate TCL for the project.
.TCL :
# Quartus Prime: Generate Tcl File for Project
# File: dummy.tcl
# Generated on: Tue Sep 24 16:05:30 2024
# Load Quartus Prime Tcl Project package
package require ::quartus::project
set need_to_close_project 0
set make_assignments 1
# Check that the right project is open
if {[is_project_open]} {
if {[string compare $quartus(project) "dummy"]} {
puts "Project dummy is not open"
set make_assignments 0
}
} else {
# Only open if not already open
if {[project_exists dummy]} {
project_open -revision dummy dummy
} else {
project_new -revision dummy dummy
}
set need_to_close_project 1
}
# Make assignments
if {$make_assignments} {
set_global_assignment -name TOP_LEVEL_ENTITY dummy
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 23.4.0
set_global_assignment -name PROJECT_CREATION_TIME_DATE "15:12:07 SEPTEMBER 24, 2024"
set_global_assignment -name LAST_QUARTUS_VERSION "23.4.0 Pro Edition"
set_global_assignment -name VERILOG_FILE dummy.v
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40"
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 100
set_global_assignment -name DEVICE 10AX115H1F34I1SG
set_global_assignment -name FAMILY "Arria 10"
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1
# IOBANK_3E
set_location_assignment PIN_F8 -to b -comment IOBANK_3E
# IOBANK_2I
set_location_assignment PIN_AF21 -to a -comment IOBANK_2I
set_instance_assignment -name IO_STANDARD "1.8 V" -to b -entity dummy
set_instance_assignment -name IO_STANDARD "1.8 V" -to a -entity dummy
# Including default assignments
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS ON -family "Arria 10"
set_global_assignment -name TDC_CCPP_TRADEOFF_TOLERANCE 0 -family "Arria 10"
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL ON -family "Arria 10"
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON -family "Arria 10"
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria 10"
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM ON -family "Arria 10"
set_global_assignment -name ADVANCED_PHYSICAL_SYNTHESIS_REGISTER_PACKING OFF -family "Arria 10"
set_global_assignment -name PHYSICAL_SYNTHESIS OFF -family "Arria 10"
set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "PASSIVE SERIAL" -family "Arria 10"
set_global_assignment -name PRESERVE_UNUSED_XCVR_CHANNEL OFF -family "Arria 10"
set_global_assignment -name DEVICE_INITIALIZATION_CLOCK INIT_INTOSC -family "Arria 10"
set_global_assignment -name OPTIMIZE_HOLD_TIMING "ALL PATHS" -family "Arria 10"
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING ON -family "Arria 10"
set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING AUTOMATIC -family "Arria 10"
set_global_assignment -name ENABLE_PHYSICAL_DSP_MERGING OFF -family "Arria 10"
set_global_assignment -name AUTO_DELAY_CHAINS ON -family "Arria 10"
set_global_assignment -name CRC_ERROR_OPEN_DRAIN ON -family "Arria 10"
set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHZ -family "Arria 10"
set_global_assignment -name GENERATE_PR_RBF_FILE OFF -family "Arria 10"
set_global_assignment -name POWER_USE_DEVICE_CHARACTERISTICS TYPICAL -family "Arria 10"
set_global_assignment -name POWER_AUTO_COMPUTE_TJ ON -family "Arria 10"
# Commit assignments
export_assignments
# Close project
if {$need_to_close_project} {
project_close
}
}
1. how to run this .TCL to go through design flow till assembler?
2. In Xilinx Vivado, command lines are printed in TCL console as soon as something is executed in GUI. Then later on we can copy the entire .tcl command lines from the console and then put it under one .TCL file and then later can source this file in Vivado TCL console.
Is there a similar way in Quartus too?
(Intention : Instead of going through and understanding all the command lines in the quartus scripting document, some easy way?)