對SoC芯片要進(jìn)行FPGA原型驗證,假如設(shè)計較大,要將SoC中不同功能模塊或者邏輯模塊分別分配到特定的FPGA,那么對SoC的分割策略尤為重要。這一點(diǎn)和大規(guī)模的多片F(xiàn)PGA設(shè)計有所不同,在設(shè)計一個大規(guī)模的FPGA產(chǎn)品之前,你可能在一開始就會考慮到如何將不同的功能模塊以及連接方式分別合理的放到不同的FPGA中,各個FPGA之間的連接在設(shè)計之初就有考慮。
但是,對于大規(guī)模SoC設(shè)計要分割到多片的FPGA中,對于出database的邏輯原型工程師而言,顯得有點(diǎn)“措手不及”,因為整體的RTL架構(gòu)代碼并未考慮在多片F(xiàn)PGA上的實(shí)現(xiàn)架構(gòu),前端SoC架構(gòu)以及前端的RTL設(shè)計工程師更多考慮的是SoC的實(shí)現(xiàn)流程。所以,這一點(diǎn)給原型驗證工程師帶來挑戰(zhàn),但是我們可以順著以下思路運(yùn)用相關(guān)軟件進(jìn)行手動分割。
分配高度連接的模塊
我們期望分割工具可以顯示模塊級互連信息,比如我們在工具中可以選擇設(shè)計的層次結(jié)構(gòu)的模塊列表(層次結(jié)構(gòu)之所以非常重要,就是因為在SoC的設(shè)計過程中,本身就會遵循以功能為大方向去寫RTL級別的代碼,然后“高內(nèi)聚,低耦”的思路劃分模塊與層次關(guān)系的),然后列表會展示相應(yīng)的模塊與模塊之間的連接關(guān)系。例如以下工具展示的模塊之間的互連:
? ? ?
這里,我們可以立即看到塊b2v_inst1和b2v_inst2共享82個相互連接,但b2v_ints3與塊的頂級IO的連接最多(106)。當(dāng)用大量相互連接的信號劃分多個塊時,重要的任務(wù)是確保這些塊放置在同一FPGA中。如果高度連接的塊被放置在不同的FPGA中,那么我們將需要大量的FPGAIO引腳來重新連接它們。
例如,當(dāng)使用64位和更大的總線時,分配到不同F(xiàn)PGA中的兩個塊很可能需要數(shù)百個額外的FPGA IO。因此,在上面的示例中,我們可能會嘗試先將b2v_inst3分配到一個FPGA中,而b2v_inst1和b2v_ins2可以一起分配到不同的FPGA中,因為它們是相互連接的,但與b2v_ins3幾乎沒有連接。
其次,我們期望工具能夠展示大致的FPGA分區(qū)信息,當(dāng)我們手動選擇相關(guān)模塊到各FPGA塊的時候,分割軟件可以及時的反饋相關(guān)分區(qū)FPGA的資源使用情況,以便我們做出最優(yōu)的手動分割選擇。
? ? ? ?
如果不可能將高度互連的塊放在一起,因為它們溢出了一個FPGA的資源,那么我們將需要降低層次結(jié)構(gòu)級別,并在下一級查找連接較少的塊,并提取要分配到不同F(xiàn)PGA中的塊。通過這種方式,我們?nèi)匀豢梢栽黾铀璧腇PGA的IO的數(shù)量,但比將更高級別的塊分配到其他地方的情況要少。
如果在此較低級別上沒有這樣的分區(qū),則我們可能會走得更低,但在越來越細(xì)的邏輯粒度上指定分區(qū)會使分區(qū)更可能受到設(shè)計迭代的影響,因為這些更細(xì)的粒度被不同地優(yōu)化或重命名。如果我們發(fā)現(xiàn)自己必須深入層次結(jié)構(gòu)以找到解決方案,那么最好返回并使用不同的粗略分區(qū)在頂層重新啟動。
分配各種設(shè)計功能模塊
使用我們對每個塊的面積的估計,我們可以將剩余的設(shè)計塊分配給FPGA資源,從最大的塊開始。我們從較大的塊開始,因為這自然會將較小的塊留給稍后的分區(qū)過程。然后,隨著FPGA資源可能變得過滿(請記住,50%到70%的利用率是一個很好的目標(biāo)),我們可以更自由地放置粒度更細(xì)、輸入和輸出數(shù)量更少的較小塊。
當(dāng)我們進(jìn)行分區(qū)時,我們希望平衡FPGA的資源使用,同時將利用率保持在可容忍的范圍內(nèi),即低于70%的建議值。這將有助于避免長時間的運(yùn)行時間,并使其更容易達(dá)到所需的時間。
選擇了分區(qū)的候選塊后,我們可能會進(jìn)行嘗試分配,直到找到最佳解決方案,然而,在具有許多FPGA的原型中,這是低效的。我們已經(jīng)看到,對我們的任務(wù)決定進(jìn)行即時反饋是多么有用。事實(shí)上,在分配任務(wù)之前獲得反饋更為有用。這使我們能夠提前了解如果將選定塊放置在這樣或那樣的FPGA中,對IO和資源的影響。這種預(yù)警稱為影響分析。
這里我們可以看到,我們選擇的塊具有672個邏輯元素的區(qū)域,從先前的資源估計中提取。如果我們選擇將塊分配給mb.uB,我們將使FPGA的面積增加672個邏輯元件(總共478080個),并將IO計數(shù)增加137個,使其總數(shù)達(dá)到150個。
我們還可以看到,如果我們將塊分配給mb.uA,那么面積仍將增加相同的數(shù)量,但I(xiàn)O需求將減少83個引腳,這可能是因為我們的塊連接到已經(jīng)分配給mb.uA的一些邏輯。我們可以根據(jù)此快速分析選擇mb.uA然后單擊分配。與所有由交互式用戶界面驅(qū)動的工具一樣,一旦我們熟悉該方法,就可以使用腳本和命令行。
在放置了主要的分層塊之后,我們可以使用相同的方法用較小的塊來填補(bǔ)空白。對于較小的塊,順序并不那么重要,我們可以通過連接和資源使用等信息來指導(dǎo)。一些工具還提供屏幕上的指導(dǎo),如基于所需連接的各種權(quán)重的“老鼠窩”線,這些線似乎將所選塊拉向最佳FPGA選擇。
在手動完成關(guān)鍵任務(wù)后,一些團(tuán)隊將在這個階段改用自動分區(qū)。如果這可以在與手動分區(qū)器相同的環(huán)境中運(yùn)行,則效率更高。我們只是到達(dá)了一個讓我們感到滿意的地步,我們已經(jīng)控制了我們的關(guān)鍵任務(wù),并按下按鈕完成剩下的任務(wù)。
審核編輯:劉清
-
FPGA
+關(guān)注
關(guān)注
1625文章
21623瀏覽量
601244 -
SoC芯片
+關(guān)注
關(guān)注
1文章
606瀏覽量
34843 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59666
原文標(biāo)題:對SoC進(jìn)行手動FPGA分區(qū)
文章出處:【微信號:于博士Jacky,微信公眾號:于博士Jacky】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論