Commit caf0f750 authored by Mikhail Karpenko's avatar Mikhail Karpenko

Add timing analizer interface

parent 9973916e
......@@ -50,7 +50,7 @@ timing and fitting requirements can be met"/>
</typedef>
<typedef name="QuartusRegPack">
<paramtype kind="enum" base="String">
<item value="auto" label="The Fitter automatically chooses the best method to fit the design"/>
<item value="auto" label="The Fitter automatically chooses the best method to fit the design"/>
<item value="off" label="The Fitter does not attempt to place a pair of logic functions in a single logic cell"/>
<item value="normal" label="The fitter places both a combinational and a sequential operation in a logic cell when
it is expected that the placement will not affect performance"/>
......@@ -78,9 +78,6 @@ register cascade chains, or that can be converted to register cascade chains"/>
inherits="QuartusToolPrototype"
>
<action-menu>
<action lable="Place" resource="" icon="mondrian2x2.png"/>
</action-menu>
<depends-list>
<depends state="QuartusSnapshotSynth"/>
</depends-list>
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
/*******************************************************************************
* Copyright (c) 2015 Elphel, Inc.
* This file is a part of VDT plug-in.
* VDT plug-in is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* VDT plug-in is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional permission under GNU GPL version 3 section 7:
* If you modify this Program, or any covered work, by linking or combining it
* with Eclipse or Eclipse plugins (or a modified version of those libraries),
* containing parts covered by the terms of EPL/CPL, the licensors of this
* Program grant you additional permission to convey the resulting work.
* {Corresponding Source for a non-source form of such a combination shall
* include the source code for the parts of Eclipse or Eclipse plugins used
* as well as that of the covered work.}
*******************************************************************************/
-->
<vdt-project>
<interface name="QuartusTimequestInterface" extends="QuartusInterface">
<typedef name="TemperatureGradeType">
<paramtype kind="enum" base="String">
<item value="i" label="Industrial grade (-40℃ to 100℃)"/>
<item value="c" label="Commercial grade (0℃ to 85℃)"/>
<item value="m" label="Military grade (-55℃ to 125℃)"/>
<item value="e" label="Extended grade (-40℃ to 125℃)"/>
<item value="a" label="Automotive grade (-40℃ to 125℃)"/>
</paramtype>
</typedef>
<typedef name="TimingModelType">
<paramtype kind="enum" base="String">
<item value="fast" label="Fast corner delay model"/>
<item value="slow" label="Slow corner delay model"/>
</paramtype>
</typedef>
<typedef name="TemperatureRange">
<paramtype kind="number" lo="-55" hi="125" format="%d"/>
</typedef>
</interface>
<tool name="QuartusTimequest" label="Timing analizer interface"
project="FPGA_project"
interface="QuartusTimequestInterface"
package="FPGA_package"
shell="/bin/bash"
description="Quartus static timing analyzer"
log-dir="QuartusLogDir"
state-dir="QuartusLocalDir"
inherits="QuartusToolPrototype"
>
<depends-list>
<depends state="QuartusSnapshotPlace"/>
</depends-list>
<!-- Command line parameters -->
<parameter id="lower_priority" label="Lower priority" tooltip="Option to lower priority of the current process."
type="Boolean" default="false" visible="true" readonly="false" omit="false" format="DoubleDashName"/>
<parameter id="parallel" label="# of processors to use" tooltip="Controls parallel compilation. If 0 is specified, the Quartus software
uses all processors detected on the system. Otherwise, the software attempts to use the specified number of processors.
Note: this feature is not licenced for the Web Edition and this parameter should be set to 1"
type="Cardinal" default="1" visible="true" readonly="false" omit="0" format="DoubleDash"/>
<parameter id="do_report_timing" label="Do report timing" tooltip="For every clock domain, this option reports the most critical
path based on setup slack. This command is equivalent to:&#xD;
report_timing -npaths 1 -to_clock $clock&#xD;
for every clock in the design (where $clock is the clock name)"
type="Boolean" default="false" visible="true" readonly="false" omit="false" format="DoubleDashName"/>
<parameter id="force_dat" label="Force delay annotation" tooltip="Using this option runs the Delay
Annotator and new delays are annotated on the compiler netlist. The compiler netlist is the source from which a timing netlist
is created. This option therefore ensures that new delays are used in the timing netlist. If this option is not set, the
default flow attempts to re-use existing delays in the compiler netlist (if available)"
type="Boolean" default="false" visible="true" readonly="false" omit="false" format="DoubleDashName"/>
<parameter id="grade" label="Temperature grade" tooltip="Option to specify the device temperature grade to use when running
the TimeQuest Timing Analyzer. This option is provided to support what-if analysis and is not recommended for final sign-off analysis"
type="TemperatureGradeType" default="i" visible="true" readonly="false" omit="i" format="DoubleDash"/>
<parameter id="model" label="Timing model" tooltip="Option to specify the timing model to use when running
the TimeQuest Timing Analyzer"
type="TimingModelType" default="fast" visible="true" readonly="false" omit="fast" format="DoubleDash"/>
<parameter id="multicorner" label="Multicorner" tooltip="Creates slack summaries for all available operating conditions,
enabling multi-corner timing analysis"
type="Boolean" default="true" visible="true" readonly="false" omit="true" format="DoubleDashName"/>
<parameter id="report_script" label="Report script" tooltip="Name of the custom Tcl script called at the end of
the default script, but before the netlist is destoryed. The behavior of the default script is equivalent to the
following if this option is specified:&#xD;
project_open 'rev'&#xD;
create_timing_netlist 'options'&#xD;
read_sdc if defined&#xD;
update_timing_netlist&#xD;
create summary panels&#xD;
&#xD;
# The custom script is loaded here&#xD;
source 'script_name'&#xD;
&#xD;
delete_netlist&#xD;
project_close"
type="Filename" default="" visible="true" readonly="false" omit="" format="DoubleDashName"/>
<parameter id="sdc" label="SDC file to read" tooltip="Name of the SDC File to read. If this option is not specified,
the TimeQuest Timing Analyzer reads the default 'rev'.sdc file if it exists"
type="Filename" default="" visible="true" readonly="false" omit="" format="DoubleDashName"/>
<parameter id="speed" label="Speed grade" tooltip="Option to specify the device speed grade to use when running
the TimeQuest Timing Analyzer"
type="Cardinal_1" default="" visible="true" readonly="false" omit="" format="DoubleDashName"/>
<parameter id="temperature" label="Temperature" tooltip="Option to specify the device temperature ℃ to use when running
the TimeQuest Timing Analyzer"
type="TemperatureRange" default="" visible="true" readonly="false" omit="" format="DoubleDashName"/>
<parameter id="voltage" label="Voltage" tooltip="Option to specify the device voltage (mV) to use when running
the TimeQuest Timing Analyzer"
type="Cardinal" default="" visible="true" readonly="false" omit="" format="DoubleDashName"/>
<input>
<group name="Timing analizer">
"lower_priority"
"parallel"
"do_report_timing"
"force_dat"
"multicorner"
"model"
"grade"
"report_script"
"sdc"
"speed"
"temperature"
"voltage"
</group>
</input>
<output>
<!-- Assemble quartus_sta arguments line -->
<line name="quartus_assemble_args"
dest="QuartusConsole"
sep=" ">
"set sta_args \""
"%do_report_timing"
"%force_dat"
"%grade"
"%lower_priority"
"%model"
"%multicorner"
"%parallel"
"%report_script"
"%sdc"
"%speed"
"%temperature"
"%voltage"
"\""
</line>
<!-- Start fitter -->
<line name="quartus_run_synth"
dest="QuartusConsole"
mark="``"
sep="\n"
prompt="@@FINISH@@"
success="@@FINISH@@"
log=""
stdout="parser_Quartus">
"cd ~/%QuartusProjectRoot"
"set projectName %%ProjectName"
"set outputDir ~/%QuartusProjectRoot/%QuartusRemoteDir"
"file mkdir $outputDir"
"load_package flow"
<!-- Reopen project if it was closed somehow -->
"if [is_project_open] {"
"puts \"Project is open, starting timing analizer\""
"} else {"
"project_open $projectName"
"}"
"if {[catch {execute_module -tool sta -args $sta_args} result]} {"
"puts \"Result: $result\""
"puts \"ERROR: Timing analizer faild. See the report file.\""
"} else {"
"puts \"INFO: Timing analysis was successful.\""
"}"
"puts \"@@FINISH@@\""
</line>
</output>
</tool>
</vdt-project>
......@@ -197,9 +197,11 @@
label="Place and route design"
icon="route66.png"
call="QuartusPlace"/>
<menuitem name="QuartusTimeQuest"
label="Timing analizer"
icon="clock.png"
call="QuartusTimequest"/>
</menu>
</menu>
<menu name="MainDesignMenu2"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment