剛接觸SoC FPGA時,我對SoC FPGA的靈活性並沒有領會多少,我只覺得它很復雜。為啥復雜?因為不懂嘛!查了好些資料,終於弄明白HPS IO復用的特性,也更加領會到SoC FPGA的靈活是說得一點都沒錯!
言歸正傳。
前面已經給大家介紹了SoC FPGA 是在單一芯片上集成了 基於ARM的硬核處理器系統(HPS)和 FPGA 邏輯資源的新型SoC 芯片。SoC FPGA 的 HPS端可以做到在有限的引腳資源上支持很多不同類型的外設,比如USB, I2C, SPI, UART, EMAC等等。這些引腳與外設不是一一對應的, 這些引腳是通過 HPS 引腳復用器切換不同的映射方式來支持不同功能外設的連接。這里映射方式選擇有4種: set0 set1 set2 和 FPGA used。對應到具體的硬件產品上的設計時,引腳復用需要根據使用到的具體功能合理設置引腳復用。可能這樣講大家還是不能理解這個HPS IO復用是怎么去應用的, 別急,我來舉個栗子:
5CSEB6 器件(DE10-Nano上的器件)的A22 B21引腳復用如下圖2 所示(查看器件引腳復用對應的完整情況可參考Intel的引腳信息表
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/dp/cyclone-v/5cseba6.pdf。),從截圖可看到A22 和B21 可以被選擇當TRACE功能,也可以被選擇為SPI功能,或者是UART,或者直接就是GPIO功能。
(注意這個截圖中的 HPS Pin Mux Select 0 1 2 3 代表四種不同選擇,但 不是對應后面HPS IP設置界面的 HPS I/O Set0、1、2 。)

(圖1)DE10-Nano開發板的5CSEB6 器件 引腳 信息對應表
但5CSEB6 器件安裝到DE10-Nano(
http://www.terasic.com.cn/cgi-bin/page/archive.pl?Language=China&CategoryNo=182&No=1048)開發板以后,它的 A22 B21引腳被固定接UART0 設備了:

(圖2)DE10-Nano 電路圖

(圖3)DE10-Nano 的實際硬件(UART接口)
因為DE10-Nano 的外圍電路已經固定到UART0, 那么用戶在設置 HPS IP 時,UART0的 UART0 pin要設置為HPS I/O Set0 ,UART1不用設置(DE10-Nano硬件上是使用了HPS端的 uart0,沒使用uart1)。這就是按照硬件具體情況設置HPS IP 的IO復用。

(圖4)該界面是通過打開Quartus Prime軟件里面的Platform Designer的HPS IP
那大家肯定會問,為啥 UART0 pin 這里是選 HPS I/O set0 呢?怎么不選擇HPS I/O set1或者HPS I/O set2? 那是因為在HPS 映射方案里面set0 才將 A22 B21 映射為UART0了(如下圖5所標注的)。(另外還可以參考我后來博客
https://www.cnblogs.com/DoreenLiu/p/14242046.html 的解釋)


(圖5)
如果這些可復用的引腳沒有被復用,那么空閑的它們也可以被HPS GPIO外設使用。具體操作是在Peripherals Mux Table下, 單擊倒數第二列中的GPIOxx按鈕,即可啟用對應的GPIO端口,這時無需設置set0 還是set1等 。這些GPIO 有用於連接HPS用戶燈的,有用於連接HPS用戶按鈕的,等等。

(圖6)
眼尖的用戶可能發現最左邊還有一排 LOANIO,這個是干什么用的呢? “LOAN” 是借貸的意思,這里是表示 當這些引腳沒有被HPS外設所用的時候,也可以將其借給FPGA用,被FPGA所控制。 注意這時必須先配 這些管腳為HPS相應管腳再借給FPGA。這種情況在一般的實際應用中其實比較少見。
Pin Mux標簽的底部是一個沖突信息提示框,顯示每一引腳復用的使用情況。如果出現引腳沖突,這也會顯示在提示框中。假設將一組管腳即分配外設EMAC1, 又分配給NAND 外設,顯示框就會顯示EMAC1的引腳和NAND的引腳使用沖突了(如圖7所示),為解決這一沖突問題,需要查看開發板硬件實際對應情況。在允許生成系統前,應確保HPS組件的沖突信息提示框沒有錯誤。

(圖7)
關於HPS 端外設的引腳 要不要手動分配?請參考我后來的博客:
https://www.cnblogs.com/DoreenLiu/p/14242046.html