摘 要: 本文介紹了一種新的復用器重構算法,能夠降低FPGA實際設計20%的成本。該算法通過減少復用器所需查找表(LUT)的數量來實現。算法以效率更高的4:1復用器替代2:1復用器樹。算法性能的關鍵在于尋找總線上出現的復用器數量。新的優化方法占用一定的邏輯,這些邏輯由總線進行分擔,從而減少了總線上每個比特位所需的邏輯。 (本站編者:該算法已經集成在QuartusII4.2軟件中,使用QuartusIi進行綜合HDL語言時會自動調用該算法進行綜合,本文介紹該算法的詳情,本文適合希望深入了解算法的用戶閱讀)
關鍵詞: FPGA;復用器;重構;重新編碼;總線;邏輯優化;綜合
1. 引言
--- 復用器是數據通道常用的構建模塊,被廣泛應用在處理器[1]、處理器總線、網絡交換,甚至是資源共享的DSP設計中。據估計,復用器一般要占用一個FPGA設計[2] 25%以上的面積。因此,優化FPGA設計的關鍵在于怎樣優化復用器。
--- 本文介紹了一種新的復用器重構算法,該算法減小了復用器在基于4輸入查找表(4-LUT)FPGA體系結構中所占用的面積。基準測試結果表明復用器平均減少了17%,在一些設計中,4-LUT整體減少20%。
--- 2.1節闡述了復用器是如何由行為級VHDL[4]或Verilog[5]代碼產生的,2.2和2.3節闡述復用器樹和復用器總線在設計中是怎樣生成的。2.4節說明這些結構怎樣由4-LUT實現,闡述如何采用兩個4-LUT有效實現一個4:1二進制復用器。
--- 第3節介紹了一種叫做壓縮的新技術,該技術附加一些控制邏輯,將多個2:1復用器重新組合為有效的4:1復用器,從而減少了為總線上每一個比特位實現復用器所需要的4-LUT數量,所附加的控制邏輯代價由整個總線來分擔。優化復用器總線是復用器重構算法的核心。
--- 4.1節闡述復用器重構算法如何構建設計中的復用器樹總線。4.2節的重構方法用于執行4.3節中定義的均衡算法。均衡增加了由壓縮生成的有效4:1復用器的數量。
--- 第5節總結了在Altera Quartus II集成綜合中運行的整個算法。第6節列出了來自120個Altera真實用戶設計實例的基準測試結果,測試表明面積減少超過20%,平均節省了4.2%。
2. 背景知識
--- 2.1 復用器在設計中是怎樣實現的
--- 行為級HDL設計中的任何條件代碼通常會綜合為復用器。本節闡述兩個最常用的復用器生成代碼實例。
--- 圖1是VHDL的case聲明及其2:1復用器樹的實現。采用Verilog case聲明的“parallel case”指令[5]可產生相似的結果。
圖1
--- 注意,并不是所有的case聲明都能將可能的事件描述清楚,需要依靠“default”或者“others”條件來進一步說明。在這些情況下,可以繼續將case聲明表征為2:1復用器樹,但是這種樹結構可能達不到平衡。
--- 圖2顯示了“if-then-else”聲明是怎樣產生一個2:1復用器鏈的。Verilog的“?:”和非平行cases可同樣產生相似的結構。注意,復用器鏈確保如果第一個if條件為“真”,將選擇“a”數據輸入,而復用器其他部分將被忽略。
--- 本文闡述的復用器重構算法應用于2:1復用器。綜合工具由行為級代碼開始通常會生成較大的復用器。較大的復用器總是被分解為2:1復用器樹,如何實現這種分解已經超出本文討論范圍。
圖2 if-then-else聲明生成的邏輯
圖3 HDL生成的復用器材
圖4 生成復用器總線
--- 2.2 復用器樹
--- 設計中復用器之間的饋入是常見的現象。例如,在一段HDL代碼中,如下面的圖3所示,if-then-else聲明中含有case聲明就會產生這種現象。
--- 在復用器重構算法中,識別出較大的復用器樹對于盡可能減少面積是非常重要的。
--- 2.3 復用器總線
--- VHDL信號或Verilog線寬通常會超過一個比特位。當采用if-then-else和case聲明時,將會生成大量具有不同數據輸入的相同復用器樹,圖4是一個實例。一組具有相同結構的復用器稱為復用器樹總線。
--- 本文闡述的復用器重構技術采用了新的對整個復用器總線進行優化的方法,它通過由4.1節中進一步闡述的總線識別和形成技術來實現。
--- 2.4 復用器代價
--- 在許多情況下,每個2:1復用器都需要一個單獨的4-LUT。這樣,圖1和圖2中的復用器結構都需要三個4-LUT。盡管這些結構控制編碼不同,但是它們都具有4個不同的數據輸入,因此可以當作4:1復用器。本節闡述如何實現只需要兩個4-LUT的4:1復用器。
--- 圖5是控制輸入S0低電平時,一個有效的4:1復用器是如何工作的。4:1復用器由兩個鏈接在一起的4-LUT(陰影框所示)構成。每個4-LUT被設置為含有陰影框中的邏輯功能。如白框所示,復用器含有四個輸入——a、b、c和d,以及兩個控制輸入——S0和S1。
圖5
--- S0低電平時,低位控制比特S1在輸入c和d中進行選擇,其結果通過第二個4-LUT,將a或者b輸入旁路。
圖6
--- 圖6是控制輸入S0高電平時,一個有效的4:1復用器是如何工作的。低位控制比特S1旁路c和d輸入,直接進入第二個4-LUT,對a或者b輸入進行選擇,其結果成為第二個4-LUT的輸出。
--- 第3節描述的壓縮算法采用這種有效的4:1復用器,重新實現復用器結構,達到了減小面積的目的。
3. 壓縮
--- 壓縮是將低效的4:1復用器實現轉換為高效實現的過程。復用器重構算法的面積節省由壓縮實現。但是,在不同的復用器表征中進行轉換,通常需要附加控制邏輯。實際上,由于附加邏輯結構抵消了使用高效復用器結構的優勢,這種轉換很少能夠產生真正的面積節省。而復用器重構算法采用新穎的將整個復用器總線進行轉換的方法,這樣,總線上的多個復用器可以共享控制邏輯,因此,改善后的復用器結構優勢可通過總線上的每個復用器來實現。
圖7
--- 圖7顯示了如何將三個2:1復用器組成的優先級鏈轉換為一個4:1二進制復用器。假設控制輸入由不相關的邏輯饋入,那么這種轉換至多需要兩個額外的4-LUT控制邏輯。如果最初的復用器至少占用三個4-LUT,而4:1復用器只需要兩個即可實現,那么這種轉換將節省3寬度或者更寬總線的面積。
圖8
--- 圖8顯示了如何將一組排列成樹的2:1復用器轉換為一個4:1復用器。在這種情況下,通過仔細為4:1復用器選擇編碼方式,使S0在(A、B)和(C、D)之間進行選擇,限制附加控制邏輯,只加入最多一個4-LUT。此時,這種轉換將節省2寬度或者更寬總線的面積。
--- 一般來講,任何的三個2:1復用器組都可以通過圖7或圖8的方式轉換為一個4:1復用器。但是,這兩種轉換必須在寬度大于2的復用器總線上進行,以減小所需4-LUT的數量,實際上,如果這兩種轉換不在總線上進行,將沒有意義。
--- 總線上2:1復用器三聯重新編碼是復用器重構算法的核心。 第4節將闡述形成數量最多三聯的新方法。
?
4. 復用器總線
4.1 “庫”的構造
--- 壓縮減小了其所編碼的每一個2:1復用器三聯面積,因此,壓縮應用在較大的復用器樹上最有效。本節闡述大型復用器樹是如何構建的。設計中所有的總線都將被存儲在一種稱為“庫”的數據結構中。
--- 復用器樹采用下面的方法構建。設計中所有2:1復用器以反向深度順序排列。這意味著那些離寄存器或者輸出引腳最近的復用器將排在列表前面。然后從頭至尾掃描列表,尋找每一個2:1復用器,如果其輸出僅與另一個2:1復用器相連,則將該復用器和與其相連的復用器一起加到復用器樹中。否則,將此2:1復用器作為一個新復用器樹的首復用器。以此方式來構建的復用器樹含有最大數量的復用器。
--- 如果復用器樹中復用器的所有數據輸入均不是由同一個樹中其他的2:1復用器饋入,則稱此復用器為初級輸入(對整個樹而言)。
--- 一旦所有的復用器樹已經形成,則將其合并成總線。如果兩個復用器樹要并入同一個總線,它們必須具有相同的結構,即2:1復用器的排列相同,并且都有完全一致的控制輸入。這可以通過根據復用器結構,對所有復用器樹列表排序來實現,在列表中將結構相同的樹靠近排列。總線可直接由結構相同的樹構成。
--- 通過規則選取來實現總線寬度最大化。寬總線可以將由壓縮引入的控制邏輯開銷降低到最小。
--- 4.2 重構
--- 4.3節描述均衡方法,該方法能夠使壓縮得到的面積減小最大化。均衡建立在重構的基礎上,其概念由本節給出。
--- 通過2:1復用器所饋入的一個2:1復用器,重構移動該復用器及其一個輸入。圖9顯示了陰影復用器與其“f”輸入的重構。為保持原始復用器總線的功能,需要附加一些控制邏輯。這些控制邏輯同樣可以由總線上的每一個復用器樹來分擔。
圖9
--- 圖9中,重新編碼邏輯(c6 AND (NOT c3))必須確保當c1、c3為“假”而c6為“真”時,選擇輸入“f”(與轉換前的情況一致)。同樣,當c1、c3、c6為“假”時,選擇輸入“g”,即(c6 AND (NOT c3))也是“假”。
--- 重構轉換將選中的復用器進一步向復用器樹頂端移動。因此,不斷重復重構轉換,可以將任意位置的復用器向頂端移動。
--- 4.3 均衡
--- 壓縮通過轉換2:1復用器三聯,能夠減少實現復用器總線所需的4-LUT數量。但是,如果不進行復用器樹重構,有些結構是不可能得到最佳三聯分組的。例如,無法將圖10中所有的2:1復用器進行分組,這是因為每一種可能的分組都將會剩余一個2:1復用器而無法處理。
--- 均衡的目的在于通過最少的重構得到最佳的壓縮。對于圖10的例子,可以采用圖11所示的方法,得到兩組2:1復用器三聯。
--- 均衡算法由圖12的遞歸定義。由首復用器開始,算法首先均衡復用器樹左面和右面數據輸入。均衡返回還沒有連接為三聯的2:1復用器的數量。均衡確保形成盡可能多的三聯,這樣只會剩余一個或者兩個2:1復用器,甚至沒有剩余。
--- 均衡中的任何階段,都需要對1~5個2:1復用器進行均衡(從左側分支開始最多兩個,從右側分支開始為兩個,還要算上當前的2:1復用器本身)。1或2個復用器不會形成更多的三聯,而3個復用器總是能夠形成三聯。4或5個復用器則需要進行重構,以免剩余無法處理的復用器,這種重構方法在圖13和圖14中示出。
圖10 復用器樹次優壓縮的例子
圖11 由均衡未完善壓縮
圖12 均衡算法
圖 13重構4個復用器實現均衡
圖14 重構5個復用器實現均衡
5. 算法總結
--- 本文引入了復用器樹總線概念,描述了可用來提高壓縮性能的均衡方法,壓縮以效率更高的4:1復用器來替代2:1復用器三聯。圖15顯示了全部復用器重構算法。
--- 復用器重構算法性能依賴于對較大復用器樹總線的識別。由于復用器重構算法在整個總線上分擔控制邏輯,因此,總線越寬,壓縮的效果就越明顯。優化會減小復用器樹間的相似性,從而減小所尋找的總線寬度,因此在復用器重構之前,應盡量避免優化。
--- 復用器重構以分解大的復用器為2:1復用器開始。設計中所有2:1復用器都用于形成4.1節所描述的復用器樹。結構相似的復用器樹然后合并形成4.1節中的總線結構。
--- 算法的主要部分依次優化每一個總線。均衡將2:1復用器重新排列為三聯,這樣在壓縮階段,每個三聯能夠重新編碼為效率更高的4:1復用器。
圖16 復用器重構基準測試結果
6. 結果
--- 本文所闡述的算法已經集成到Altera Quartus II 4.2綜合軟件中。圖16顯示120個真實用戶設計中,Altera基準測試的面積減小結果。
--- 結果表明,一小部分設計所需的LUT數量減小了20%,超過四成的設計面積減小了5%以上。所有設計面積平均減小了4.2%。
--- 據估算,面積減少平均4.2%意味著復用器平均減少了17%。
--- 復用器重構主要集中在減小面積上(例如,減少所需4-LUT的數量),而且對電路速率影響不大,電路平均速率僅降低1%。
7. 結論
--- 本文闡述了復用器重構算法,該算法能夠將設計中實現復用器所需的4-LUT數量平均減少17%。
--- 復用器重構算法的關鍵在于優化復用器總線。即使附加了控制邏輯,新優化算法仍能夠減小總線上每個比特位的面積。這是由于控制邏輯可以由總線共享,其面積代價可以抵消。
--- 壓縮將2:1復用器三聯轉換為有效的4:1復用器。盡管可能需要附加LUT對4:1復用器控制線進行重新編碼,這種代價可以通過采用復用器總線整體壓縮方法來抵消。此外,通過構建最大的復用器樹,可對大量的2:1復用器三聯進行轉換。
--- 本文還引入了能夠提高壓縮算法效率的均衡方法。本文描述了面向基于4-LUT的FPGA算法,例如Altera Stratix I和Cyclone器件。新的FPGA體系結構可使用不同大小的查找表(如Stratix II體系結構能夠采用4、5、6輸入LUT)。可采用本文闡述的方法來進一步減小這些體系結構的面積。
參考文獻
1 A High Performance 32-bit ALU for Programmable Logic. P. Metzgen. Proceedings of the 2004 ACM/SIGDA 12th international symposium on Field Programmable Gate Arrays. Pp 61-70. 2004.
2 Logic Optimization Techniques for Multiplexers. J. Stephenson and P. Metzgen. Mentor User2User Conference 2004, www.mentor.com\user2user
3 The Stratix Device Handbook (Vol 1). Altera Corporation, 2004.
4 1076(tm) IEEE Standard VHDL Language Reference Manual. IEEE Computer Society. IEEE Std 1076(tm)-2002.
5 IEEE Standard Verilog(r) Hardware Description Language. IEEE Computer Society. IEEE Std 1364-2001.
評論
查看更多