使用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指令
-通过一些例子来描述指令的用法

优质内容筛选与推荐>>
1、编程中的美学
2、进程序名得到进程ID和句柄与进程的公司名(使用快照和GetPeFileCompany和VerQueryValueW等函数)
3、简单实现WEB程序在线安装 (附源码)
4、大家都能看懂的 canvas基础教程
5、[置顶] WPF数据修改demo


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号