新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > QIC 在縮短大容量FPGA編譯時間中的作用

        QIC 在縮短大容量FPGA編譯時間中的作用

        作者: 時間:2012-12-13 來源:網絡 收藏

        6.jpg

        圖4 在Quartus GUI中創建分區示意

        5.jpg

        圖5 分區與邏輯歸屬變化

        4.jpg

        圖6 分區合并報告

        3.jpg

        圖7 分區綜合后資源使用統計

        2.jpg

        圖8 Design partition window

        1.jpg

        圖9 Design partition window

        從前面分區的性質和特點可以看出,對包含多個功能模塊的多層次復雜設計,可以有許多種設置分區的方案。但需要注意的是:不是任何一種分區方案都能帶來的節約,惡劣的設計分區甚至能夠導致編譯失??!如何得到高效合理的設計分區呢?我們需要遵從以下原則:

        a. 不要創建太多的分區,一般性的設計建議分區的數量控制在4~8個之間;

        b. 不要創建太小的分區,一般建議不要小于1000個LE或者ALM;

        c. 外設接口邏輯和內核處理邏輯放到不同的設計分區;

        d. 相同或相近功能的外設接口,如果管腳位置相鄰,可以放在同一個分區,否則創建不同的設計分區;

        e. 不同的分區方案中,分區之間的聯接少的方案更優。

        針對優化代碼

        除了分區方案,設計代碼也對的性能有直接的影響,需要設計者針對做一些特定的代碼優化。優化主要有兩方面,一方面是升級所使用的Megacore IP到最新的版本;另一方面則是一些更嚴格的編碼規則。

        之所以建議升級Megacore IP到最新的版本,這是由于QIC增量式編譯常常需要調用Megacore IP的一些特性來支持一些特定操作,而這些特性通常在較新的版本中才能得到比較好的支持,而且隨著QIC的成熟不斷改進。筆者就曾經在一個嘗試使用QIC的項目中,發現客戶的設計繼承了一部分老項目中的代碼,其中包含好幾個Quartus 9.1版本的DDR EMIF控制器,占了整個設計使用資源的20%左右。當說服客戶把這幾個控制器升級到當時最新的Quartus 11版本,發現QIC所能節約的增加了近1個小時,大約15%的整體

        之所以QIC要求遵從更嚴格的編碼規則,這是由于Quartus在有分區存在的時候,是不對跨越分區邊界的邏輯進行綜合優化,一些在Flat compilation中可以被軟件優化掉的不良代碼,在QIC的流程中會造成嚴重的影響。這些嚴格的編碼規則包括:

        a. 不要在底層分區邊界上使用三態信號和雙向端口;

        Altera器件中,只有在器件的輸出管腳上才能實現真正的三態信號,在器件內部,三態驅動是依靠多路器邏輯模擬實現,這兩點往往要求跨層的編譯優化,而這在增量式編譯流程中是做不到的,會導致編譯失敗。只有一種情形例外,就是內部三態邏輯所涉及的所有信號都在同一個底層分區中,Quartus可以依靠多路器邏輯模擬此三態邏輯。雙向端口也類似,只有在此雙向邏輯所涉及的所有信號都在一個底層分區中,QIC才能正常進行。

        b. 分區的輸入輸出最好都通過寄存器實現,資源有限的情況下至少保證跨分區的連接中的一端是寄存器(reg-in或者reg-out);

        雖然這一規則有一定的實現難度,但它可以避免在使用增量式編譯流程的時候,那些跨分區邊界的信號的延遲出現大的惡化。如果不能實現這一規則,跨分區連接的兩端有可能都是組合邏輯。在Flat Compilation中,這兩組組合邏輯會被綜合優化到一起來布局布線,時序容易滿足;但在是增量式編譯中,由于不能跨區優化,這2組組合邏輯的分別布局布線,那穿過這兩組邏輯的路徑延遲將有可能變得很長,出現時序違背。

        c. 避免不包含任何處理邏輯的信號環路穿越分區邊界;

        也是由于不能跨區優化,這樣的信號環在Flat Compilation中可以被優化消除掉,在增量式編譯中就不能消除,浪費資源。

        d. 避免跨分區的常量信號

        類似C,跨區的常量信號不能在目的端分區中直接實現(“0”連接地層,“1”連接電源層),而必須占用走線資源實現。

        關注相關報告信息

        使用QIC時,Quartus中會產生很多QIC專有的消息,因此在編譯報告中也增加一些新的章節。這些報告章節,對我們了解QIC的運行情況有直接的幫助,尤其是當一些異常情況出現,往往需要我們通過閱讀這些報告章節來進行調試。比較重要的報告有:

        a. Partition Merge report

        分區合并的報告章節如下圖所示,分別提供在這個階段網表的使用情況(netlist Types Used),各個分區的綜合警告信息(Partition Warning)和綜合后各類資源使用情況(Partition Statistics)。

        b. Incremental compilation section in Fitter report

        在Fitter報告中,也增加了增量式編譯的章節。其中,Incremental Compilation Preservation Summary匯總了設計中被保留的布局和布線比例;Incremental Compilation Partition setting 說明了設計中所有分區的創建方式和網表的保留級別(Preservation level);Incremental Compilation Placement Preservation給出了每一個分區中節點保留的信息;Incremental Compilation Routing Preservation則是每個分區中布線保留的信息。

        c. Design partition window

        這個窗口默認是不在Quartus 界面中顯示的,用戶需要通過Quartus菜單欄“Assignments”->”Design partition window”打開這個窗口。這個窗口給出可配置分區的當前設置及各個網表文件的時間戳信息,并且可以在此窗口中快速修改分區使用的網表類型(Netlist Type)和Fitter網表的保留級別(Fitter Preservation Level)。

        結束語

        在本文中,向大家介紹了增量式編譯的原理、過程和一些性能表現,同時給出了使用QIC需要注意的一些指導原則。華為、中興等客戶的多個項目實踐已經證明QIC是一個可以用來解決設計編譯時間太長的有效手段。增量式編譯QIC,值得您去嘗試!


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 乐昌市| 和平区| 二连浩特市| 博湖县| 灵武市| 平武县| 湾仔区| 舟山市| 建始县| 眉山市| 牟定县| 博乐市| 张家口市| 丹棱县| 长寿区| 秀山| 娱乐| 共和县| 承德县| 宣化县| 武冈市| 铜山县| 荔浦县| 万山特区| 疏附县| 蒙山县| 黑河市| 化隆| 兴宁市| 浦江县| 吉林省| 南岸区| 霍州市| 绵竹市| 建昌县| 电白县| 和田市| 徐水县| 阿荣旗| 克山县| 济南市|