Zynq開發實踐(FPGA之第一個vivado工程)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】

? ? ? ? 數字電路設計,如果僅僅是寫寫代碼,做做verilog仿真,那么其實是不需要轉移到fpga上面的。這就好比是算法工程師,他做好了算法,寫好了matlab仿真之后,如果僅僅是為了發論文,這個時候其實目的已經達到了。但是我們最終是需要用verilog做產品的,也就是所有的電路都要port到fpga上的,這個時候就要想辦法創建fpga工程,下載程序了。

1、從ise到vivado、vitis

? ? ? ? 我們使用的芯片是zynq,主要是7010和7020。最早xilinx fpga編譯的工具叫ise,它只能做fpga的開發,現在加了arm之后,ise變成了vivado,最新的軟件叫vitis。相比較原來的軟件,vivado不僅安裝大小大了很多,功能也多了不少,它既可以做fpga的開發,還可以做arm的開發、hls的開發。如果不涉及到linux系統的開發,vivado windows版本其實可以覆蓋所有的開發內容。

2、vivado的開發步驟

? ? ? ? 目前為止,我們使用vivado還是先做fpga方面的開發。一個fpga工程在構建之前,最好已經做好了仿真方面的測試。比如我們之前做的iverilog+vvp+gtkwave就是仿真測試。如果通想過不停編譯fpga工程來進行在線測試,效率是非常低的。

? ? ? ? 一般vivado的開發步驟分成這三個步驟,首先是綜合,也就是把verilog語言轉變成各種網表。其次是實現布局布線,也就是把這些網表映射到fpga的硬件資源上面,中間會涉及到各種條件的約束。最后就是bitstream的生成。有了這個bitstream,就可以下載到具體的fpga上面,檢測一下執行效果了。

3、vivado最重要的優點就是軟硬協同開發

? ? ? ? 之前用ise開發fpga,大部分就是純數字的電路開發。但是vivado的開發思路有了很大的轉變。就拿zynq來說,由于有硬核arm和mio多功能接口,大部分外設、協議開發的工作其實都可以arm+軟件來完成。這個時候fpga部分就可以做一些算法加速、硬件擴展的工作。因為此時fpga做成的ip就可以為cpu所調用,這樣整個系統又靈活、效率又高。ps,也就是arm部分可以專注于業務和流程,而pl,也就是fpga專注于性能和接口拓展,兩者緊密合作,做自己擅長的工作即可。以前雖然也這么做,但是兩者是通過分列式元器件實現的,現在是合二為一了。

4、先fpga,再block design,最后sdk開發

? ? ? ? 很多ip其實是vivado自帶的,比如pll、rom、ram、fifo、ddr contrller、dma這些。但是很多行業特定的算法,都是沒有的,這部分就要自己寫。所以我們做好fpga開發之后,一般就會套一個axi接口,這樣就可以為cpu所調用。

? ? ? ? 所謂的block design,就是從數字電路層面構建一個系統。里面有arm cpu,有reset系統,有axi總線,有dma,還有各種各樣的外設ip、算法ip,最后把它們串聯成系統,構建一個超級fpga工程。這樣的設計既有系統性,還有靈活性。

? ? ? ? 最后就是sdk開發,最初的時候可以專注于裸機開發,或者是rtos開發。如ps自帶的mio接口,使用的也是固化ip,類似于gpio、uart、iic、sd、eth部分,這部分完全不需要pl的參與,就和mcu開發是一樣的。如果是ps端口不夠,就可以用pl拓展端口,或者直接把pl的算法ip導入進來,做好驅動,做好dma數據收發,這樣ip就可以為我們所用了。

5、第一個vivado工程

? ? ? ? 明確了未來的方向,目前為止我們還是以fpga為主。fpga本身也是可以單獨進行arm開發,或者是單獨進行fpga開發,只不過arm+fpga融合是效率最高的方式。如果是純fpga開發,只需要注意三點就可以了,第一點就是開始的時候,一定要注意好芯片類型的選擇。比如假設soc類型是7020clg400-1,結果后續端口選擇了其他soc的pin腳,很容易出現warning,或者直接bitstream生成失敗。

? ? ? ? 第二點,就是準備好verilog代碼。這部分代碼最好是之前仿真測試好的,這里直接copy粘貼過來即可。不要指望全部下載到fpga進行調試,這個效率是非常慢的。一般第一個verilog都是點燈程序,那么可以仿真測試好,再copy過來即可。

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2025/09/11 22:07:11
// Design Name: 
// Module Name: led
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////module led(input clk,input rst,output reg[1:0] led);reg[31:0] counter;
localparam THRESHOLD_VALUE = 32'd25000000;always@(posedge clk or negedge rst)if(!rst)counter <= 32'd0;else if(counter == THRESHOLD_VALUE)counter <= 32'd0;elsecounter <= counter + 1;always@(posedge clk or negedge rst)if(!rst)led <= 2'b00;else if(counter == THRESHOLD_VALUE)led <= ~led;endmodule

? ? ? ? 第三,就是xdc約束文件。有了verilog還不夠,我們還需要告訴fpga,哪部分是輸入,哪部分是輸出,clk是哪一個,只有這樣才能進行全部的工作。xdc可以和verilog一樣,一開始的時候就全部寫好,直接Generate bitstream即可。

set_property PACKAGE_PIN P15 [get_ports {led[1]}]
set_property PACKAGE_PIN U12 [get_ports {led[0]}]
set_property PACKAGE_PIN N18 [get_ports clk]
set_property PACKAGE_PIN R19 [get_ports rst]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports rst]
create_clock -period 20.000 -name clk -waveform {0.000 10.000} [get_ports clk]

? ? ? ? 其實不光是vivado,其他廠家的eda基本上也是這么一個流程。只是過程可能會多一個仿真,比如modelsim的仿真,只是我們自己使用了iverilog,所以這一步就可以跳過去了。等到bitfile生成好了,就可以繼續準備后面的驗證測試了。

6、jtag燒錄

? ? ? ? 燒錄一般有兩種方法,一種就是jtag燒錄器直接燒入,還有一種就是直接type c燒入,這個時候燒錄模塊已經merge到開發板上面了。如果是vivado工具,直接輸入“open hardware target”,繼續單擊“Open Target”,左側選擇識別的芯片(比如7010或者是7020),右擊選擇“Program Device”,繼續選擇好對應的bitstream file,單擊“Program”即可。一般燒錄好了之后,芯片自己就開始運行了。不過斷電之后,程序也消失了。

? ? ? ??

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

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

相關文章

【Selenium】Selenium 測試失敗排查:一次元素定位超時的完整解決之旅

Selenium 測試失敗排查:一次元素定位超時的完整解決之旅 在自動化測試過程中,我們經常會遇到元素定位超時的問題。本文記錄了一次完整的 Selenium TimeoutException 排查過程,從問題發現到最終解決,涵蓋了各種常見陷阱和解決方案。 問題背景 測試用例在執行過程中失敗,…

32.網絡基礎概念(二)

局域網網絡傳輸流程圖兩臺主機在同一個局域網&#xff0c;是否能夠直接通信&#xff1f;以太網原理舉例&#xff1a;上課&#xff0c;老師點名小王讓他站起來回答問題。教室里的其他人是可以聽見的&#xff0c;為什么其他人不響應&#xff1f;因為老師叫的是小王&#xff0c;和…

【高并發內存池】六、三種緩存的回收內存過程

文章目錄前言Ⅰ. thread cache的內存回收Ⅱ. central cache的內存回收Ⅲ. page cache的內存回收前言 ? 前面我們將內存的申請流程都走通了&#xff0c;現在就是內存回收的過程&#xff0c;主要是從 thread cache 開始&#xff0c;一層一層往下回收&#xff0c;因為我們調用的…

DeerFlow 實踐:華為IPD流程的評審智能體設計

目錄 一、項目背景與目標 二、IPD 流程關鍵評審點與 TR 點解析 &#xff08;一&#xff09;4 個關鍵評審點 &#xff08;二&#xff09;6 個 TR 點 三、評審智能體詳細設計與協作機制 機制設計核心原則 &#xff08;一&#xff09;概念評審&#xff08;CDCP&#xff09;…

【ubuntu】ubuntu中找不到串口設備問題排查

ubuntu中找不到串口問題排查1. 檢查設備識別情況2. 檢查并安裝驅動3. 檢查內核消息4. 禁用brltty服務1. 停止并禁用 brltty 服務2. 完全移除 brltty 包3. 重啟系統或重新插拔設備5.輸出結果問題&#xff1a;虛擬機ubuntu中&#xff0c;已經顯示串口設備連接成功&#xff0c;但是…

Unity 性能優化 之 靜態資源優化 (音頻 | 模型 | 紋理 | 動畫)

Unity 之 性能優化 -- 靜態資源優化參考性能指標靜態資源資源工作流程資源分類原理小結Audio 實戰優化建議模型導入工作流程DCC中模型導出.DCC中Mesh生產規范模型導出檢查流程模型優化建議紋理優化紋理基礎概念紋理類型紋理大小紋理顏色空間紋理壓縮紋理圖集紋理過濾紋理Mipmap…

GitHub 熱榜項目 - 日榜(2025-09-13)

GitHub 熱榜項目 - 日榜(2025-09-13) 生成于&#xff1a;2025-09-13 統計摘要 共發現熱門項目&#xff1a;18 個 榜單類型&#xff1a;日榜 本期熱點趨勢總結 本期GitHub熱榜項目呈現三大技術熱點&#xff1a;AI開發工具化&#xff08;如GenKit、ROMA多智能體框架&#xff…

Pytest 常見問題及其解決方案

常見問題及解決方案 1. 測試通過了,但覆蓋率不達標 現象: 雖然所有測試都通過了,但覆蓋率報告顯示某些代碼沒有被覆蓋。 解決方案: 檢查覆蓋率配置:確保 .coveragerc 或 pytest.ini 中正確設置了要分析的源代碼路徑。 使用標記(markers)排除測試文件本身:避免測試代…

直擊3D內容創作痛點-火山引擎多媒體實驗室首次主持SIGGRAPH Workshop,用前沿技術降低沉浸式內容生成門檻

當3D、VR技術在游戲、教育、醫療、文化領域遍地開花&#xff0c;“內容短缺”卻成了制約行業爆發的關鍵瓶頸——傳統3D/4D創作不僅耗時耗力、依賴專業技能&#xff0c;還難以適配消費級設備&#xff0c;讓許多創作者望而卻步。近日&#xff0c;由火山引擎多媒體實驗室聯合領域頂…

華為基本命令

我們使用的是華為官方的模擬器eNSP 一、華為設備的模式 華為的設備有兩種模式&#xff1a; 用戶視圖和系統視圖 用戶視圖只能讀取&#xff0c;或者進行一些基礎查詢 系統視圖能對設備和接口進行一些配置管理&#xff0c;和一些高級操作 在“用戶視圖”下使用system-view系統可…

2025.9.14英語紅寶書【必背16-20】

單詞組合 中文速記句子 英文句子 confine, misery, necessitate, negotiate, preach, precaution, precision, stretch 病人被 confine(限制) 在床上,感受 misery(痛苦),情況 necessitate(需要) 醫生 negotiate(商討),牧師 preach(布道) 并提醒 precaution(預防)…

HUST-STAR電控組視覺任務

視覺任務 注意&#xff1a;視覺部分建議采用 python 完成&#xff0c;下面教程也大多針對 python。其原因在于 python 配置相應環境更為輕松&#xff0c;且內置庫較為豐富&#xff0c;屬于初學者友好類型。沒接觸過 python 也不必擔心&#xff0c;它的大體邏輯與 C 相近&#…

壓縮和歸檔 文件傳輸

壓縮和歸檔壓縮&#xff1a;4G----1.5Gbzip2-bunzip2 gzip-gunzip xz-unxzgzip 要壓縮的文件原來的文件就會被刪除 (壓縮和解壓縮)會生成一個 aaa.gz 的文件歸檔&#xff1a; 4G----4G 打包tarc 創建歸檔文件 v 看到創建的詳細過程 f 文件類型 t 不展開歸檔文件&…

深入探索 C++ 元組:從基礎到高級應用

在現代 C 編程中&#xff0c;元組&#xff08;std::tuple&#xff09;是一個強大且靈活的容器&#xff0c;能夠存儲和操作多個不同類型的數據。它在標準庫中扮演著重要角色&#xff0c;并在實際開發中提供了諸多便利。本文將全面探討 C 元組的各個方面&#xff0c;從基礎用法到…

Excel批量處理一列數據---分列功能

0 Preface/Foreword當有多行數據需要處理時&#xff0c;為了減少手動操作&#xff0c;可以EXCEL數據分列功能可以提高效率。1 數據分列1.1 數據分類步驟如下&#xff1a;選中需要處理的一列數據&#xff1b;選擇菜單欄中的“數據”&#xff1b;選擇分列按照需求設置即可1.2 查找…

HTTPS + 域名 + 雙向證書認證(下)

文章目錄1. .p12文件1.1 主要特點1.2 常見用途1.3 常見操作1.4 與其他格式的區別1.5 與公鑰的區別和聯系1.6 安全性注意事項2. Nginx 配置2.1 location指令2.2 alias 與 root 指令的區別3 雙向認證配置3.1 創建根證書3.1.1 生成根CA的私鑰3.1.2 生成請求證書3.1.3 生成自簽署CA…

嵌入式 - ARM3

一、arm啟動C語言1. 配置異常向量表2. 實現了軟件中斷的部分注&#xff1a;ldmfd sp!, {r0-r12, lr} ldmfd sp!, {r0-r12, pc}^ bx lr 左半部分&#xff1a;繁瑣易理解的返回方式&#xff1a;先彈出所有通用寄存器和lr &…

如何通過標簽和分類提升知識復用效率

通過標簽和分類提升知識復用效率&#xff0c;其核心在于構建一個結構化與靈活性兼備的知識組織體系。這需要將分類的“確定性”與標簽的“多維性”進行有效結合&#xff0c;為知識的存儲與檢索建立清晰的“骨架”和豐富的“神經網絡”。具體實踐中&#xff0c;要求我們進行頂層…

ZYNQ PS讀寫PL BRAM

一、實驗室任務 本章的實驗任務是 PS 將數據寫入BRAM&#xff0c;然后從 BRAM 中讀出數據&#xff0c;并通過串口打印出來&#xff1b;與此同時&#xff0c;PL 從通過自定義ip核從BRAM中同樣讀出數據&#xff0c;并通過ILA 來觀察讀出的數據與串口打印的數據是否一致。這里是通…

LinuxC++項目開發日志——高并發內存池(5-page cache框架開發)

PageCachepage cache 設計邏輯一、PageCache 的核心定位&#xff1a;理解它與 CentralCache 的本質區別二、PageCache 的內存分配流程&#xff1a;從 “精確匹配” 到 “拆分適配”三、PageCache 的內存釋放流程&#xff1a;合并小 Span&#xff0c;解決內存碎片問題page cache…