過去,設計人員傾向于使用現場可編程門陣列 (FPGA) 在硬件設計中提升計算密集型應用的性能,例如計算機視覺、通信、工業嵌入式系統,以及越來越多的物聯網 (IoT)。然而,傳統 FPGA 編程中涉及的繁瑣步驟一直讓人望而卻步,促使設計人員到目前都還在尋求替代處理解決方案。
基于 Jupyter 筆記本的 Python Productivity for Zynq (PYNQ) 開發環境的問世,解決了 FPGA 的可編程性問題。使用專為支持 PYNQ 而設計的開發板,即使 FPGA 經驗很少的開發人員也可快速實現相關設計,從而充分利用 FPGA 性能來加快計算密集型應用。
本文將說明典型的 FPGA 方法,然后介紹并演示如何開始使用 Digilent 的開發板。該開發板為快速開發基于 FPGA 的系統提供了一種強大的開源替代方法。
為何使用 FPGA?
若需要使用計算密集型復雜算法,工程師常常依賴 FPGA 提高執行速度,同時又不影響緊張的功率預算。實際上,FPGA 已成為在邊緣計算系統中提高人工智能算法速度的主流平臺。
更先進的 FPGA 片上系統 (SoC) 器件專為嵌入式應用而設計,將可編程邏輯 (PL) 結構與微控制器集成在一起。例如,Xilinx 的 Zynq-7000 SoC 在集成式可編程邏輯 (PL) 結構中結合了一個 Arm? Cortex?-A9 雙核處理器系統,以及最多 444,000 個邏輯單元(圖 1)。除了內置處理器和全套外設外,Zynq SoC 還提供最多 2,020 個數字信號處理 (DSP) 塊(或稱切片)。開發人員使用這些資源,便可將 PL 結構配置到專用的處理鏈中,以便在復雜的計算密集型算法中提高吞吐量。
圖 1:Xilinx 的 Zynq-7000 SoC 結合了 Arm Cortex-A9 雙核處理器、可編程邏輯結構,以及很多嵌入式應用中所需的全套外設和接口。(圖片來源:Xilinx)
除了可減少元器件數量外,處理器與 PL 結構的集成還允許通過片上總線而不是片外訪問來執行運算。這種集成也進一步簡化了在上電或復位序列期間,加載 PL 結構的關鍵任務。
在使用 FPGA 構建的基于微控制器的典型系統中,開發人員需要管理用于加載 FPGA 編程比特流的序列和安全性。在 Zynq SoC 中,集成的處理器負責執行常規微控制器的任務,包括管理 PL 結構和其他片上外設。因此,與傳統的 FPGA 比特流初始化相比,該 FPGA 加載過程更接近于常規微控制器的引導過程。
該引導過程通過由其中一個 Zynq 處理器管理的短步驟序列完成(圖 2)。上電或復位時,如果 Zynq 處理器執行其只讀 BootROM 中的一小段代碼,以從引導設備獲取實際引導代碼,則引導過程開始。除了用于配置處理器系統組件的代碼外,引導代碼還包含 PL 比特流以及用戶應用。當引導代碼加載完成時,處理器使用其中包含的比特流來配置 PL。而完成組件和 PL 的配置后,該器件開始執行引導代碼中包含的應用。
圖 2:在類似于常規微控制器的引導序列中,Xilinx 的 Zynq-7000 SoC 運行 Boot ROM 中的代碼來加載和執行引導加載程序,該加載程序負責處理后續階段,包括使用引導代碼中封裝的比特流來配置可編程邏輯結構。(圖片來源:Xilinx)
即使有了簡化的 PL 加載處理,開發人員在過去仍需自行處理復雜的 FPGA 開發過程,才能生成所需比特流。對于希望利用 FPGA 性能的開發人員來說,傳統的 FGPA 開發過程仍然是他們實現設計的一大障礙。Xilinx 通過其 PYNQ 環境有效地消除了這一障礙。
PYNQ 環境
在 PYNQ 中,PL 比特流封裝在預先構建的庫中。這些庫稱為覆蓋層,在開發過程和執行環境中,其角色與軟件庫類似。在引導加載過程中,與所需覆蓋層相關聯的比特流將配置 PL 結構。不過,對于通過與每個覆蓋層關聯的 Python 應用程序編程接口 (API) 來利用覆蓋層功能的開發人員而言,該過程保持透明。在開發過程中,工程師可以根據需要組合軟件庫和覆蓋層,通過其各自 API 來實現應用。在執行過程中,處理器系統像往常一樣執行軟件庫代碼,而 PL 結構負責實現覆蓋層中提供的功能。這樣做的結果是可以提升性能,從而進一步促使開發人員對日益嚴苛應用進行 FPGA 設計的興趣。
顧名思義,PYNQ 利用了與 Python 編程語言相關的更高開發生產力。Python 之所以能夠成為頂級語言之一,不僅是因為其相對簡單,還因為它具有龐大且不斷擴增的生態系統。開發人員可能會在 Python 開源模塊的存儲庫中,找到支持服務或專用算法所需的軟件庫。與此同時,開發人員可以使用 C 語言實現關鍵功能,因為 PYNQ 使用常見 C 語言實現 Python 解釋器。該實現允許輕松訪問數千個現有 C 語言庫,并簡化開發人員提供的 C 語言庫的使用。盡管經驗豐富的開發人員可以使用專用硬件覆蓋層和 C 語言軟件庫來擴展 PYNQ,但是 PYNQ 的真正優勢在于,它可為任何能夠構建 Python 程序的開發人員提供高生產力開發環境。
PYNQ 本身是一個開源項目,基于另一個開源項目(Jupyter 筆記本)而構建。針對通過交互方式探索算法,以及使用 Python 或任何其他受支持的編程語言(目前超過 40 種)對復雜應用進行原型開發,Jupyter 筆記本可提供極其有效的環境。Jupyter 筆記本由 Project Jupyter 基于社區共識而開發,將可執行代碼行與描述文本和圖形結合在一起。這一功能使各開發人員能夠更有效地記錄進展,而無需轉到其他開發環境。例如,開發人員可以使用筆記本,將查看數據所需的數行代碼與代碼生成的圖形結合起來(圖 3)。
圖 3:來自 Xilinx 樣例存儲庫的 Jupyter 筆記本將描述文本、可執行代碼以及與應用相關的輸出結合起來。(圖片來源:Xilinx)
Jupyter 筆記本之所以能夠同時包含代碼、輸出和描述文本,是因為它是一種活動文檔,并在 Jupyter 筆記本服務器提供的交互式開發環境中進行維護(圖 4)。在 Jupyter 會話中,服務器使用 HTTP 協議在常規 Web 瀏覽器中呈現筆記本文件,并對所呈現文檔中的靜態和動態內容應用 HTTP 和 Websocket 協議。在后端,服務器使用 ZeroMQ (?MQ) 開源消息傳遞協議與代碼執行內核通信。
圖 4:在 Jupyter 會話中,筆記本服務器將筆記本文件的內容呈現到 Web 瀏覽器,同時與執行代碼的后端內核進行交互。
-
微控制器
+關注
關注
48文章
7724瀏覽量
152681 -
FPGA
+關注
關注
1636文章
21841瀏覽量
608505 -
python
+關注
關注
56文章
4813瀏覽量
85316
原文標題:使用Python和Jupyter筆記本快速構建基于FPGA的設計并進行編程
文章出處:【微信號:FPGA-EETrend,微信公眾號:FPGA開發圈】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
開發者福利 一文帶你了解Digilent Arty S7 FPGA開發板

fpga開發板的新手,如何開始使用引腳分配
Digilent公司推出新型FPGA硬件開發平臺:NEXYSTM3開發板
Digilent公司發布新款FPGA開發板
digilent Virtex-5 FPGA開發板簡介

digilent Spartan-7開源創客開發板介紹

開始使用 RL78/G14 快速原型開發板/Wi-Fi-Pmod-Expansion-Board

開始使用 RL78/G14快速原型開發板/Wi-Fi-Pmod-Expansion-Board

評論