文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.189018
中文引用格式: 苑佳紅. Stratus HLS工具在高性能雙精度浮點乘法設(shè)計中的應(yīng)用流程[J].電子技術(shù)應(yīng)用,2018,,44(8):20-23,30.
英文引用格式: Yuan Jiahong. The application flow of Stratus HLS tool in high performance double precision floating point multiplication design[J]. Application of Electronic Technique,2018,,44(8):20-23,30.
0 引言
數(shù)字多媒體的廣泛應(yīng)用,、互聯(lián)網(wǎng)的高速發(fā)展,、人工智能等新興領(lǐng)域的蓬勃興起,,對通用處理器的計算能力要求越來越高,。采用更加復(fù)雜的算法設(shè)計、探索效率更高的架構(gòu)有助于提升通用處理器的性能,。然而在傳統(tǒng)的寄存器傳輸級(Register Transfer level,,RTL)設(shè)計流程中,設(shè)計人員完成運算功能設(shè)計時需消耗大量時間在狀態(tài)機設(shè)計,、流水棧劃分和調(diào)整,、端口協(xié)議,、存儲設(shè)計等復(fù)雜,、難以驗證和優(yōu)化的部分。而且由于RTL抽象層次較低,,需要大量的時間和資源驗證RTL的功能,,最后導(dǎo)致較長的設(shè)計周期,。Stratus高階綜合工具(High-level Synthesis,,HLS)基于高階綜合設(shè)計方法學(xué),,將設(shè)計層次抽象到算法級,將設(shè)計的低值且復(fù)雜的領(lǐng)域交給工具自動完成,,設(shè)計人員能夠?qū)⒏嗟臅r間應(yīng)用在算法設(shè)計、優(yōu)化,、架構(gòu)探索等高價值領(lǐng)域,提高設(shè)計效率,,專注產(chǎn)品質(zhì)量的提升。本文基于Cadence公司的高階綜合工具Stratus設(shè)計和實現(xiàn)高頻低功耗的雙精度浮點乘法模塊,并在此過程中探討高階綜合完成產(chǎn)品前端設(shè)計,、驗證,、優(yōu)化、性能評估的方法和流程,。
1 HLS應(yīng)用流程
Stratus HLS將設(shè)計抽象到算法級,,對算法做硬件微架構(gòu)實現(xiàn)的構(gòu)想后,使用高級語言SystemC/C/C++描述設(shè)計,,并在高級語言層對設(shè)計做充分的非時序功能驗證,如圖1中設(shè)計階段1所示,。在設(shè)計階段2,,首先需根據(jù)設(shè)計目標設(shè)置高階綜合的約束文件及工藝庫,。然后將設(shè)計階段1完成的SystemC代碼和約束文件灌入Stratus HLS工具,,由工具完成狀態(tài)機、寄存器插入,、流水線級數(shù)設(shè)置等控制電路,生成符合時序,、面積,、性能要求的RTL代碼。最后對RTL代碼做PPA檢查,,選擇使用邏輯綜合工具再一次對HLS生成的RTL代碼做性能評估,,如果符合要求,則開始做RTL的完整功能驗證,。如果PPA檢查不能達到目標要求,,則需要對關(guān)鍵路徑進行分析、優(yōu)化,,此時可以充分利用HLS工具自帶的優(yōu)化功能加速優(yōu)化設(shè)計迭代的完成過程。功能驗證正確后,,則可以進入設(shè)計階段3,邏輯綜合后,,設(shè)計交由后端做邏輯實現(xiàn)。
2 Fmul64 SystemC設(shè)計
雙精度浮點乘法運算部件是通用CPU內(nèi)最基本運算部件之一,其應(yīng)用要求高階綜合獲得RTL設(shè)計滿足2.5 GHz的高頻率,,三站流水,并且其面積和功耗較小,。此部分將介紹Fmul64的主要結(jié)構(gòu)和SystemC設(shè)計方法。
2.1 Fmul64_hls總體結(jié)構(gòu)
Fmul64的SC設(shè)計總體框圖如圖2所示,,sc_main()是SystemC設(shè)計的top文件,,連接測試環(huán)境Testbench和待測設(shè)計DUT,。DUT即Fmul64,用SystemC語言中的SC_MODULE類實現(xiàn),,作為此次設(shè)計的頂層模塊,,同時在此模塊內(nèi)定義模塊的端口,、時鐘信號、復(fù)位信號,、輸入端口,、輸出端口等,,作為設(shè)計的頭文件,,并包含在其他文件內(nèi)使用,。SystemC語言提供兩個方法用于設(shè)計功能的描述:SC_METHOD和SC_CTHREAD,。其中SC_METHOD用于組合邏輯電路實現(xiàn),,內(nèi)部不能包括wait()語句,,而要實現(xiàn)的Fmul64是流水線設(shè)計,,所以使用SC_CTHREAD用于乘法運算功能的實現(xiàn),函數(shù)命名為run,。
2.2 SC_CTHREAD方法實現(xiàn)
SC_CTHREAD進程實現(xiàn)如圖3所示,,首先設(shè)置需要復(fù)位的信號和復(fù)位值,,然后是定義無限循環(huán)語句,并在內(nèi)部調(diào)用輸入輸出信號的讀寫函數(shù)和含3階波茲編碼的乘法運算函數(shù)do_booth3_multply,。這里用HLS命令HLS_PIPELINE_LOOP設(shè)置設(shè)計類型,,即吞吐率參數(shù)PIPELINE_Ⅱ設(shè)為1,即將Fmul64_hls設(shè)置為流水線型設(shè)計,,并用HLS_CONSTRAINT_LATENCY設(shè)定流水線拍數(shù)LATENCY為3,。Stratus HLS允許將吞吐率和延遲使用宏定義的形式,便于架構(gòu)探索時更改參數(shù),。
2.3 Fmul64行為級實現(xiàn)
雙精度浮點乘法運算過程如圖4所示,。首先對輸入乘法操作數(shù)做數(shù)據(jù)的預(yù)處理,然后做尾數(shù)相乘的乘法運算,,在這里,,本文做了架構(gòu)探索,一種架構(gòu)是使用3階波茲編碼算法實現(xiàn)雙精度浮點尾數(shù)乘法運算,;另一種是使用乘號“*”直接完成浮點尾數(shù)相乘運算,,讓工具來完成乘法運算的具體實現(xiàn)。兩種架構(gòu)的驗證環(huán)境,、優(yōu)化流程是相同的,,所以后續(xù)設(shè)計將以Fmul64波茲編碼設(shè)計為例進行介紹,最后會介紹兩者邏輯綜合結(jié)果,。設(shè)計中使用到的高階綜合指導(dǎo)語句(主要是HLS_DPOPT_REGION)如圖5所示。
至此,,SC代碼設(shè)計已完成,并且按照設(shè)計目標的要求使用高階綜合指導(dǎo)語句設(shè)置了流水線和時序要求,,可以開始后續(xù)的驗證和高階綜合處理,。雖然設(shè)計是使用高級語言SystemC描述,,但是其微架構(gòu)仍然是符合硬件設(shè)計和實現(xiàn)規(guī)則的,所以需要注意保持良好的SystemC代碼風(fēng)格非常重要,。
3 功能驗證
Stratus HLS工具提供統(tǒng)一的驗證平臺,,所以在SC級的測試用例可以同樣用于RTL代碼的驗證,。但是,SC設(shè)計是不包含時序信息的,,所以包含時序的RTL驗證也是必需的,,除了在Stratus內(nèi)回歸測試SC代碼的用例,,還將使用已有的UVM平臺,對RTL和SC設(shè)計同時驗證,,一方面驗證RTL的功能并收集RTL覆蓋率,另一方面一定程度上驗證SC設(shè)計和RTL代碼的一致性,。所以HLS設(shè)計的驗證分為2個方面:
(1)基于Stratus HLS的驗證
①SC行為級模型驗證(SystemC behavioral model)
②綜合的SC RTL模型驗證(Synthesized SystemC RTL model)
(2)基于UVM的SystemC&RTL的驗證
Verilog RTL實現(xiàn)驗證(Verilog RTL implementation)
3.1 基于Stratus HLS的驗證
基于Stratus HLS環(huán)境,,本文使用SystemC建立設(shè)計的Testbench環(huán)境,,其結(jié)構(gòu)框圖如圖6所示。時鐘和復(fù)位信號的定義是在主函數(shù)內(nèi),并連接到測試模塊和待測設(shè)計模塊,。Testbench中共實現(xiàn)兩個進程,,Stimuli和Monitor,。Stimuli進程里調(diào)用SystemC語言提供的隨機數(shù)據(jù)生成函數(shù),,生成測試的隨機數(shù)據(jù),。Monitor進程實現(xiàn)簡單的雙精度乘法運算模型,,用于待測設(shè)計的參考模型,并在此處監(jiān)測DUT的結(jié)果輸出,,獲得DUT結(jié)果并與參考模型結(jié)果做比對,,判斷結(jié)果的正確性,。Stratus HLS工具內(nèi)可以自動實現(xiàn)對SC設(shè)計和RTL設(shè)計使用同一個Testbench驗證,,只要在project.tcl中定義不同的define_sim_config時,,指定為RTL_C是對SC設(shè)計驗證或者指定RTL_V是測試高階綜合生成的RTL模型,。
3.2 基于UVM的SystemC&RTL驗證
UVM驗證環(huán)境是既有的乘法運算驗證環(huán)境,如圖7所示,,可以對Fmul64_hls設(shè)計做完整的功能驗證、覆蓋率收集,、斷言監(jiān)測,,同時將SC設(shè)計也放到了驗證環(huán)境里,,但是需要對其外包一個殼,,可以由Stratus工具自動生成,。此部分功能驗證即如圖1 Stratus HLS設(shè)計流程的設(shè)計階段2中的功能驗證2,,因為高階綜合生成RTL代碼的可讀性較差,,所以如果測試用例結(jié)果不一致,,尤其SC設(shè)計的結(jié)果也報錯的話,則需要將測試用例轉(zhuǎn)到Stratus HLS環(huán)境下進行調(diào)試。
4 性能評估
4.1 優(yōu)化設(shè)計
Stratus HLS在將SC設(shè)計轉(zhuǎn)化為RTL代碼時,,由于評估的謹慎性,,會給出更加悲觀的結(jié)果,因此本文選擇使用邏輯綜合工具評估HLS設(shè)計的PPA檢查,邏輯綜合約束參考設(shè)計實際實現(xiàn)要求,,所以比HLS工具中的邏輯綜合約束設(shè)置得更加細致,,最后根據(jù)邏輯綜合結(jié)果來決定是否做設(shè)計優(yōu)化的迭代,。
在時序較為緊張的時候,,Stratus通常需要很長的時間來做高階綜合優(yōu)化和調(diào)度,,這就使設(shè)計優(yōu)化迭代的時間非常長,,是違背使用高階綜合工具提高設(shè)計效率初衷的。但是Stratus提供多種有效的數(shù)據(jù)路徑優(yōu)化方法,,可以有效地改善路徑延遲,,提高高階綜合效率。比如在設(shè)計優(yōu)化迭代過程中添加DPOPT,,如圖5 SC實現(xiàn)Fmul64過程中的主要HLS指導(dǎo)語句所示,。DPOPT會調(diào)用內(nèi)部集成的邏輯綜合工具優(yōu)化這部分設(shè)計,而且DPOPT通常會使Stratus綜合一版RTL用時大為縮短,,從而大幅提高優(yōu)化設(shè)計的效率,。
4.2 低功耗優(yōu)化
Stratus工具自帶低功耗優(yōu)化選項,可以自動完成寄存器門控時鐘的插入,、時鐘樹優(yōu)化、狀態(tài)機優(yōu)化等,。本文的設(shè)計是運算功能模塊,,要求在沒有此模塊運算指令的情況下,模塊完全關(guān)閉,動態(tài)功耗為零,;有乘法運算指令的情況下,,動態(tài)功耗和靜態(tài)功耗能夠盡可能小。Fmul4_booth3的初次功耗評估結(jié)果如表1所示,。
通過上述數(shù)據(jù),,可以了解到Fmul64_HLS設(shè)計在無乘法運算時,滿足動態(tài)功耗為零的要求,,但是在有乘法運算指令時的功耗卻比較大,,不滿足功耗要求,需要對功耗做進一步的優(yōu)化,。分析設(shè)計發(fā)現(xiàn)DPOPT功耗和資源共享都會引起功耗的增加,,所以在project增加以下選項優(yōu)化功耗:
(1)set_attr dpopt_with_enable on
(2)set_attr sharing_effort_parts low
dpopt_with_enable對RTL架構(gòu)的影響如圖8所示。
顯然dpopt_with_enable=on的RTL架構(gòu)是對靜態(tài)功耗的優(yōu)化大有幫助的,。
sharing_effort_parts =low 會停止演算器的共享,。經(jīng)分析,這個選項可以減少不必要的演算器的共享從而可優(yōu)化動態(tài)功耗以及時序,。優(yōu)化之后的Fmul64_booth3功耗如表2所示,。
可以看到通過設(shè)置優(yōu)化選項,靜態(tài)功耗和動態(tài)功耗均有所優(yōu)化,,其中靜態(tài)功耗約優(yōu)化了5%,,動態(tài)功耗優(yōu)化了約39%。寄存器門控比率達到100%,,完全由工具完成寄存器門控時鐘的插入和低功耗優(yōu)化,,提高設(shè)計效率。
4.3 邏輯綜合結(jié)果
高階綜合設(shè)計的RTL功能驗證正確后,,則設(shè)計可以做邏輯綜合,。對兩種Fmul64架構(gòu)分別作了邏輯綜合,在28 nm工藝下,,邏輯綜合結(jié)果如表3所示,。
Stratus HLS給出的面積評估結(jié)果與邏輯綜合工具的結(jié)果有所不同,經(jīng)分析,,Stratus HLS綜合約束并不嚴格,,所以面積、延遲的評估數(shù)據(jù)存在誤差,。而對比兩種架構(gòu)綜合結(jié)果,,可以看到Fmul64用乘號代替波茲編碼算法的設(shè)計面積上更優(yōu)化,而時序結(jié)果相對較差,,但是,,其在設(shè)計時間的節(jié)省是非常顯著的,。
5 結(jié)論
Stratus HLS工具改變了設(shè)計的抽象層次,所以其在工程中的應(yīng)用流程與傳統(tǒng)RTL設(shè)計是有區(qū)別的,,驗證環(huán)境,、調(diào)試流程、驗證收斂的依據(jù),、邏輯綜合優(yōu)化的時間等問題的解決提前到了算法級,,而且可以將微架構(gòu)的探索加入到設(shè)計流程,不變的是設(shè)計人員仍然需要從硬件的角度考慮SC代碼的微架構(gòu)設(shè)計,。Stratus HLS工具強大的狀態(tài)機自動化設(shè)計,、資源自動調(diào)度和共享、低功耗優(yōu)化等功能,,使設(shè)計人員能夠?qū)⒏嗟臅r間用于架構(gòu)探索或者算法優(yōu)化,,極大的縮短設(shè)計周期,拓展設(shè)計人員可控制設(shè)計規(guī)模上限,,滿足工程項目的時間進度要求,,也增強了我們在工程項目中推廣使用高階綜合工具的信心和決心。
作者信息:
苑佳紅
(天津飛騰信息技術(shù)有限公司,,湖南 長沙410000)