Vivado 使用教程(個人總結)

Vivado 是 Xilinx 公司推出的一款用于 FPGA 設計的集成開發環境 (IDE),提供了從設計輸入到實現、驗證、調試和下載的完整流程。本文將詳細介紹 Vivado 的使用方法,包括項目創建、設計輸入、約束文件、綜合與實現、仿真、調試、下載配置等步驟。

一、創建新項目

1.1 啟動 Vivado

打開 Vivado 應用程序,進入歡迎界面。

1.2 創建新項目

  1. 在歡迎界面選擇“Create New Project”。
  2. 輸入項目名稱和路徑。
  3. 選擇“RTL Project”,并勾選“Do not specify sources at this time”。
  4. 選擇目標器件(如 XC7Z020-1CLG484)。
  5. 點擊“Finish”完成項目創建。

二、設計輸入

2.1 添加設計源文件

  1. 在 Flow Navigator 面板中,選擇“Add Sources”。
  2. 選擇“Add or Create Design Sources”并點擊“Next”。
  3. 點擊“Create File”以創建新的 Verilog 或 VHDL 文件。
  4. 輸入文件名并選擇文件類型(Verilog/VHDL)。
  5. 點擊“Finish”完成文件創建。

2.2 編輯設計源文件

  1. 在 Sources 面板中,雙擊新創建的源文件以打開編輯器。
  2. 編寫設計代碼。例如,以下是一個簡單的 Verilog 模塊:
module led_blink (input wire clk,input wire rst,output reg led
);reg [23:0] counter;always @(posedge clk or posedge rst) beginif (rst) begincounter <= 24'd0;led <= 1'b0;end else begincounter <= counter + 1;if (counter == 24'd9999999) begincounter <= 24'd0;led <= ~led;endend
endendmodule

三、添加約束文件

3.1 添加約束文件

  1. 在 Flow Navigator 面板中,選擇“Add Constraints”。
  2. 選擇“Create File”并命名文件(如“constraints.xdc”)。
  3. 點擊“Finish”完成文件創建。
  4. 在 Sources 面板中,雙擊新創建的約束文件以打開編輯器。
  5. 添加引腳約束。例如:
set_property PACKAGE_PIN W5 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]set_property PACKAGE_PIN U16 [get_ports rst]
set_property IOSTANDARD LVCMOS33 [get_ports rst]set_property PACKAGE_PIN V17 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports led]

3.2 約束文件細節

引腳約束:指定 FPGA 器件的引腳連接。

時序約束:定義時鐘周期、輸入和輸出延遲、時鐘偏移等時序要求。例如:

create_clock -period 10.000 -name clk [get_ports clk]
set_input_delay -max 5.000 -clock clk [get_ports rst]
set_output_delay -max 5.000 -clock clk [get_ports led]

布線約束:定義特定信號的布線要求,避免電源噪聲和串擾。例如:

set_property PULLUP true [get_ports rst]
set_property DRIVE 12 [get_ports led]

3.3 約束文件的優化

  1. 確保時序約束的準確性,避免過于寬松或嚴格。
  2. 針對關鍵路徑設置合理的時序約束,保證時序收斂。
  3. 使用分層約束文件,便于管理和維護。

四、綜合與實現

4.1 運行綜合(Synthesis)

  1. 在 Flow Navigator 面板中,選擇“Run Synthesis”。
  2. Vivado 將開始綜合設計。完成后,查看綜合報告以確認無錯誤。

4.2 查看綜合報告

  1. 在 Flow Navigator 面板中,選擇“Open Synthesized Design”。
  2. 打開“Reports”選項卡,查看綜合報告中的時序、資源利用情況等信息。

時序報告:檢查所有路徑是否滿足時序要求。

資源利用報告:查看邏輯單元、寄存器、內存塊、DSP 等資源的使用情況。

4.3 運行實現(Implementation)

  1. 在 Flow Navigator 面板中,選擇“Run Implementation”。
  2. Vivado 將開始實現設計。完成后,查看實現報告以確認無錯誤。

4.4 查看實現報告

  1. 在 Flow Navigator 面板中,選擇“Open Implemented Design”。
  2. 打開“Reports”選項卡,查看實現報告中的布線、時序等信息。

布線報告:檢查布線是否合理,是否存在長路徑或高擁堵區域。

時序報告:再次檢查時序收斂情況,確保所有路徑滿足時序要求。

4.5 優化布線

  1. 調整約束:檢查和優化約束文件,確保時序約束和布線約束合理。
  2. 重復綜合和實現:多次運行綜合和實現過程,逐步優化設計。
  3. 使用物理布局工具:在 Vivado 中使用物理布局工具查看和調整關鍵路徑的布線。

4.6 布局和資源優化示例

資源優化示例

假設我們有一個簡單的計數器設計:

module counter(input wire clk,input wire rst,output reg [3:0] count
);always @(posedge clk or posedge rst) beginif (rst)count <= 4'b0000;elsecount <= count + 1;end
endmodule

資源利用報告

  1. 在綜合完成后,查看綜合報告中的“Utilization Report”,檢查 LUT、FF、BRAM 和 DSP 的使用情況。
  2. 如果發現某些資源使用過多,可以嘗試以下優化:
    • 重寫代碼以減少不必要的邏輯。
    • 使用更高效的數據結構(如將組合邏輯轉換為查找表或存儲器)。
布局優化示例
  1. 在綜合和實現完成后,查看實現報告中的“Placement Report”和“Routing Report”。
  2. 檢查是否有信號的延遲過長或擁堵區域。
  3. 使用 Vivado 的“Floorplanning”工具進行手動布局優化:
    • 將相關模塊放置在相鄰區域內,減少布線長度。
    • 確保關鍵信號的路徑盡可能短,減少延遲。
    • 示例:將計數器和 LED 驅動邏輯放置在相鄰的邏輯塊中。

五、仿真

5.1 添加仿真源文件

  1. 在 Flow Navigator 面板中,選擇“Add Sources”。
  2. 選擇“Add or Create Simulation Sources”并點擊“Next”。
  3. 點擊“Create File”以創建新的仿真文件(如“testbench.v”)。
  4. 輸入文件名并選擇文件類型(Verilog/VHDL)。
  5. 點擊“Finish”完成文件創建。

5.2 編寫測試平臺

  1. 在 Sources 面板中,雙擊新創建的仿真文件以打開編輯器。
  2. 編寫測試平臺代碼。例如:
module counter(input wire clk,input wire rst,output reg [3:0] count
);always @(posedge clk or posedge rst) beginif (rst)count <= 4'b0000;elsecount <= count + 1;end
endmodule

5.3 運行仿真

  1. 在 Flow Navigator 面板中,選擇“Run Simulation”。
  2. 選擇“Run Behavioral Simulation”。
  3. 仿真完成后,查看波形窗口以驗證設計行為。

5.4 波形查看和分析

  1. 在仿真過程中,可以使用 Vivado 仿真器查看波形圖。
  2. 在波形窗口中,選擇感興趣的信號,點擊“Add to Wave”以添加到波形視圖中。
  3. 使用“Zoom In”和“Zoom Out”工具調整波形視圖。
  4. 在波形視圖中,檢查信號的時序關系和邏輯行為,驗證設計的正確性。

5.5 仿真報告

查看仿真日志,確認所有測試用例通過,并且沒有錯誤和警告。

六、調試

6.1 設置調試探針

  1. 在設計源文件中插入 ILA (Integrated Logic Analyzer) 核。
  2. 例如,將以下代碼添加到 Verilog 模塊中:
ila_0 ila_inst (.clk(clk),.probe0(count)
);

6.2 配置調試核

  1. 在 Flow Navigator 面板中,選擇“Open IP Integrator”。
  2. 在 IP Integrator 中添加 ILA 核,并將其連接到設計中相應的信號。

6.3 運行調試

  1. 在 Flow Navigator 面板中,選擇“Run Implementation”。
  2. 生成比特流文件并下載到 FPGA。
  3. 打開硬件管理器,配置 ILA 并運行調試。

七、下載配置

7.1 下載比特流文件

  1. 連接 FPGA 開發板與計算機。
  2. 在 Flow Navigator 面板中,選擇“Open Hardware Manager”。
  3. 選擇“Open Target”,然后選擇“Auto Connect”。
  4. 選擇“Program Device”,并選擇生成的比特流文件進行下載。

7.2 驗證設計

  1. 確認 FPGA 已正確配置。
  2. 驗證設計功能是否符合預期。

八、綜合和實現的優化技巧

8.1 Lint 檢查

Lint 檢查用于在代碼綜合之前查找和修復代碼中的潛在錯誤和不規范寫法。

  1. 在 Flow Navigator 面板中,選擇“Open Synthesized Design”。
  2. 選擇“Report”->“Report DRC”進行設計規則檢查。
  3. 選擇“Report”->“Report CDC”進行時鐘域交叉檢查。
  4. 查看報告中的警告和錯誤信息,修改代碼以修復這些問題。

8.2 時序優化

  1. 在綜合和實現過程中,檢查時序報告,確保所有路徑滿足時序要求。
  2. 使用多重約束(Multi-Constraint)文件,根據不同的工作條件設置不同的時序約束。
  3. 調整代碼結構,優化關鍵路徑,減少路徑延遲。

8.3 資源優化

  1. 檢查資源利用報告,確保設計在目標 FPGA 上的資源利用率合理。
  2. 使用高效的數據結構和算法,減少資源消耗。
  3. 使用分層設計,將復雜模塊分解為多個子模塊,提高設計的可維護性和可擴展性。

8.4 物理布局優化

  1. 在物理布局階段,使用 Vivado 提供的布局工具,手動調整關鍵路徑的布局。
  2. 確保關鍵信號布線盡量短,減少布線延遲。
  3. 使用區域約束(Area Constraints),將相關模塊放置在相鄰的區域內,減少信號延遲。

8.5 布局和資源優化示例

假設我們有一個簡單的計數器設計:

module counter(input wire clk,input wire rst,output reg [3:0] count
);always @(posedge clk or posedge rst) beginif (rst)count <= 4'b0000;elsecount <= count + 1;end
endmodule

資源優化示例

  1. 在綜合完成后,查看綜合報告中的“Utilization Report”,檢查 LUT、FF、BRAM 和 DSP 的使用情況。
  2. 如果發現某些資源使用過多,可以嘗試以下優化:
    • 重寫代碼以減少不必要的邏輯。
    • 使用更高效的數據結構(如將組合邏輯轉換為查找表或存儲器)。

布局優化示例

  1. 在綜合和實現完成后,查看實現報告中的“Placement Report”和“Routing Report”。
  2. 檢查是否有信號的延遲過長或擁堵區域。
  3. 使用 Vivado 的“Floorplanning”工具進行手動布局優化:
    • 將相關模塊放置在相鄰區域內,減少布線長度。
    • 確保關鍵信號的路徑盡可能短,減少延遲。
    • 示例:將計數器和 LED 驅動邏輯放置在相鄰的邏輯塊中。

九、實機條件下的調試

9.1 設置和配置調試核

  1. 在設計中添加 ILA 核,捕獲實際工作條件下的信號。
  2. 配置 ILA 核,選擇要捕獲的信號和觸發條件。例如:
ila_0 ila_inst (.clk(clk),.probe0(count)
);

9.2 運行實機調試

  1. 生成比特流文件并下載到 FPGA。
  2. 連接調試設備(如 JTAG 調試器)與 FPGA 開發板。
  3. 在 Vivado 中打開硬件管理器,選擇“Open Hardware Manager”。
  4. 選擇“Open Target”,然后選擇“Auto Connect”。
  5. 在硬件管理器中配置 ILA,設置觸發條件并捕獲信號數據。
  6. 分析捕獲到的波形數據,檢查信號時序和邏輯行為。

9.3 調試步驟示例

  1. 在硬件管理器中,選擇“Add Probes”添加需要監控的信號。
  2. 設置觸發條件,例如設置計數器達到特定值時觸發捕獲。
  3. 開始捕獲數據,運行 FPGA 設計,觸發器觸發時自動捕獲信號。
  4. 分析波形圖,檢查信號是否按照預期工作。
  5. 根據需要調整設計,重新生成比特流文件,并再次下載和驗證。

十、總結

Vivado 是一個功能強大的 FPGA 開發工具,提供了從設計輸入到實現、驗證、調試和下載的完整流程。本文詳細介紹了 Vivado 的使用方法,包括項目創建、設計輸入、約束文件、綜合與實現、仿真、調試、下載配置、優化技巧等步驟。通過這些內容的學習和實踐,可以有效提高 FPGA 設計的性能和可靠性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15462.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15462.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15462.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

設計模式--責任鏈模式

責任鏈模式是一種行為設計模式&#xff0c;它允許將請求沿著處理者鏈進行發送。請求會沿鏈傳遞&#xff0c;直到某個處理者對象負責處理它。這種模式在許多應用場景中非常有用&#xff0c;例如在處理用戶輸入、過濾請求以及實現多級審核時。 應用場景 處理用戶輸入&#xff1…

kafka之consumer參數auto.offset.reset

Kafka的auto.offset.reset 參數是用于指定消費者在啟動時如何處理偏移量&#xff08;offset&#xff09;的。這個參數有三個主要的取值&#xff1a;earliest、latest和none。 earliest&#xff1a; 當各分區下有已提交的offset時&#xff0c;從提交的offset開始消費&#xff1b…

HCIP-VLAN綜合實驗

一、實驗拓撲 二、實驗要求 1、pc1和pc3所在接口為access;屬于vlan 2; PC2/PC4/PC5/PC6處于同一網段’其中PC2可以訪問PC4/PC5/PC6; PC4可以訪問PC6&#xff1b;PC5不能訪問PC6&#xff1b; 2、PC1/PC3與PC2/PC4/PC5/PC6不在同一個網段&#xff1b; 3、所有PC通過DHCP獲取IP…

棧和隊列的應用-計算器實例

‘’‘ &#xff08;11 3&#xff09; 2 -5 順序存儲棧來實現 ’‘’ sqstack.h #ifndef SQSTACK_H__ #define SQSTACK_H__ #define MAXSIZE 32 typedef int datatype typedef struct node_st {datatype data[MAXSIZE]; int top;}sqstack;sqstack *st_create(void); int s…

閑話 .NET(5):.NET Core 有什么優勢?

前言 .NET Core 并不是 .NET FrameWork 的升級版&#xff0c;它是一個為滿足新一代的軟件設計要求而從頭重新開發的開發框架和平臺&#xff0c;所以它沒有 .NET FrameWork 的歷史包袱&#xff0c;相對于 .NET FrameWork&#xff0c;它具備很多優勢。 .NET Core 有哪些優勢&am…

智算中心帶寬漫談 -- 開篇

隱秘的角落 帶寬對高性能計算是一個永恒的話題&#xff0c;本質上&#xff0c;帶寬即數據交換的速率&#xff0c;單位時間的傳輸數據越多&#xff0c;帶寬就越高&#xff0c;但對高性能計算來說&#xff0c;對高帶寬的渴求永無止境&#xff0c;好比宏觀現實世界中的車道&#…

QT實現線程的四種方式(QThread、QRunnable和QThreadPool、QObject、QtConcurrent)

在當今高性能計算需求日益增長的背景下,多線程編程已成為提升應用性能的重要手段。Qt框架,作為一個功能全面、跨平臺的C++應用程序開發工具包,為我們提供了多種多線程實現方案。本文將介紹QThread類在Qt多線程編程中的應用,以及如何通過QRunnable和QThreadPool、QObject的m…

C# GDI+ 繪制文字不同的操作系統渲染文字大小不同

一、C# GDI 繪制文字不同的操作系統渲染文字大小不同 原因&#xff1a;使用Font 字體的時候&#xff0c;沒有指定字體渲染的單位。 不同系統的默認字體單位會不同。 二、解決方案&#xff1a; 在指定字體的時候&#xff0c;指定字體大小&#xff0c;同時也要設置字體的單位 …

sqlserver 創建表,列及表,列描述

-- 創建表 CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,EmployeeName NVARCHAR(100),EmployeeEmail NVARCHAR(100) );-- 為表添加描述 EXEC sp_addextendedproperty name NMS_Description, value N員工信息表, level0type NSchema, level0name dbo, level1type N…

springboot整合kkFileView部署,前端使用

前言&#xff1a; 官方文檔&#xff1a;https://kkfileview.keking.cn/zh-cn/docs/production.html docker方式或加入星球獲取發行包直接獲取啟動&#xff0c;無需以下步驟&#xff1a; 拉取鏡像# 網絡環境方便訪問docker中央倉庫 docker pull keking/kkfileview:4.1.0# 網…

pytest框架的代碼如何用vscode進行debug

{"version": "0.2.0","configurations": [{"name": "Python: Run My Module", // 配置名稱&#xff0c;將在調試配置下拉列表中顯示"type": "debugpy", // 調試類型&#xff0c;這里是Python"requ…

二元關系表示

一、二元關系的定義和表示 什么是二元關系&#xff1f;對集合A和B&#xff0c;A\timesB的任意子集R為A到B的一個二元關系。當AB時&#xff0c;A\timesA的任一子集R稱為A上的一個二元關系。在不引起誤解的情況下&#xff0c;二元關系可簡稱關系。 若|A|m,|B|n&#xff0c;則A到…

常用字體映射字典

表格形式 英文字體名稱中文字體名稱SimSun宋體SimHei黑體KaiTi楷體FangSong仿宋YouYuan幼圓LiSu隸書NSimSun新宋體SimSun-ExtB宋體-ExtBFangSong_GB2312仿宋_GB2312KaiTi_GB2312楷體_GB2312Microsoft YaHei微軟雅黑Microsoft JhengHei微軟正黑體STXihei華文細黑STKaiti華文楷體…

手機版AI寫作軟件哪個好用?5款AI寫作軟件分享

在這個快節湊的時代&#xff0c;人們對于高效、便捷的創作方式很是追求。尤其是在人工智能技術發展迅速的今天&#xff0c;AI寫作軟件的出現&#xff0c;讓很多自媒體創作者都會想到在手機上面進內容創作&#xff0c;這樣不僅能提高工作效率&#xff0c;而且工作的自由度會更高…

自動化運維(AIOps): 現代IT管理的革命

在數字化時代&#xff0c;企業的 IT 系統變得愈加復雜。從云計算到大數據&#xff0c;從物聯網到人工智能&#xff0c;技術的飛速發展使得企業面臨前所未有的挑戰。這種復雜性不僅體現在數據量和數據流的增加上&#xff0c;還包括高成本和高錯誤率的運維需求。在此背景下&#…

基于51單片機的盆栽自動澆花系統

一.硬件方案 工作原理是濕度傳感器將采集到的數據直接傳送到ADC0832的IN端作為輸入的模擬信號。選用濕度傳感器和AD轉換&#xff0c;電路內部包含有濕度采集、AD轉換、單片機譯碼顯示等功能。單片機需要采集數據時&#xff0c;發出指令啟動A/D轉換器工作&#xff0c;ADC0832根…

Hive 變量定義與引用

文章目錄 1.背景2.Hive 變量命名空間查看變量設置變量引用變量 參考文獻 1.背景 在書寫 Hive SQL 時&#xff0c;有時需要將重復出現的值從 SQL 分離出來&#xff0c;以變量的方式表示和引用。 設置變量和引用變量可以帶來以下幾個好處&#xff1a; 簡化查詢語句&#xff1a;…

Android 實現豎排文本(垂直方向顯示)

Android 實現豎排文本-垂直方向顯示 前言效果圖代碼實現方式一 Custom View1. 自定義視圖 VerticalTextView2. 在xml布局文件中使用3. 設置文本內容 方式二 使用 TextView 的 rotation屬性方式三 使用帶有跨距文本的TextView1. 自定義視圖 VerticalTextView2. 在xml布局文件中使…

AI學習指南數學工具篇-凸優化基礎知識凸函數

AI學習指南數學工具篇-凸優化基礎知識凸函數 引言 在凸優化過程中&#xff0c;凸函數是一個非常重要的概念&#xff0c;它在機器學習、深度學習和優化算法中都有廣泛的應用。凸函數具有很多獨特的性質&#xff0c;能夠幫助我們更好地理解優化問題并且設計高效的優化算法。本文…

【Golang】Golang獲取Gin框架PostForm上傳的文件

文章目錄 前言一、函數解釋二、代碼實現三、總結 前言 在Web開發中&#xff0c;文件上傳是一項常見的功能。例如&#xff0c;用戶可能需要上傳頭像、文檔或其他類型的文件。在Go語言的Gin框架中&#xff0c;我們可以很方便地處理文件上傳。在這篇博客中&#xff0c;我將解釋如…