使用TCL脚本语言操作Quartus(一)

转载地址:http://blog.csdn.net/fzxy002763/article/details/7215695

本文讨论的话题:
-TCL脚本在Quartus II中
-创建一个工程
-编译工程
-查看报告数据
-时序分析

TCL脚本的优势
-顾客分析:只提取你所需要的信息
-自动设置:在GUI界面中节省手动设置的步骤;其他的EDA设计软件的接口
-可重用性:能够更简单的管理维护以及获得相应文档

Quartus II支持TCL
-Quartus II软件提供了多方面的TCL支持
-四种可执行命令行包含编译TCL
-Quartus II的TCL API在14个Package中包含超过150个指令

TCL package
-TCL指令分组通过package的形式
-可用package的子集是被预加载的:减少内存占用;在TCL脚本中加载package是十分重要的
-不是所有的package都是能够在命令行中应用的:通过功能排列package;时序分析的package只能在quartus_tan上使用

package的通常用法

用法 描述
::quartus::project   创建一个工程,进行设置
::quartus::flow 编译工程,运行标准编译流程
::quartus::report 连接报告表,创建一个标准的报告
::quartus::timing 估算并且报告时序路径
::quartus::timing_report 列出所有的时序路径


 

-加载package
  load_package <name> [-version <version>]
      ::quartus::在这里可以被忽略的
  需要被指定交替使用的package

::quartus::project -建立工程
-创建一个工程,进行设置
-一些常用的指令
  工程和版本修订相关:project_new,project_open,project_close,create_revision,set_current_revision
  一般设置:set_global_assignment,set_instance_assignment
  特殊设置:

      set_location_assignment,set_input_delay,set_output_delay,

      set_multicycle_assignment,create_base_clock,timegroup


::quartus::project 实例
-创建一个工程,进行设置,使用fir_filter教程文件
Example:

project_new fir_filter -revision filtref -overwrite
set_global_assignment -name FAMILY Cyclone
set_global_assignment -name DEVICE EP1C6F256C6
set_global_assignment -name BDF_FILE filtref.bdf
set_global_assignment -name TOP_LEVEL_ENTITY filtref
set_location_assignment -to clk Pin_G1
create_base_clock -fmax "100 MHZ" -target clk clocka
create_relative_clock -base_clock clocka -divede 2 \
       -offset "500 ps" -target clkx2 clockb
set_multicycle_assignment -from clk -to clkx2 2
project_close


保存设置至QSF中

-设置不会全部自动存储在Quartus II的QSF(Quartus II的设置文件)中
-设置在使用前一定需要存储在QSF中,举例,在系统调用之前
-一些指令会自动存储在设置中:project_close,execute_flow,execute_moudle
-使用外部设置命令进行手动设置

外部设置方法
-通常使用在系统调用之前的命令行

例子:

project_open $project_name
set_global_assignments -name FAMILY Stratix
#Before calling quartus_map,save the FAMILY assignment
export_assignemnts
#Now call quartus_map
qexec "quartus_map $project_name"

 

-使用execute-moudle -tool map去替代qexec的设置自动保存

::quartus::flow -编译包
-编译工程并且运行命令流
-两种指令
  execute_flow <flow name>
  compile,check_ios,etc
  execute_moudle -tool <tool>
  map,fit,tan,etc

-Package不能默认的被加载:使用load_package于编译流程中任意一个指令之前

::quartus::flow 例子
-打开一个工程并且进行编译,在之前例子的基础上

例子:

load_package flow
project_open fir_filter -revision filtref
execute_flow -compile
project_close

 

-添加execute_flow -compile指令到之前的例子中
  建立工程并且编译通过一个脚本

小测验
-编写一段脚本能够建立一个工程并且编译
-通过编译脚本来合并工程

测验答案

load_package flow
project_new_filter -revision filtref -overwrite
set_global_assignment -name FAMILY Cyclone
set_global_assignment -name DEVICE EP1C6F256C6
set_global_assignment -name BDF_FILE filtref.bdf
set_global_assignment -name TOP_LEVEL_ENTITY filtref
set_location_assignment -to clk Pin_G1
create_base_clock -fmax "100 MHz" -target clk clocka
create_relative_clock -base_clock clocka -divide 2\
     -offset "500 ps" -target clkx2 clockb
set_multicycle_assignment -from clk -to clkx2 2
execute_flow -compile
project_close


::quartus::report -编译报告

-访问报告表单并且创建一个标准的报告
-一些通常被使用在报告上的指令
  报告管理:load_report,unload_report,create_report_panel
  关于报告的信息:get_report_panel_names,get_number_of_rows
  访问报告数据:get_report_panel_row,get_report_panel_data,get_timing_analysis_summary_result

报告形式
-通过控件名字进行数据访问
-控件是按照层级进行排列的
-多重访问通过使用||标识符
  <Folder Name> || <Panel Name>
-选择层级下的报告控件"Timing Analyzer || Timing Analyzer Settings"
-顶层报告不含有||
  流程记录控件被命名为流程记录
-控件是列表化的
  通过表格呈现
-行数通过数字标识,列通过姓名标识
-行数从零开始
-第零行含有列标题

获取报告例子
-row2 第二行
-row_name "Timing Models"  标题为“时序模型”
-col1 第一列
-col_name Setting  读取设置
通过TCL脚本读取第二行第一列的设置

例子:

get_report_panel_data -name "Timing Analyzer||Timing Analyzer Settings"\
   -row_name "Timing Models" -col_name Setting


::quartus::report 例子
-列出每一个错误的时序
-采用列表概要时序分析的结果
--列出时序错误的栏目
-列出所有错误的时序的TCL脚本

例子:

load_package report
project_open fit_filter -revision filtref
load_report
set panel_name "Timing Analyzer||Timing Analyzer Summary"
set num_panel_rows [get_number_of_rows -name $panel_name]
for {set i 1} {$ < $num_panel_rows} {incr i}{
  set summary_type [get_report_panel_data -name $panel_name \
   -row $i -col_name Type]
  if{[regexp {Clock Setup:(.*)}$summary_type match clk_name]}{
    set num_failed_paths [get_report_panel_data -name $panel_name \
      -row $i -col_name "Failed Paths"]
    puts "Clock domain $clk_name has $num_failed_paths failing paths"
  }
}
unload_report
project_close


小测验
-在编译时验证是否有遇到时序错误
  假设项目是打开的
  提示:多少时序错误会被遇到

答案

#Assume project is open;don't forget to load the report load_report
if {0==[get_report_panel_data -name \
      {Timing Analyzer||Timing Analyzer Summary} \
       -row_name {Total number of failed paths} \
       -col_name {Failed Paths}]}{
       puts "Design meets timing"
}else{
    puts "Design does not meets timing"
}
unload_report


 

::quartus::timing 时序验证
-估算仿真并且报告时序验证
  只能在quartus_tan中执行
-一些常用的指令
  create_timing_netlist
  report_timing
  delete_timing_netlist


时序的网络表
-时序的网络表一定在报告之前创建
-创建通过指令create_timing_netlist
-选项
  Minimum Timing Analysis 
  Specify Speed Grade of Target Part 
  Specify Post-Synthesis Netlist 


一般时序报告的指令
-估算并且报告时序路径分析在FLY上
  包含内存影响
  能够报告设计中的任意部分路径
      包含所有不含在时序报告表中的项目

-例子

report_timing -tsu
report_timing -clock_setup -clock_filter clk
report_timing -tpd -npaths 5


::quartus::timing 例子
-在两个文件中列出所有的时序错误的时序路径
  默认是完整规模的时序分析
  最小规模的时序分析

例子:

load_package timing
project_open fir_filter -revision filtref
create_timing_netlist
report_timing -clock_setup -src_clock_filter clk -clock_filter clkx2 \
  -all_failures -file slow_corner_cross_domain_paths.txt
delete_timing_netlist
create_timing_netlist -fast_model
report_timing -clock_hold -src_clock_filter clk -clock_filter clkx2 \
  -all_failures -file fast_corner_cross_domain_paths.txt
delete_timing_netlist
project_close


::quartus::timing_report -时序报告的package

-列出时序路径
  能够使用在quartus_tan中以及GUI界面中
-一种指令
  list_path
-在时序报告中报告时序路径
  只应用于预估算时序路径中
  非显性的时序路径不被报告
-相似的选项指令有report_timing

例子:

list_path -from inst4 -to inst5* -stdout

 


小测试
-在两种指令之间有什么不同
  report_timing
  list_path

答案
-list_path
  只能够在时序分析控件面板上的时序路径
-report_timing
  可以分析任意设计中的任意时序路径
-两种指令包含相似的选择

总结
-采用quartus II的TCL API指令
-通过一些例子来描述指令的用法

你可能感兴趣的:(Tcl)