yhzhangstrive的个人空间 https://blog.eetop.cn/280659 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

【转】FPGA学习笔记6-Quartus II中的TCL脚本

已有 5946 次阅读| 2013-4-16 22:21 |个人分类:转载

议程
-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的设置文件)中
-设置在使用前一定需要存储在QSFzhong 
  举例,在系统调用之前
-一些指令会自动存储在设置中
  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指令
-通过一些例子来描述指令的用法


转自: http://blog.csdn.net/fzxy002763/article/details/7215695



http://blog.csdn.net/fzxy002763/article/details/7215695


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 0

    好友
  • 4

    获赞
  • 6

    评论
  • 2422

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-28 04:34 , Processed in 0.030094 second(s), 16 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部