在FPGA設(shè)計(jì)中,我們通常采用的都是“自頂向下”的設(shè)計(jì)方法,即現(xiàn)有頂層設(shè)計(jì),再有細(xì)節(jié)設(shè)計(jì)。比如先有整個(gè)項(xiàng)目的功能框圖、數(shù)據(jù)流程圖等,然后再細(xì)分功能到一級(jí)模塊,每個(gè)一級(jí)模塊再細(xì)分到二級(jí)、三級(jí)甚至更低級(jí)別的模塊。除了每個(gè)模塊的設(shè)計(jì),如何把模塊連接起來(lái)?也是一個(gè)很有趣且重要的話題,這就是我們通常說(shuō)的內(nèi)部模塊接口。這里先介紹幾種常見(jiàn)的內(nèi)部模塊接口。
AXI接口
目前xilinx或者intel提供的IP core中的接口越來(lái)越多的都支持AXI接口,這種接口是業(yè)界非常通用的接口,使用的頻率也非常的高,關(guān)于這個(gè)接口的說(shuō)明,網(wǎng)上有很多資料,本文不在這里介紹該接口相關(guān)的信息。
采用這種接口有什么好處呢?顯然IP的移植性非常好,只要是使用AXI接口的設(shè)計(jì),都可以直接調(diào)用這樣的IP,不需要做任何接口上的修改,也不會(huì)出現(xiàn)對(duì)接口理解上的差異,確實(shí)很方便。尤其是你的模塊需要和外部模塊對(duì)接的時(shí)候,這里的外部可能是外部的客戶、外部的合作伙伴等,標(biāo)準(zhǔn)的接口也能減少對(duì)接的溝通成本。
AXI接口筆者覺(jué)得也有一些缺點(diǎn),接口相對(duì)比較復(fù)雜。如果我們的FPGA設(shè)計(jì)只是公司或者部門內(nèi)使用,不需要對(duì)外,甚至都不需要重用的時(shí)候,那有沒(méi)有一些更加簡(jiǎn)單的接口呢?這里重點(diǎn)介紹2種內(nèi)部模塊間通用接口,最后再說(shuō)明這樣接口的好處。
req-ack接口
先看時(shí)序圖,這種接口通常是請(qǐng)求方有數(shù)據(jù)要發(fā)送之前,先發(fā)送一個(gè)req請(qǐng)求信號(hào),同時(shí)保持?jǐn)?shù)據(jù)不變,一直等待響應(yīng)方的應(yīng)答。當(dāng)響應(yīng)方處理完數(shù)據(jù)后,給一個(gè)ack應(yīng)答信號(hào),表示一次數(shù)據(jù)傳送完成。
這種接口的應(yīng)用場(chǎng)景是什么呢?它一般應(yīng)用在低速、無(wú)緩存數(shù)據(jù)傳輸場(chǎng)景。當(dāng)2個(gè)模塊之間的接口傳輸數(shù)據(jù)的性能較低,且有相互依賴,就可以采用這類接口。從時(shí)序圖可以看出,在req階段,整個(gè)data是不會(huì)變化,直到有ack后,再發(fā)送下一個(gè)數(shù)據(jù)。數(shù)據(jù)的傳輸依賴請(qǐng)求和響應(yīng)雙方的配合,彼此牽制。另外,發(fā)送發(fā)等當(dāng)前數(shù)據(jù)處理完成后,才會(huì)有一下次數(shù)據(jù)發(fā)送,所以這類場(chǎng)景無(wú)需數(shù)據(jù)緩存,比較節(jié)省資源,但是性能較低。
流式接口
先看時(shí)序圖,該接口共有5個(gè)信號(hào), data_vld(數(shù)據(jù)有效信號(hào))、 data(數(shù)據(jù)本身)、 data_sop(表示數(shù)據(jù)開(kāi)始)、 data_eop(表示數(shù)據(jù)結(jié)束)、 data_index(和data相關(guān)的其他信號(hào),位寬和格式可以用戶自定義,往往在data_sop = 1或者data_eop = 1的時(shí)候有效,或者在整個(gè)data_vld = 1期間保持不變)、 data_afull(數(shù)據(jù)反壓信號(hào),通知對(duì)端不要再發(fā)送data)。
這種接口信號(hào),非常的像fifo的寫接口信號(hào),通過(guò)這種接口在發(fā)送數(shù)據(jù)的過(guò)程中,只要對(duì)端不反壓就可以不停的發(fā)送。這種接口實(shí)現(xiàn)簡(jiǎn)單,模塊之間高度解耦,性能較好。
也有人會(huì)想,用這樣的私有接口,為什么不用標(biāo)準(zhǔn)axi_stream接口呢?確實(shí)這2種接口已經(jīng)非常非常的相似了,唯一的不同就是反壓的處理,私有接口是不反壓的時(shí)候數(shù)據(jù)就可以無(wú)限制的發(fā)送,即發(fā)數(shù)據(jù)依賴data_afull = 0。但是axi_stream接口的vld和ready之間是沒(méi)有相關(guān)關(guān)系的,協(xié)議規(guī)定不能相互依賴,這點(diǎn)這內(nèi)部處理起來(lái)就稍稍麻煩點(diǎn)點(diǎn)。
另外即使afull = 1以后,一般都還可以繼續(xù)發(fā)送2-3拍數(shù)據(jù),時(shí)序處理起來(lái)也非常的簡(jiǎn)單。而axi_stream中的vld和ready之間是嚴(yán)格的時(shí)序關(guān)系,必須同時(shí)為1,數(shù)據(jù)才能正常發(fā)送,時(shí)序處理起來(lái)相對(duì)麻煩。
總結(jié)
當(dāng)有對(duì)外的接口時(shí),應(yīng)該還是要采用業(yè)界標(biāo)準(zhǔn)的接口,但是模塊內(nèi)部的設(shè)計(jì),還是要遵循設(shè)計(jì)簡(jiǎn)單、實(shí)用可靠、無(wú)依賴,性能高的基本原則。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21748瀏覽量
603909 -
FPGA設(shè)計(jì)
+關(guān)注
關(guān)注
9文章
428瀏覽量
26532 -
接口
+關(guān)注
關(guān)注
33文章
8612瀏覽量
151302 -
AXI
+關(guān)注
關(guān)注
1文章
127瀏覽量
16636
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論