本文讨论的话题:

-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指令

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

python tcl quartus_TCL脚本在Quartus II中的应用相关推荐

  1. Vivado和Quartus ii 中工程存档(Archive project)及打开

    下面介绍下在Quartus ii 中进行工程存档(Archive project)以及打开存档工程的操作方法,当需要把工程发给其它电脑时,用工程存档比较方便,空间占用小,而且不会出现文件丢失的情况.我 ...

  2. Quartus ii 中ROM ip核的应用

    ROM: read only memory: 掉电不丢失数据 RAM可以被配置为ROM 实验内容: 将一组固定数据(三角波)存储在FPGA中使用IP核构建的片上ROM中,开发板上电后,系统开始从ROM ...

  3. Quartus II 中的SignalTap II 的使用

    首先使用Signal Tap II的条件是你的资源空间还有很大,而且使用完后要把他进行手动屏蔽,以避免占用内存. 1.把顶层文件全编译一下(任何的顶层文件都可以,只要有你想要的信号). 2.打开TOO ...

  4. quartus ii中的dff元件(D触发器)prn引脚的含义

    在使用Quartus仿真DFF时发现它有一个PRN引脚,上网查了一下它的含义,虽然是一个比较基础的问题,但是我在搜索的过程中,发现了百度知道和一篇以此回答为参考的CSDN文章,文章中仿真波形和它的文字 ...

  5. 【FPGA学习】Quartus II中NCO与FFT ip核的仿真

    FPGA有许多IP核使用起来很方便,本篇博客记录一下NCO以及FFT的IP核使用和学习,实验平台是Altera公司的EP4CE40F23C8N 参考资料: Altera--NCO IP核详解 ALTE ...

  6. 【FPGA学习】Quartus II中Testbench编写

    在编写FPGA的程序时,常常要在ModelSim软件上进行仿真,来验证功能 而要进行仿真,就要先编写Testbench 我们可以使用QuartusII总动生成一个Testbench的模板 选择Proc ...

  7. quartus ii中的dff元件(D触发器)中,prn和clrn引脚的含义

    首先: PRN是异步置位,可以将输出Q置为输入D,CLRN是异步复位,将输出Q置低 问:那PRN与CLK的作用不是一样了? 追答 不一样啊,PRN是异步控制端优先级比CLK高,CLK是寄存器的时钟. ...

  8. quartus管脚分配后需要保存吗_Quartus II中FPGA的管脚分配保存方法

    一.摘要 将Quartus II中FPGA管脚的分配及保存方法做一个汇总. 二.管脚分配方法 FPGA 的管脚分配,除了在QII软件中,选择"Assignments ->Pin&quo ...

  9. Quartus II与 ModelSim功能仿真与后仿真扫盲(转)

    时间:2007-04-20   作者:yangyh80@21cn.com 本文主要描述了如何在QUARTUS II 中输入程序文件,生成网表及标准延时文件,然后通过MODELSIM 进行功能仿真与后仿 ...

最新文章

  1. HDU 1011-Starship Troopers(树形背包)
  2. 为什么逻辑思维不做小程序了而开发APP得到
  3. [MATLAB粒子模拟笔记]差分泊松方程求静电场分布
  4. [深度学习基础] 4. 卷积神经网络
  5. ZOJ4024 Peak
  6. 大数据学习笔记16:MR案例——计算学生平均成绩
  7. jquery获得当前元素父级元素_jquery怎么获取当前元素的父元素
  8. 安装LabelMe出现ERROR: No matching distribution found for labelme解决方式(关闭网络代理+使用清华源)
  9. Mysql学习笔记(二):子查询与连接
  10. 应该如何理解mobx_MobX入门
  11. python播放音乐同步歌词_Python点阵字玩转动态歌词
  12. PS-第二天-图像合成与渐变工具
  13. 【三维地图】开发攻略 —— 详解“GeoJSON”技术和应用场景
  14. OpenCascade Primitives BRep-Torus
  15. c++ 二进制文件读写
  16. Fiddler的入门使用
  17. 这就是你要找的Spring-ioc简单入门!
  18. 微信小程序进度条组件自定义数字_微信小程序之圆形进度条(自定义组件)
  19. echarts折线图实现滑动平移,横坐标过多时隐藏部分横坐标,通过滑动平移显示隐藏的部分
  20. 计算机基础英语文档,最强计算机基础英语总结

热门文章

  1. 【Q】之Linux中的防火墙netfilter iptables
  2. 08 域控 架构主机 转移_域控制器的角色转移与抢占
  3. 上海交通大学出版社python答案_线性代数答案上海交通大学出版社
  4. 蚂蚁御术:我的前端十年成长之路
  5. SIGMOD回顾:数据库国际大咖组团来阿里,他们都说了啥?
  6. 地平线:黎明时分中的云渲染技术
  7. java jdbc数据库五种连接方式
  8. 最新linux面试题
  9. SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
  10. 62. Unique Paths