###### 【該隨筆中部分內容轉載自小梅哥】 #########
FPGA(Field-Programmable Gate Array,現場可編程門陣列),正如其名,FPGA內部有大量的可編程邏輯功能塊,使用verilog HDL(硬件描述語言)實現設計。
玩過單片機的小伙伴剛接觸FPGA可能會有點困惑,其實FPGA與單片機最大的區別就在於:FPGA設計的是電路,單片機設計的是程序。單片機只有一個CPU在工作時鍾的驅動下順序的執行程序(取指、譯碼、執行),所以工作速度較慢,而FPGA設計出來的是整個電路邏輯系統,根本不需要單片機這么復雜,所以FPGA的工作速度自然很快,在兩者各有各的優勢下,單片機主要用於進行相關控制,FPGA多用於信號處理相關。
典型的FPGA原理和結構如下圖(注:以Cyclone IV E FPGA芯片為例),主要包括三類基本資源:
- 可編程邏輯功能塊(Altera-LE(Logic Element) / Xlinx-Slice)
- 可編程內部互連資源
包括各種長度的連線線段和一些可編程連接開關,它們將各個可編程邏輯塊或輸入/輸出塊連接起來,構成特定功能的電路。用戶可以通過編程決定每個單元的功能以及它們的互連關系,從而實現所需的邏輯功能。
- 可編程輸入/輸出(I/O)塊
完成芯片內部邏輯與外部管腳之間的接口,圍繞在邏輯單元陣列四周;
FPGA從簡單的邏輯粘合,發展到現在的可編程片上系統,FPGA廠家也在基本的FPGA架構上加入了一些擴展資源,比如時鍾管理單元(PLL、DLL)、嵌入式存儲器單元和硬件乘法器單元,DSP單元一些高端器件還加入了高速收發器、甚至嵌入式硬核處理器,讓FPGA的應用領域更廣闊,Cyclone IV E器件加入的擴展資源有:
- PLL鎖相環
模擬電路,將輸入的周期信號進行分頻和倍頻,或改變相位,輸出一個或多個穩定的時鍾信號;
- M9K存儲器
嵌入式塊RAM,容量大小9Kbit,這些存儲器可以被配置成單端口、簡單雙端口、真雙端口RAM、FIFO緩沖器、ROM
- 18*18硬件乘法器
快速進行運算
FPGA中除了三類基本資源和一些擴展資源外,由圖中可以看到,FPGA中資源分布也是很精致的:
1、邏輯陣列和M9K存儲器交替分布,這樣做的優點是縮短數據的傳輸路徑,以獲得更優的時序性能;
2、IOEs和PLL單元分布在器件的四周,數據流一般從左側IO流入,經過處理、運算、存儲,通過右側IO流出,控制信號通過上下IO輸入輸出;有時候系統需要高質量時鍾(比如軟核所需工作時鍾)通常由PLL單元產生,而這些分布在四周的PLL可以最短時鍾源產生工作時鍾,另外,PLL屬於模擬電路,放在周圍更利於和生產;
下面具體了解下兩種主流FPGA的資源情況:
Altera Cyclone IV E系列FPGA常見硬件資源詳情列表:
Xilinx 7 系列FPGA 硬件資源詳情:
最后,放上兩張開發板圖片,一塊是小梅哥基於Cyclone IV EP4CE10的AC620,一塊是Digilent基於Xilinx Artix7的Basys3,兩塊都很精致有木有~