轉載地址: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指令
-通過一些例子來描述指令的用法