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指令
-通过一些例子来描述指令的用法
python tcl quartus_TCL脚本在Quartus II中的应用相关推荐
- Vivado和Quartus ii 中工程存档(Archive project)及打开
下面介绍下在Quartus ii 中进行工程存档(Archive project)以及打开存档工程的操作方法,当需要把工程发给其它电脑时,用工程存档比较方便,空间占用小,而且不会出现文件丢失的情况.我 ...
- Quartus ii 中ROM ip核的应用
ROM: read only memory: 掉电不丢失数据 RAM可以被配置为ROM 实验内容: 将一组固定数据(三角波)存储在FPGA中使用IP核构建的片上ROM中,开发板上电后,系统开始从ROM ...
- Quartus II 中的SignalTap II 的使用
首先使用Signal Tap II的条件是你的资源空间还有很大,而且使用完后要把他进行手动屏蔽,以避免占用内存. 1.把顶层文件全编译一下(任何的顶层文件都可以,只要有你想要的信号). 2.打开TOO ...
- quartus ii中的dff元件(D触发器)prn引脚的含义
在使用Quartus仿真DFF时发现它有一个PRN引脚,上网查了一下它的含义,虽然是一个比较基础的问题,但是我在搜索的过程中,发现了百度知道和一篇以此回答为参考的CSDN文章,文章中仿真波形和它的文字 ...
- 【FPGA学习】Quartus II中NCO与FFT ip核的仿真
FPGA有许多IP核使用起来很方便,本篇博客记录一下NCO以及FFT的IP核使用和学习,实验平台是Altera公司的EP4CE40F23C8N 参考资料: Altera--NCO IP核详解 ALTE ...
- 【FPGA学习】Quartus II中Testbench编写
在编写FPGA的程序时,常常要在ModelSim软件上进行仿真,来验证功能 而要进行仿真,就要先编写Testbench 我们可以使用QuartusII总动生成一个Testbench的模板 选择Proc ...
- quartus ii中的dff元件(D触发器)中,prn和clrn引脚的含义
首先: PRN是异步置位,可以将输出Q置为输入D,CLRN是异步复位,将输出Q置低 问:那PRN与CLK的作用不是一样了? 追答 不一样啊,PRN是异步控制端优先级比CLK高,CLK是寄存器的时钟. ...
- quartus管脚分配后需要保存吗_Quartus II中FPGA的管脚分配保存方法
一.摘要 将Quartus II中FPGA管脚的分配及保存方法做一个汇总. 二.管脚分配方法 FPGA 的管脚分配,除了在QII软件中,选择"Assignments ->Pin&quo ...
- Quartus II与 ModelSim功能仿真与后仿真扫盲(转)
时间:2007-04-20 作者:yangyh80@21cn.com 本文主要描述了如何在QUARTUS II 中输入程序文件,生成网表及标准延时文件,然后通过MODELSIM 进行功能仿真与后仿 ...
最新文章
- HDU 1011-Starship Troopers(树形背包)
- 为什么逻辑思维不做小程序了而开发APP得到
- [MATLAB粒子模拟笔记]差分泊松方程求静电场分布
- [深度学习基础] 4. 卷积神经网络
- ZOJ4024 Peak
- 大数据学习笔记16:MR案例——计算学生平均成绩
- jquery获得当前元素父级元素_jquery怎么获取当前元素的父元素
- 安装LabelMe出现ERROR: No matching distribution found for labelme解决方式(关闭网络代理+使用清华源)
- Mysql学习笔记(二):子查询与连接
- 应该如何理解mobx_MobX入门
- python播放音乐同步歌词_Python点阵字玩转动态歌词
- PS-第二天-图像合成与渐变工具
- 【三维地图】开发攻略 —— 详解“GeoJSON”技术和应用场景
- OpenCascade Primitives BRep-Torus
- c++ 二进制文件读写
- Fiddler的入门使用
- 这就是你要找的Spring-ioc简单入门!
- 微信小程序进度条组件自定义数字_微信小程序之圆形进度条(自定义组件)
- echarts折线图实现滑动平移,横坐标过多时隐藏部分横坐标,通过滑动平移显示隐藏的部分
- 计算机基础英语文档,最强计算机基础英语总结
热门文章
- 【Q】之Linux中的防火墙netfilter iptables
- 08 域控 架构主机 转移_域控制器的角色转移与抢占
- 上海交通大学出版社python答案_线性代数答案上海交通大学出版社
- 蚂蚁御术:我的前端十年成长之路
- SIGMOD回顾:数据库国际大咖组团来阿里,他们都说了啥?
- 地平线:黎明时分中的云渲染技术
- java jdbc数据库五种连接方式
- 最新linux面试题
- SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
- 62. Unique Paths