通用一點說,所有CPU的數字通信接口都可以和FPGA進行通信,在這里我們將相關接口簡單分類,這里的接口主要指板間通信,像422、485之類的就不展開描述(協議層都是uart)。

低速接口時單片機常用的接口,在和FPGA對接時候主要進行小數據量的通信。
低速接口的優點就是簡單,易于實現;缺點也是顯而易見,就是通信帶寬不高,無法進行大數據量通信。
這里就簡單說下SPI和UART,其中SPI是一種同步通信協議,UART是異步通信協議,區別就是有沒有共享時鐘信號。
這兩個協議的使用可以參考下面的通信方式:假設FPGA和CPU之間進行通信,FPGA需要將XADC采集的電壓電流傳輸給CPU做健康管理,這里由兩點需要注意:一是傳輸不需要實時;二是數據量不大,所以選擇低速接口較合適,選擇SPI和UART時候傳輸的區別如下:
CPU做主,需要先將時鐘信號發送到FPGA:

然后使能CS:

接下來CPU的MOSI發送數據到FPGA:

FPGA的MISO需要反饋數據時候,同步的將數據反饋給CPU,如果MOSI不發送數據,則MISO也不能主動發送數據。

對于UART就比較好理解了,CPU和FPGA協定好波特率,FPGA想要發送數據時候就將數據發給CPU即可(CPU需要利用中斷觸發接受數據)。
最后簡單說下LPC(Low Pin Count),LPC常見的是在X86體系里常見的接口,主要用在南橋和EC之間通信(想想當年設計的筆記本還是挺虐的~),EC控制的矩陣鍵盤等通過LPC發送給南橋。

目前我應用的比較多的是和FT CPU之間進行通信,這方面用的比較少就不過多介紹了。
關于這幾個協議的實現,可以看下下面的文章,其中UART中詳細介紹了RS232和UART區別。
一天一個設計實例-3萬字講解UART和實例
一天一個設計實例-IIC協議及FPGA實現
一天一個設計實例-SPI協議及FPGA實現
接下來就是高速接口
FPGA中通過Serdes可以實現大部分高速接口。常見的就是PCIe和SRIO,在ZYNQ中還有AXI非常常用。
對于PowerPC則可以使用PLB;Intel最新的FPGA則QPI也是比較常用的。
對于傳輸視頻:MIPI、BT.656、BT.1120這些接口也是非常常見的。
高速接口我們只介紹PCIe,這也是非常常見的數據通信接口,在加速卡、數據中心,都是核心。
PCIe的難點在于整體架構和CPU端的驅動,目前用于PCIe架構常用的就是DMA,至于原因,就不分析了,反正就是優勢非常明顯。
大家對于PCIe還處于“恐慌”的狀態,但是大家不必擔心,下面給大家介紹幾個常用的架構:

上面的基于PCIe的項目,都是非常成熟的架構,也是目前能在FPGA流行PCIe接口的主要原因,其中這些架構都在很多工程中得到應用。
RIFFA和Alex的可以查看下面文章介紹:
優秀的 Verilog/FPGA開源項目介紹(一)-PCIe通信
下面是XILLYBUS的架構:

官方網址:
http://xillybus.com/
Corundum可以查看下面文章:業界第一個真正意義上開源100 Gbps NIC Corundum介紹
上面的介紹只有一部分常用接口,還有其他很多不常用的總線,像FSB總線、HT總線、DMI總線等,也是可以實現CPU和FPGA之間通信。
今天就到這,我是爆肝的碎碎思,期待下期文章與你相見。
- End -
往期精選?
?
?

FPGA技術江湖廣發江湖帖
無廣告純凈模式,給技術交流一片凈土,從初學小白到行業精英業界大佬等,從軍工領域到民用企業等,從通信、圖像處理到人工智能等各個方向應有盡有,QQ微信雙選,FPGA技術江湖打造最純凈最專業的技術交流學習平臺。
FPGA技術江湖微信交流群

加群主微信,備注職業+方向+名字進群
FPGA技術江湖QQ交流群

備注地區+職業+方向+名字進群
