1. 程式人生 > >【VIVADO使用1】設計流程介紹(重點是project mode和non-project mode)

【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:

  1. 邏輯模擬;
  2. IO管腳約束;----ug899
  3. power分析;
  4. timing分析;
  5. DRC檢查;
  6. 對implementation結果進行分析和修改(ECO?);
  7. 燒寫bitfile以及線上除錯;----ug908
  8. partial reconfiguration;--ug909和ug947

呼叫VIVADO的方式有兩種:1是常見的gui介面,也可以稱為IDE介面(integrated design environment);2是更快捷的tcl shell介面,另外在IDE介面下,也可以呼叫tcl命令來實現,可以呼叫tcl指令碼來跑整個流程,也可以跑流程的一部分;

----綜合和實現時有一些使用技巧,可能需要參考ug901和ug904.

----關於嵌入式處理器設計,可能需要參考ug898和ug940.

----關於vivado模擬,可參考ug900.

有些業界常用標準(這個在團隊越來越大的時候,會發現這些標準是多麼的有用),vivado提供了支援:

  1. vivado支援tcl指令碼執行方式,其對設計的約束支援XDC(xilinx design constraints),但是XDC得基礎語法來源於業界統一的約束規範SDC(synopsys design constraints),XDC和SDC本質上都是tcl語言,但是XDC和SDC只支援了tcl語言的一部分(例如變數,列表和運算子等),這個也可以參考《Vivado使用誤區與進階》系列;
  2. AXI4, IP-XACT,這個可能需要參考ug1118和ug896手冊(使用者IP是根據IP-XACT協議進行封裝的);
  3. 支援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.rpt
7.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 modenon-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 失

POJ3620Avoid The Lakes求聯通塊的最大值

Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9009   Accepted:&nb

BZOJ1483[HNOI2009]夢幻布丁平衡樹啟發式合併+並查集

題目: BZOJ1483 分析: (這題碼了一下午,碼了近250行,但是意外跑的比本校各位神仙稍快,特寫部落格紀念) 首先能看出一個顯然的結論:顏色段數只會變少不會變多。 我們考慮用並查集維護區間,對於每個區間維護它的起點和終點。建\(n\)棵平衡樹,第\(i\)棵存顏色為\(i\)的區間。把\(x

Codeforces1073CVasya and Robot二分+思維+字首

題目連結 C. Vasya and Robot time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output

BZOJ4161Shlw loves matrixI 常係數齊次線性遞推

【BZOJ4161】Shlw loves matrixI (常係數齊次線性遞推) 題面 BZOJ 題解 \(k\)很小,可以直接暴力多項式乘法和取模。 然後就是常係數齊次線性遞推那套理論了,戳這裡 #include<iostream> #include<cstdio> #in

CF869EThe Untended Antiquity雜湊+二維樹狀陣列

當覆蓋兩點的最小矩形不同時,一定不可達 這樣的問題不難想到經典的二維樹狀陣列+差分來支援二維區間覆蓋+查詢 對於覆蓋操作 我們可以差分的給這個矩陣里加上一個編號 對於操牆操作 我們可以反著減去這個編號 對於查詢 就查詢這兩個點的值是否相同 編號的累積不影響 因為只有在同一個牆內才會累積 注意 如果只是單單的把

LinuxLinux網路程式設計含常見伺服器模型,上篇

基本資料結構介紹 Linux系統是通過提供巢狀字(socket)來進行網路程式設計的。網路程式通過socket和其他幾個函式的呼叫,會返回一個通用的檔案描述符,使用者可以將這個描述符看成普通的檔案的描述符來操作,這就是Linux的裝置無關性的好處。使用者可以通過向描述符的讀

HDU1159 Common SubsequenceDP、最長公共子序列

【HDU】1159 Common Subsequence (DP、最長公共子序列) 題目內容 Problem Description A subsequence of a given sequence is the given sequence

轉載設計模式_模板方法學習

res bootstrap 重載方法 dex col 算法實現 選擇性 parent abstract 模板方法模式,一般是為了統一子類的算法實現步驟,所使用的一種手段或者說是方式。它在父類中定義一系列算法的步驟,而將具體的實現都推遲到子類。 通常情況下,模板方法模式用