如何使用FPGA開發(fā)
介紹
與傳統(tǒng)的微控制器相比,FPGA(現(xiàn)場可編程門陣列)是獨一無二的,因為它們不執(zhí)行順序指令。相反,它們由一組可配置的邏輯塊組成,這些邏輯塊可以被重新編程以執(zhí)行自定義的數(shù)字邏輯功能。這使得FPGA可以并行執(zhí)行多個操作,使其在信號處理、數(shù)據(jù)處理和實時控制等特定任務(wù)中非常高效。
為了定義FPGA的功能,我們使用硬件描述語言(HDL),它指定了邏輯元素應(yīng)該如何配置和互連。在這個項目中,我將使用SystemVerilog,這是Verilog的高級版本,它引入了額外的特性,如增強的類型安全、斷言和面向?qū)ο缶幊坦δ?,使其更適合FPGA設(shè)計。
對于硬件,我使用的是Arty S7-25,這是一個基于Xilinx Spartan-7 FPGA的開發(fā)板。它在尺寸、性能和可負擔性之間提供了一個很好的平衡,使其成為初學者的絕佳選擇。該板具有雙Arduino頭,便于原型設(shè)計,以及PMOD頭,允許擴展額外的外設(shè)。當我使用這個特定的板時,如果您遵循這個項目,任何來自Spartan-7家族或更高版本的Xilinx FPGA都應(yīng)該兼容。
XADC (Xilinx模數(shù)轉(zhuǎn)換器)
XADC是Xilinx FPGA中的集成模數(shù)轉(zhuǎn)換器(ADC),使其能夠處理模擬信號和數(shù)字邏輯。該功能對于電壓監(jiān)測、傳感器數(shù)據(jù)采集和實時模擬信號處理等應(yīng)用特別有用。通過將ADC直接集成到FPGA中,減少了對外部ADC組件的需求,簡化了硬件設(shè)計并提高了系統(tǒng)集成度。
XADC的主要特性:
?雙12位adc能夠以高達1 MSPS(每秒百萬采樣)的速度采樣,允許高速數(shù)據(jù)采集。
?支持多達16個外部模擬輸入通道(根據(jù)FPGA封裝不同而不同),支持多個傳感器或信號連接。
?用于FPGA溫度監(jiān)測和電源電壓跟蹤的片上傳感器,有助于系統(tǒng)可靠性和熱管理。
?靈活的接口選項:支持AXI Lite,動態(tài)重新配置端口(DRP)或直接寄存器控制,允許與不同的FPGA設(shè)計集成。
?支持單極(0V至1V)和雙極(-0.5V至0.5V)輸入模式,適應(yīng)各種模擬信號范圍。
?可配置報警閾值,使自動警報電壓或溫度異常。
XADC通過彌合模擬和數(shù)字域之間的差距,增強了FPGA的多功能性,使其成為需要在基于FPGA的系統(tǒng)中進行實時模擬信號處理的應(yīng)用的理想選擇。
Vivado:賽靈思的FPGA設(shè)計軟件
Vivado是Xilinx的綜合FPGA設(shè)計套件,用于設(shè)計、模擬、合成和編程基于FPGA的系統(tǒng)。它為HDL開發(fā)提供了一個完整的工具鏈,包括邏輯分析儀、IP集成器和調(diào)試工具,使其成為FPGA開發(fā)必不可少的工具。無論您是實現(xiàn)簡單的邏輯電路還是復雜的數(shù)字系統(tǒng),Vivado都可以通過其高級合成(HLS),基于塊的設(shè)計方法和硬件調(diào)試工具簡化設(shè)計流程。
下載安裝程序
訪問AMD/Xilinx官方網(wǎng)站并導航到下載部分。
下載最新版本的統(tǒng)一安裝程序,選擇與您的操作系統(tǒng)(Windows或Linux)兼容的版本。
注意:您需要登錄或創(chuàng)建一個免費的AMD/Xilinx帳戶才能訪問下載。
安裝過程
運行安裝程序并按照屏幕上的說明操作。
在安裝過程中,您可以選擇完全安裝或自定義安裝,這取決于您是否需要額外的工具,如Vitis(用于嵌入式開發(fā))或僅用于FPGA設(shè)計的Vivado。
準備好大量下載(幾gb),因此建議使用穩(wěn)定且快速的互聯(lián)網(wǎng)連接。
創(chuàng)建第一個項目
一旦安裝了Vivado,下一步就是在AMD Vivado設(shè)計套件中創(chuàng)建一個新項目。本項目將作為工作空間,您將在其中編寫,模擬和合成您的FPGA設(shè)計。
步驟1:創(chuàng)建項目
打開Vivado并從歡迎屏幕中選擇Create New Project。
選擇一個項目名稱(例如,DisplayXADC)并選擇一個方便的位置來保存項目文件。
單擊Next繼續(xù)。
步驟2:選擇項目類型
當提示項目類型時,選擇RTL項目(注冊-傳輸級別),因為這允許您使用SystemVerilog編寫設(shè)計。
啟用“此時不指定源”復選框,除非您已經(jīng)準備好了源文件。
單擊Next繼續(xù)。
步驟3:創(chuàng)建源文件和約束文件
進入項目后,創(chuàng)建一個新的源文件:選擇create file→選擇SystemVerilog作為文件類型。將其命名為任何您喜歡的名稱(例如,xadc_display.sv)。
創(chuàng)建空約束文件:選擇“創(chuàng)建文件”→確保文件類型為XDC (Xilinx Design Constraints)。將其命名為您喜歡的任何名稱(例如,constraints.xdc)。稍后將使用該文件定義引腳映射、時鐘約束和定時設(shè)置。
步驟4:選擇FPGA板
將出現(xiàn)一個對話框,提示您在零件和電路板之間進行選擇。
選擇Boards選項卡并鍵入您的FPGA板型號(例如,Arty S7-25)。如果沒有顯示您的單板,請單擊“刷新”或確保安裝了單板文件。
單擊Next,然后單擊Finish以完成設(shè)置。
配置XADC
要在FPGA設(shè)計中使用XADC (Xilinx模數(shù)轉(zhuǎn)換器),需要在Vivado中添加和配置XADC IP核。按照以下步驟正確設(shè)置:
步驟1:添加XADC IP核
在Vivado的左側(cè),找到并單擊IP Catalog。
在搜索欄中,輸入“XADC”。
選擇“XADC向?qū)А保缓箅p擊打開其配置設(shè)置。
步驟2:自定義XADC IP
將出現(xiàn)一個對話框,允許您配置XADC核心。
選擇接口類型:配置接口模式為DRP (Dynamic Reconfiguration Port)。這允許通過寄存器實時訪問ADC轉(zhuǎn)換。
選擇轉(zhuǎn)換模式:在模式選擇下,選擇“單通道”,設(shè)置為“連續(xù)模式”。這確保了ADC連續(xù)采樣單個模擬輸入,而不是通過多個通道循環(huán)。
禁用告警(本項目不需要):導航到“告警”頁簽。禁用所有警報,因為此應(yīng)用程序不需要它們。這些告警通常用于監(jiān)控電源電平和FPGA溫度。
選擇模擬輸入引腳:在單通道選項卡下,找到外部模擬輸入部分。為A0引腳(或FPGA上相應(yīng)的ADC引腳)選擇VAUXP0/VAUXN0。確切的引腳映射可能因FPGA板而異,因此請檢查約束文件(.xdc)以驗證正確的引腳。
步驟3:生成XADC IP核
保留所有其他設(shè)置為默認值,除非您的應(yīng)用程序需要進一步定制。
單擊OK關(guān)閉自定義窗口。
在下一個對話框中,選擇“生成輸出產(chǎn)品”,然后單擊“生成”。
此時,將生成XADC IP核并準備將其集成到您的設(shè)計中。該模塊將允許您的FPGA與模擬信號接口,例如從電位器或其他傳感器讀取電壓電平。
代碼
ConstrainFile
約束文件(.xdc)在FPGA設(shè)計中至關(guān)重要,因為它定義了項目的I/O引腳映射、時鐘約束和時序要求。該文件告訴FPGA使用哪個物理引腳進行輸入和輸出,確保您的設(shè)計與外部硬件(如按鈕,led,傳感器或通信接口)正確交互。
每個FPGA板都有一個唯一的約束文件,因為不同的板有不同的引腳分配和硬件配置。
七段模塊
該子模塊設(shè)計用于一次控制單個七段LED顯示屏。它需要一個輸入時鐘信號來同步顯示更新和一個輸入數(shù)字(十六進制0-F)。
高層模塊
主模塊被指定為源文件層次結(jié)構(gòu)中的“頂層”模塊。這個頂層模塊作為設(shè)計的入口,類似于C語言編程中的主要功能。通過用清晰的層次結(jié)構(gòu)構(gòu)建設(shè)計,頂層模塊確保所有組件有效地協(xié)同工作,使調(diào)試和擴展系統(tǒng)更容易。
頂層模塊的角色
?它充當集成和連接設(shè)計中所有其他子模塊的最高級模塊。
?它定義了與FPGA外部引腳接口的I/O端口。
?它實例化其他模塊的實例,在它們之間傳遞信號以確保正確的通信。
初始化模塊實例
在頂部模塊中,您將創(chuàng)建項目中定義的其他模塊的實例。這些實例的行為類似于軟件編程中的函數(shù)調(diào)用,但它們不是按順序執(zhí)行,而是并行操作。
我們首先定義它的輸入和輸出端口,這決定了FPGA如何與外部硬件組件交互。
時鐘輸入(用于同步)
模擬輸入(用于從XADC讀取數(shù)據(jù))
輸出控制七段顯示
實例化XADC模塊
接下來,我們實例化XADC模塊,該模塊連續(xù)采樣模擬輸入信號并將其轉(zhuǎn)換為16位數(shù)字值。然后對這些數(shù)據(jù)進行處理,以提取相關(guān)信息進行顯示。
實例化七段顯示模塊
由于我們正在使用兩個七段顯示,因此我們創(chuàng)建了sevenSegment模塊的兩個實例。這些實例接收處理過的數(shù)據(jù)并驅(qū)動相應(yīng)的顯示段。
數(shù)據(jù)處理和路由
來自XADC的原始數(shù)據(jù)是16位寬,但是一個7段的顯示器通常一次只顯示一個數(shù)字。
為了顯示有意義的值,我們對16位數(shù)據(jù)進行切片,只提取高階位,它們代表ADC轉(zhuǎn)換結(jié)果的最高有效數(shù)字。
切片后的數(shù)據(jù)被發(fā)送到七段模塊,在那里被轉(zhuǎn)換成二進制編碼格式(BCD)顯示。
構(gòu)建和編程
一旦編碼階段完成,我們就進入構(gòu)建和編程過程,在此過程中,設(shè)計被合成、實現(xiàn)并轉(zhuǎn)移到FPGA硬件。
步驟1:生成比特流
?在Vivado中,找到左側(cè)面板中的“構(gòu)建和調(diào)試”部分。
?點擊“生成比特流”來啟動這個過程。
?如果出現(xiàn)提示,單擊“Yes”繼續(xù)。
該過程包括三個主要步驟:綜合:將SystemVerilog代碼轉(zhuǎn)換為門級表示。實現(xiàn):將邏輯映射到FPGA的物理資源上。比特流生成:創(chuàng)建將加載到FPGA上的最終二進制文件。
此過程可能需要一些時間,具體取決于設(shè)計的復雜性和系統(tǒng)的性能。
步驟2:連接FPGA板
?一旦比特流成功生成,轉(zhuǎn)到“打開硬件管理器”。
?現(xiàn)在,使用微型USB電纜將FPGA板連接到計算機。確保單板已上電。
?在硬件管理器中,點擊“自動連接”。這將掃描連接的FPGA設(shè)備。將出現(xiàn)檢測到的硬件設(shè)備列表。
步驟3:FPGA編程
?在列表中找到您的FPGA設(shè)備。
?右鍵單擊設(shè)備,選擇“程序設(shè)備”。
?將出現(xiàn)一個對話框,確認要使用的比特流文件(.bit)。
?點擊“Program”將設(shè)計加載到FPGA上。
該程序在FPGA中是臨時的,一旦電源被切斷,它就會回到工廠或以前燒毀的程序。如果您想將程序刻錄到FPGA中,則選擇“程序eFUSE寄存器”,這將刻錄程序,并且在電源周期后不會丟失。
布線
在這個項目中,我使用IO0到IO13引腳連接兩個七段LED顯示屏。這些引腳被分配來控制單個LED段。
連接七段顯示器
?根據(jù)您的設(shè)計將7段LED段連接到IO0-IO13。
?應(yīng)相應(yīng)地連接公共地(用于公共陰極顯示器)或公共電源(VCC)(用于公共陽極顯示器)。
?確保顯示模塊的地與FPGA的地相連,完成電路。
自定義Pin分配
?可以根據(jù)項目需要更改這些pin分配。
?如果修改了pin分配,則必須相應(yīng)地更新約束文件(.xdc)以反映新的連接。
?驗證七段顯示器與FPGA的I/O電壓水平的電壓兼容性(例如,3.3V邏輯用于Arty S7-25)。
連接XADC電位器
?您可以使用任何通用的10K電位器作為模擬輸入設(shè)備。
?連接方式:一端接VCC (3.3V)。另一端到GND。中間(雨刷)引腳到XADC輸入引腳(VAUXP0/VAUXN0,如約束文件中定義)。
本文編譯自hackster.io