python tcl quartus_[转载]TCL脚本在Quartus II中的应用

本文讨论的话题:

-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 [-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

compile,check_ios,etc

execute_moudle -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

报告形式

-通过控件名字进行数据访问

-控件是按照层级进行排列的

-多重访问通过使用||标识符

||

-选择层级下的报告控件"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指令

-通过一些例子来描述指令的用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值