【VIVADO使用1】設計流程介紹(重點是project mode和non-project mode)
1.vivado介紹
vivado用於xilinx fpga的設計和驗證,VIVADO除了支援傳統的rtl to bitfile的設計流程(即輸入是rtl程式碼,通過整合後,用vivado來產生bitfile),還支援了一種稱為系統級整合設計流程(基於IP的設計,即可將打包好的IP(或者稱為VIP)在VIVADO的block design中直接進行整合,然後產生bitfile的流程),第二種整合的方法其實相當於soc的整合,加速了整合時間,以及降低整合風險。
vivado支援如下feature:
- 邏輯模擬;
- IO管腳約束;----ug899
- power分析;
- timing分析;
- DRC檢查;
- 對implementation結果進行分析和修改(ECO?);
- 燒寫bitfile以及線上除錯;----ug908
- partial reconfiguration;--ug909和ug947
呼叫VIVADO的方式有兩種:1是常見的gui介面,也可以稱為IDE介面(integrated design environment);2是更快捷的tcl shell介面,另外在IDE介面下,也可以呼叫tcl命令來實現,可以呼叫tcl指令碼來跑整個流程,也可以跑流程的一部分;
----綜合和實現時有一些使用技巧,可能需要參考ug901和ug904.
----關於嵌入式處理器設計,可能需要參考ug898和ug940.
----關於vivado模擬,可參考ug900.
有些業界常用標準(這個在團隊越來越大的時候,會發現這些標準是多麼的有用),vivado提供了支援:
- vivado支援tcl指令碼執行方式,其對設計的約束支援XDC(xilinx design constraints),但是XDC得基礎語法來源於業界統一的約束規範SDC(synopsys design constraints),XDC和SDC本質上都是tcl語言,但是XDC和SDC只支援了tcl語言的一部分(例如變數,列表和運算子等),這個也可以參考《Vivado使用誤區與進階》系列;
- AXI4, IP-XACT,這個可能需要參考ug1118和ug896手冊(使用者IP是根據IP-XACT協議進行封裝的);
- 支援verilog,vhdl以及system verilog語法,HLS工具增加支援system C,C,C++,OpenCL;
2. VIVADO使用
簡單來說,vivado只有兩種方式:project mode和non-project mode。project mode下的有些feature(例如程式碼和結果管理,配置儲存,設計狀態,ip整合)在non-project mode下是沒有的。
在non-project mode下,每一步都需要由tcl命令執行,每一次編譯設計時,必須指定所有的設計檔案,設定工具配置引數,執行綜合和實現,產生bitfile和report檔案。
project mode和non-project mode下的tcl命令不是完全一樣的,有些project mode的命令是個wrapper,舉例說明:
1. project mode下,可以使用add_file命令去新增程式碼。而non-project mode下,只能使用read_verilog,read_vhdl,read_xdc以及其他read_*命令去讀進去各種程式碼檔案;
2.project mode下,可以使用launch_runs命令去載入預定義的run策略;在non-project mode下,wrapper下的各個命令opt_design, place_design,route_design必須要單獨依次執行;
3.絕大多數命令在兩種model下都可以使用,例如report命令;但是有些命令例如synth_design命令只存在在non-project mode,所以要小心不要混用;
在gui介面下執行的操作,會產生一個vivado.jou檔案,這個檔案內容是gui下執行 的tcl命令,可以用來作為參考。
舉例說明project mode和non-project mode下使用的tcl命令:
1. 專案建立,匯入檔案
project mode: create_project......add_files......import_files.....
non-project mode : read_verilog......read_vhdl......read_ip......read_xdc......read_edif......
2.綜合
project mode: launch_run synth_1, wait_on_run synth_1, open_run synth_1, report_timing_summary
non-project mode: synth_design, report_timing_summary, write_checkpoint;
3.實現
project mode: launch_run impl_1, wait_on_run impl_1, open_run impl_1, report_timing_summary
non-project mode: opt_design, write_checkpoint, place_design, write_checkpoint, route_design, report_timing_summary, write_checkpoint
4.bitfile產生
project mode: launch_run_impl_1 -to_step_write_bitstream, wait_on_run impl_1
non-project mode: write_bitstream;
3. tcl使用
用tcl來呼叫vivado的基本方法有如下幾種:
1.不用開啟gui介面,直接呼叫vivado自帶的tcl shell,開啟的方法有兩種,一種是“vivado -mode tcl”,另外一種是“start>all programs>xilinx design tools>vivado 201x.x>vivado 201x.x tcl shell”;
2.開啟vivado gui介面(“vivado -mode gui”),在介面下面的tcl console下輸入tcl命令;
3.tcl shell下執行tcl 指令碼,這種方法其實可以應用到自動化流程中,如果用批處理方式,則可直接得到bit file,然後如果需要檢視報告,重新開啟tcl shell去檢視,批處理方式為:“vivado -mode batch -source <your_tcl_script>”,需要注意的批處理方式下vivado執行完指令碼會自動退出;
4.gui介面下,在介面下面的tcl console下執行tcl指令碼;
即使使用了tcl shell去跑vivado流程,但是還是可以用gui介面的好處的。
4.vivado和版本控制工具
為了便於程式碼的版本控制,最方便的方式是使用non-project tcl指令碼流程,設計者把程式碼check out到本地,然後修改程式碼,以及增加程式碼,然後通過read_* tcl命令讀進設計,進行綜合和實現,結束後,再把程式碼提交到版本庫裡。
需要提交到版本庫的內容有:修改後的rtl程式碼,另外像design checkpoint,report,bitstream也可以根據需要提交。
除了上面這些需要提交,另外run指令碼也有可能需要提交,可以通過“write_project_tcl”命令(file>write project tcl)來產生,但是“write_project_tcl”不能包含“init.tcl”,所以init.tcl有可能也需要提交。
project mode下如果還想用版本控制,就比較蛋疼,不用考慮了。
關於xilinx ip的版本控制:
這個需要完善。
5 pcb設計互動
io管腳配置可以通過csv spreadsheet,rtl header,xdcfile作為互動檔案。---可參考ug899
6. project mode使用
這個略
7. non project mode使用
non project mode下,整個流程都會只使用tcl命令去編譯放在記憶體中設計,但是在non-projcet mode下,設計者必須要自己手動管理source file,report,perform drc,write dcp。
vip增加或者修改怎麼辦?
non project mode下,設計者需要自己掌控整個設計流程,設計者必須管理如下檔案:
1.hdl 程式碼,約束,IP;
2.管理依賴關係;
3.產生和儲存綜合和實現結果;
non project mode下tcl命令,基本命令有如下:
read_edif:讀進edif,ngc王彪檔案;
read_verilog:讀進verilog 和system verilog檔案;
read_vhdl:讀進vhdl檔案;
read_ip:讀進ip檔案(xci,xco);
read_checkpoint:載入一個checkpoint到memory;
read_xdc:讀進sdc或者xdc約束檔案;
set_param和set_property:多種功能,例如可以用來定義設計配置,tool設定,等等;
link_design:如果要使用網表文件?
synth_design:綜合;
opt_design:high-level 設計優化;
power_opt_design:插入clock gating降低功耗,可選;
place_design:
phys_opt_design:執行物理優化,優化時序,可選;
route_design:
report_*: 產生各種報告;
write_bitstream:產生bitstream,執行DRCs;
write_checkpoint:儲存流程中的design。一個design checkpoint由網表和優化約束,以及實現結果組成;
start_gui:
stop_gui:
一個non-project模式下tcl指令碼(bft設計專案)如下:
7.1 step 0 定義目錄
#step 0: define output directory area
set outputDir ./Tutorial_Created_Data/bft_output
file mkdir $outputDir
7.2 step 1 讀進設計和約束
#step 1: setup design sources and constraints
read_vhdl -library bftLib [ glob ./Sources/hdl/bftLib/*.vhdl ]
read_verilog [ glob ./Sources/hdl/*.v ]
read_xdc ./Sources/bft_full.xdc
7.3 step 2 綜合,report利用率,timing,寫checkpoint design
#step 2: run synthesis, report utilization and timing estimates, write checkpoint design synth_design -top bft -part xxxx-2 -flatten rebuilt write_checkpoint -force $outputDir/post_synth report_timing_summary -file $outputDir/post_synth_timing_summary.rpt report_power -file $outputDir/post_synth_power.rpt7.4 step 3 place和優化,report 利用率,timing,寫checkpoint design
opt_design
power_opt_design
place_design
phys_opt_design
write_checkpoint -force $outputDir/post_place
report_timing_summary -file $outputDir/post_place_timing_summary.rpt
7.5 step 4 route和優化,report實際利用率,timing,寫checkpoint design,drc,寫verilog和xdc out
#step 4 run router, report actual utilization and timing, write checkpoint design, run drc, write verilog and xdc out
route_design
write_checkpoint -force $outputDir/post_route
report_timing_summary -file $outputDir/post_route_timing_summary.rpt
report_timing -sort_by group -max_paths 100 -path_type summary -file $outputDir/post_route_timing.rpt
......
7.6 step 5 產生bitfile
write_bitstream -force $outputDir/bft.bit
dcp檔案使用:
dcp檔案相當於對當前設計做了一個snapshort,包含了網表,約束,實現結果。
通過dcp檔案,可以:
1.restore設計,如果需要的話;
2.設計分析;
3.定義約束;
4.繼續執行;
在設計的每個階段,都最好儲存dcp檔案,可以用來除錯問題。讀寫dcp檔案的命令是“write_checkpoint *.dcp”和"read_checkpoint *.dcp",在gui介面下可以用“open_checkpoint *.dcp”命令來開啟。
舉個例子:將已生成的dcp檔案放到一個獨立的資料夾,然後用tcl shell開啟start_gui,然後read dcp檔案,是可以看到網表文件和約束檔案,並且可以report_timing得到時序資訊,並且也可以write_bit來產生bitfile,所以dcp檔案對設計使用還是很方便的。
ug892
相關推薦
【VIVADO使用1】設計流程介紹(重點是project mode和non-project mode)
1.vivado介紹 vivado用於xilinx fpga的設計和驗證,VIVADO除了支援傳統的rtl to bitfile的設計流程(即輸入是rtl程式碼,通過整合後,用vivado來產生bitfile),還支援了一種稱為系統級整合設計流程(基於IP的設計,即可將打
【 MATLAB 】zplane 函式介紹(離散時間系統的零極圖)
zplane Zero-pole plot for discrete-time systems Syntax zplane(b,a) zplane(b,a), where b and a are
【LeetCode】設計題 design(共38題)
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } 【146】LRU Cache 【155】Min Stack 【170】Two Sum III - Data structure design 
函式和常用模組【day04】:函式介紹(一)
本節內容 1、函式介紹 2、函式定義 3、為什麼要使用函式 一、介紹 在我們以往的學習程式設計的過程當中,碰到的最多的兩張程式設計方式或者說程式設計方法:面向過程和麵向物件。其實不管是哪一種,其實都是程式設計的方法論而已。但是現在有一種更古老的程式設計方式:函數語言程式設計,以它的不儲存的狀態,
【 MATLAB 】prod 函式介紹(Product of array elements)
prod Product of array elements Syntax B = prod(A) B = prod(A,dim) B = prod(___,type) B = prod(___,nanflag) Description B = prod(A)
【 MATLAB 】any 函式介紹(確定是否有任意陣列元素非零)
any Determine if any array elements are nonzero(確定是否有任何陣列元素非零) Syntax B = any(A) B = any(A,dim)
【 MATLAB 】conj 函式介紹(複共軛)
conj Complex conjugate Syntax ZC = conj(Z) Description ZC = conj(Z) returns the complex conjugat
【 MATLAB 】freqz 函式介紹(數字濾波器的頻率響應)
freqz Frequency response of digital filter Syntax [h,w] = freqz(b,a,n) [h,w] = freqz(d,n) [h,w] = freqz(___,n,'whole') freqz(___) [
【 MATLAB 】filter 函式介紹(一維數字濾波器)
filter 1-D digital filter Syntax y = filter(b,a,x) y = filter(b,a,x,zi) y = filter(b,a,x,zi,dim) [y,zf] = filter(___) Description
【 MATLAB 】impz函式介紹(數字濾波器的脈衝響應)
這篇博文將MATLAB 幫助文件上的內容簡單的貼上,便於我寫其他博文引用,以及檢視使用。 impz Impulse response of digital filter Syntax [h,t]
【BZOJ4006】管道連接(動態規劃,斯坦納樹)
map 動態 code ring class new get efi include 題面 BZOJ 洛谷 題解 和這題區別不是很大吧。 基本上拿過來改一下就做完了。 #include<iostream> #include<cstdio> #incl
【轉】MySQL sql_mode 說明(及處理一起 sql_mode 引發的問題)
出錯 異常 set .cn ava 失敗 sub class 習慣 1. MySQL 莫名變成了 Strict SQL Mode 最近測試組那邊反應數據庫部分寫入失敗,app層提示是插入成功,但表裏面裏面沒有產生數據,而兩個寫入操作的另外一個表有數據。因為 insert 失
【POJ】3620Avoid The Lakes(求聯通塊的最大值)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9009 Accepted:&nb
【BZOJ1483】[HNOI2009]夢幻布丁(平衡樹啟發式合併+並查集)
題目: BZOJ1483 分析: (這題碼了一下午,碼了近250行,但是意外跑的比本校各位神仙稍快,特寫部落格紀念) 首先能看出一個顯然的結論:顏色段數只會變少不會變多。 我們考慮用並查集維護區間,對於每個區間維護它的起點和終點。建\(n\)棵平衡樹,第\(i\)棵存顏色為\(i\)的區間。把\(x
【Codeforces1073C】Vasya and Robot(二分+思維+字首和)
題目連結 C. Vasya and Robot time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output
【BZOJ4161】Shlw loves matrixI (常係數齊次線性遞推)
【BZOJ4161】Shlw loves matrixI (常係數齊次線性遞推) 題面 BZOJ 題解 \(k\)很小,可以直接暴力多項式乘法和取模。 然後就是常係數齊次線性遞推那套理論了,戳這裡 #include<iostream> #include<cstdio> #in
【CF869E】The Untended Antiquity(雜湊+二維樹狀陣列)
當覆蓋兩點的最小矩形不同時,一定不可達 這樣的問題不難想到經典的二維樹狀陣列+差分來支援二維區間覆蓋+查詢 對於覆蓋操作 我們可以差分的給這個矩陣里加上一個編號 對於操牆操作 我們可以反著減去這個編號 對於查詢 就查詢這兩個點的值是否相同 編號的累積不影響 因為只有在同一個牆內才會累積 注意 如果只是單單的把
【Linux】Linux網路程式設計(含常見伺服器模型,上篇)
基本資料結構介紹 Linux系統是通過提供巢狀字(socket)來進行網路程式設計的。網路程式通過socket和其他幾個函式的呼叫,會返回一個通用的檔案描述符,使用者可以將這個描述符看成普通的檔案的描述符來操作,這就是Linux的裝置無關性的好處。使用者可以通過向描述符的讀
【HDU】1159 Common Subsequence(DP、最長公共子序列)
【HDU】1159 Common Subsequence (DP、最長公共子序列) 題目內容 Problem Description A subsequence of a given sequence is the given sequence
【轉載】設計模式_模板方法(學習)
res bootstrap 重載方法 dex col 算法實現 選擇性 parent abstract 模板方法模式,一般是為了統一子類的算法實現步驟,所使用的一種手段或者說是方式。它在父類中定義一系列算法的步驟,而將具體的實現都推遲到子類。 通常情況下,模板方法模式用